/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved. * Copyright (C) 2011-2012 Brian P. Hinz * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this software; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ package com.tigervnc.vncviewer; import java.awt.*; import java.awt.event.*; import javax.swing.*; import com.jcraft.jsch.*; import com.tigervnc.rfb.*; import static java.awt.GridBagConstraints.HORIZONTAL; import static java.awt.GridBagConstraints.LINE_START; import static java.awt.GridBagConstraints.NONE; import static java.awt.GridBagConstraints.REMAINDER; class PasswdDialog extends Dialog implements UserInfo, UIKeyboardInteractive { public PasswdDialog(String title, boolean userDisabled, boolean passwdDisabled) { super(true); setResizable(false); setTitle(title); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { endDialog(); } }); JPanel p1 = new JPanel(new GridBagLayout()); p1.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); userLabel = new JLabel("Username:"); userLabel.setEnabled(!userDisabled); p1.add(userLabel, new GridBagConstraints(0, 0, 1, 1, LIGHT, LIGHT, LINE_START, NONE, new Insets(0, 0, 0, 0), NONE, NONE)); userEntry = new JTextField(30); userEntry.setEnabled(!userDisabled); p1.add(userEntry, new GridBagConstraints(1, 0, 1, 1, HEAVY, LIGHT, LINE_START, REMAINDER, new Insets(0, 5, 0, 0), NONE, NONE)); passwdLabel = new JLabel("Password:"); passwdLabel.setEnabled(!passwdDisabled); p1.add(passwdLabel, new GridBagConstraints(0, 1, 1, 1, LIGHT, LIGHT, LINE_START, NONE, new Insets(5, 0, 0, 0), NONE, NONE)); passwdEntry = new JPasswordField(30); passwdEntry.setEnabled(!passwdDisabled); p1.add(passwdEntry, new GridBagConstraints(1, 1, 1, 1, HEAVY, LIGHT, LINE_START, REMAINDER, new Insets(5, 5, 0, 0), NONE, NONE)); this.add(p1); addListeners(this); pack(); if (userEntry.isEnabled()) { userEntry.requestFocus(); } else { passwdEntry.requestFocus(); } } /** Handle the key-pressed event. */ public void keyPressed(KeyEvent event) { Object s = event.getSource(); if (s instanceof JTextField && (JTextField)s == userEntry) { if (event.getKeyCode() == KeyEvent.VK_ENTER) { endDialog(); } } else if (s instanceof JPasswordField && (JPasswordField)s == passwdEntry) { if (event.getKeyCode() == KeyEvent.VK_ENTER) { endDialog(); } } } public String getPassword() { return new String(passwdEntry.getPassword()); } public String getPassphrase() { return null; } public boolean promptPassphrase(String message) { return false; } public boolean promptPassword(String message) { setTitle(message); showDialog(); if (userEntry.isEnabled()) if (userEntry.getText().equals("")) return false; else if (!passwdEntry.isEnabled()) return true; if (passwdEntry.isEnabled()) if (!passwdEntry.getText().equals("")) return true; return false; } public void showMessage(String message) { JOptionPane.showMessageDialog(null, message, "Message", JOptionPane.PLAIN_MESSAGE); } public boolean promptYesNo(String str) { Object[] options={ "YES", "NO" }; int ret=JOptionPane.showOptionDialog(null, str, "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); return (ret == 0); } public String[] promptKeyboardInteractive(String destination, String name, String instruction, String[] prompt, boolean[] echo) { Container panel = new JPanel(new GridBagLayout()); ((JPanel)panel).setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); panel.add(new JLabel(instruction), new GridBagConstraints(0, 0, REMAINDER, 1, LIGHT, LIGHT, LINE_START, NONE, new Insets(0, 0, 0, 0), NONE, NONE)); JTextField[] texts=new JTextField[prompt.length]; for (int i = 0; i < prompt.length; i++) { panel.add(new JLabel(prompt[i]), new GridBagConstraints(0, i+1, 1, 1, LIGHT, LIGHT, LINE_START, NONE, new Insets(5, 0, 0, 0), NONE, NONE)); if(echo[i]) texts[i]=new JTextField(20); else texts[i]=new JPasswordField(20); panel.add(texts[i], new GridBagConstraints(1, i+1, 1, 1, HEAVY, LIGHT, LINE_START, HORIZONTAL, new Insets(5, 5, 0, 0), NONE, NONE)); } if (JOptionPane.showConfirmDialog(null, panel, destination+": "+name, JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.OK_OPTION) { String[] response=new String[prompt.length]; for(int i=0; i