/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.java.sip.communicator.plugin.otr.authdialog;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import net.java.otr4j.session.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.plugin.otr.*;
import net.java.sip.communicator.plugin.otr.OtrContactManager.OtrContact;
/**
* The dialog that pops up when the remote party send us SMP
* request. It contains detailed information for the user about
* the authentication process and allows him to authenticate.
*
* @author Marin Dzhigarov
*/
@SuppressWarnings("serial")
public class SmpAuthenticateBuddyDialog
extends SIPCommDialog
{
private final OtrContact otrContact;
private final String question;
private final InstanceTag receiverTag;
public SmpAuthenticateBuddyDialog(
OtrContact contact, InstanceTag receiverTag, String question)
{
this.otrContact = contact;
this.receiverTag = receiverTag;
this.question = question;
initComponents();
}
private void initComponents()
{
this.setTitle(
OtrActivator.resourceService
.getI18NString(
"plugin.otr.authbuddydialog.TITLE"));
// The main panel that contains all components.
JPanel mainPanel = new TransparentPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
mainPanel.setBorder(
BorderFactory.createEmptyBorder(10, 10, 10, 10));
mainPanel.setPreferredSize(new Dimension(300, 350));
// Add "authentication from contact" to the main panel.
JTextArea authenticationFrom = new CustomTextArea();
Font newFont =
new Font(
UIManager.getDefaults().getFont("TextArea.font").
getFontName()
, Font.BOLD
, 14);
authenticationFrom.setFont(newFont);
String resourceName = otrContact.resource != null ?
"/" + otrContact.resource.getResourceName() : "";
String authFromText =
String.format(
OtrActivator.resourceService
.getI18NString(
"plugin.otr.authbuddydialog.AUTHENTICATION_FROM",
new String[]
{otrContact.contact.getDisplayName() +
resourceName}));
authenticationFrom.setText(authFromText);
mainPanel.add(authenticationFrom);
// Add "general info" text to the main panel.
JTextArea generalInfo = new CustomTextArea();
generalInfo.setText(OtrActivator.resourceService
.getI18NString(
"plugin.otr.authbuddydialog.AUTHENTICATION_INFO"));
mainPanel.add(generalInfo);
// Add "authentication-by-secret" info text to the main panel.
JTextArea authBySecretInfo = new CustomTextArea();
newFont =
new Font(
UIManager.getDefaults().getFont("TextArea.font").
getFontName()
, Font.ITALIC
, 10);
authBySecretInfo.setText(OtrActivator.resourceService
.getI18NString(
"plugin.otr.authbuddydialog.AUTH_BY_SECRET_INFO_RESPOND"));
authBySecretInfo.setFont(newFont);
mainPanel.add(authBySecretInfo);
// Create a panel to add question/answer related components
JPanel questionAnswerPanel = new JPanel(new GridBagLayout());
questionAnswerPanel.setBorder(BorderFactory.createEtchedBorder());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.HORIZONTAL;
c.insets = new Insets(5, 5, 0, 5);
c.weightx = 0;
// Add question label.
JLabel questionLabel =
new JLabel(
OtrActivator.resourceService
.getI18NString(
"plugin.otr.authbuddydialog.QUESTION_RESPOND"));
questionAnswerPanel.add(questionLabel, c);
// Add the question.
c.insets = new Insets(0, 5, 5, 5);
c.gridy = 1;
JTextArea questionArea =
new CustomTextArea();
newFont =
new Font(
UIManager.getDefaults().getFont("TextArea.font").
getFontName()
, Font.BOLD
, UIManager.getDefaults().getFont("TextArea.font")
.getSize());
questionArea.setFont(newFont);
questionArea.setText(question);
questionAnswerPanel.add(questionArea, c);
// Add answer label.
c.insets = new Insets(5, 5, 5, 5);
c.gridy = 2;
JLabel answerLabel =
new JLabel(OtrActivator.resourceService
.getI18NString("plugin.otr.authbuddydialog.ANSWER"));
questionAnswerPanel.add(answerLabel, c);
// Add the answer text field.
c.gridy = 3;
final JTextField answerTextBox = new JTextField();
questionAnswerPanel.add(answerTextBox, c);
// Add the question/answer panel to the main panel.
mainPanel.add(questionAnswerPanel);
// Buttons panel.
JPanel buttonPanel = new TransparentPanel(new GridBagLayout());
buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
JButton helpButton =
new JButton(OtrActivator.resourceService
.getI18NString("plugin.otr.authbuddydialog.HELP"));
helpButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
OtrActivator.scOtrEngine.launchHelp();
}
});
c.gridwidth = 1;
c.gridy = 0;
c.gridx = 0;
c.weightx = 0;
c.insets = new Insets(5, 5, 5, 20);
buttonPanel.add(helpButton, c);
JButton cancelButton =
new JButton(OtrActivator.resourceService
.getI18NString("plugin.otr.authbuddydialog.CANCEL"));
cancelButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
OtrActivator.scOtrEngine.abortSmp(otrContact);
SmpAuthenticateBuddyDialog.this.dispose();
}
});
c.insets = new Insets(5, 5, 5, 5);
c.gridx = 1;
buttonPanel.add(cancelButton, c);
c.gridx = 2;
JButton authenticateButton =
new JButton(OtrActivator.resourceService
.getI18NString(
"plugin.otr.authbuddydialog.AUTHENTICATE_BUDDY"));
authenticateButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
OtrActivator.scOtrEngine.respondSmp(
otrContact, receiverTag, question, answerTextBox.getText());
SmpAuthenticateBuddyDialog.this.dispose();
}
});
buttonPanel.add(authenticateButton, c);
this.getContentPane().add(mainPanel, BorderLayout.NORTH);
this.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
this.pack();
}
}