/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * * ident "%Z%%M% %I% %E% SMI" * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * * pmLogin.java * Login dialog */ package com.sun.admin.pm.client; import java.awt.*; import java.awt.event.*; import javax.swing.JPanel; import javax.swing.*; import com.sun.admin.pm.server.*; /* * a panel dialog which captures a username and password. */ public class pmLogin extends pmDialog { private pmTop theTop = null; private String theTag = null; private JFrame theFrame = null; protected pmButton okButton = null; protected pmButton cancelButton = null; protected pmButton helpButton = null; public pmLogin(JFrame f, String title, String msg) { this(f, title, msg, null, null); } public pmLogin(JFrame f, String title, String msg, pmTop t, String h) { super(f, title, true); // modal theTop = t; theTag = h; theFrame = f; JLabel l; JPanel p; // initialize constraints GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = GridBagConstraints.RELATIVE; c.gridwidth = 1; c.gridheight = 1; c.insets = new Insets(10, 10, 10, 10); c.anchor = GridBagConstraints.EAST; // top panel contains the desired message p = new JPanel(); p.setLayout(new GridBagLayout()); l = new JLabel(msg, SwingConstants.CENTER); p.add(l, c); this.getContentPane().add(p, "North"); // NIS middle panel // contains username and password if (t.ns.getNameService().equals("nis")) { p = new JPanel(); p.setLayout(new GridBagLayout()); l = new JLabel(pmUtility.getResource("Hostname:"), SwingConstants.RIGHT); p.add(l, c); l = new JLabel(pmUtility.getResource("Username:"), SwingConstants.RIGHT); p.add(l, c); l = new JLabel(pmUtility.getResource("Password:"), SwingConstants.RIGHT); p.add(l, c); passwordField = new JPasswordField(12); passwordField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { okPressed(); } }); l.setLabelFor(passwordField); // for consistency, don't implement this until all are... // l.setDisplayedMnemonic( // pmUtility.getIntResource("Password.mnemonic")); c.gridx = 1; c.weightx = 1.0; String nisMaster; try { nisMaster = theTop.host.getNisMaster(); } catch (Exception e) { nisMaster = new String("Unknown"); Debug.warning("pmLogin: getNisMaster() returns exception: " + e); } c.anchor = GridBagConstraints.WEST; l = new JLabel(nisMaster, SwingConstants.LEFT); p.add(l, c); l = new JLabel(("root"), SwingConstants.LEFT); p.add(l, c); c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.CENTER; c.gridy = GridBagConstraints.RELATIVE; p.add(passwordField, c); passwordField.setEchoChar('*'); this.getContentPane().add(p, "Center"); } else if (t.ns.getNameService().equals("ldap")) { // middle panel contains LDAP server name, distinguished name, // and password p = new JPanel(); p.setLayout(new GridBagLayout()); // LDAP Server Name l = new JLabel(pmUtility.getResource("LDAP.Server:"), SwingConstants.RIGHT); p.add(l, c); serverField = new pmTextField(25); serverField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { okPressed(); } }); String ldapMaster; try { ldapMaster = theTop.host.getLDAPMaster(); } catch (Exception e) { ldapMaster = new String(""); Debug.warning( "pmLdap: getLDAPMaster() returns exception: " + e); } serverField.setText(ldapMaster); c.gridx = 1; p.add(serverField, c); // Distinguished Name c.gridx = 0; l = new JLabel(pmUtility.getResource("Distinguished.Name:"), SwingConstants.RIGHT); p.add(l, c); dnField = new pmTextField(25); dnField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { okPressed(); } }); String defaultDN; try { defaultDN = theTop.host.getDefaultAdminDN(); } catch (Exception e) { defaultDN = new String(""); Debug.warning( "pmLdap: getDefaultAdminDN() returns exception: " + e); } dnField.setText(defaultDN); c.gridx = 1; p.add(dnField, c); // Password c.gridx = 0; l = new JLabel(pmUtility.getResource("Password:"), SwingConstants.RIGHT); p.add(l, c); passwordField = new JPasswordField(12); passwordField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { okPressed(); } }); l.setLabelFor(passwordField); // for consistency, don't implement this until all are... // l.setDisplayedMnemonic( // pmUtility.getIntResource("Password.mnemonic")); c.gridx = 1; c.weightx = 1.0; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.CENTER; c.gridy = GridBagConstraints.RELATIVE; p.add(passwordField, c); passwordField.setEchoChar('*'); this.getContentPane().add(p, "Center"); } // bottom panel contains buttons c.gridx = 0; c.weightx = 1.0; c.weighty = 0.0; c.gridwidth = GridBagConstraints.REMAINDER; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.CENTER; JPanel thePanel = new JPanel(); okButton = new pmButton( pmUtility.getResource("OK")); okButton.setMnemonic( pmUtility.getIntResource("OK.mnemonic")); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { okPressed(); } }); thePanel.add(okButton, c); cancelButton = new pmButton( pmUtility.getResource("Cancel")); cancelButton.setMnemonic( pmUtility.getIntResource("Cancel.mnemonic")); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { cancelPressed(); } }); thePanel.add(cancelButton, c); if (theTag != null && theTop != null) { helpButton = new pmButton( pmUtility.getResource("Help")); helpButton.setMnemonic( pmUtility.getIntResource("Help.mnemonic")); p.add(helpButton); helpButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { helpPressed(); } }); thePanel.add(helpButton, c); } this.getContentPane().add(thePanel, "South"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { returnValue = JOptionPane.CLOSED_OPTION; pmLogin.this.setVisible(false); } }); // handle Esc as cancel in any case this.getRootPane().registerKeyboardAction(new ActionListener() { public void actionPerformed(ActionEvent e) { Debug.message("CLNT: default cancel action"); cancelPressed(); }}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false), JComponent.WHEN_IN_FOCUSED_WINDOW); // lay out the dialog this.pack(); // set focus and defaults after packing... // this.getRootPane().setDefaultButton(okButton); okButton.setAsDefaultButton(); passwordField.requestFocus(); } public int getValue() { return returnValue; } public void getLDAPServer() throws pmIncompleteFormException { // LDAP Server name is required String LDAPserver = null; LDAPserver = serverField.getText(); if (LDAPserver.equals("")) { serverField.requestFocus(); throw new pmIncompleteFormException( pmUtility.getResource("LDAP.server.name.required.")); } } public void getLDAPDN() throws pmIncompleteFormException { // LDAP Distinguished name is required String LDAPdn = null; LDAPdn = dnField.getText(); if (LDAPdn.equals("")) { dnField.requestFocus(); throw new pmIncompleteFormException( pmUtility.getResource("LDAP.Distinguished.name.required.")); } } public void getLDAPPassword() throws pmIncompleteFormException { // LDAP password is required String tmpp = new String(passwordField.getPassword()); String LDAPpass = new String(tmpp.trim()); if (LDAPpass.equals("")) { passwordField.requestFocus(); throw new pmIncompleteFormException( pmUtility.getResource("LDAP.Password.required.")); } } public void okPressed() { // For LDAP, Check Server, Distinguished Name and Password boolean complete = true; if (theTop.ns.getNameService().equals("ldap")) { complete = false; try { getLDAPServer(); getLDAPDN(); getLDAPPassword(); complete = true; } catch (pmIncompleteFormException fe) { pmMessageDialog m = new pmMessageDialog( theFrame, pmUtility.getResource("Error"), fe.getMessage()); // "FormError" m.setVisible(true); } } if (complete) { returnValue = JOptionPane.OK_OPTION; pmLogin.this.setVisible(false); } } public void cancelPressed() { returnValue = JOptionPane.CANCEL_OPTION; pmLogin.this.setVisible(false); } public void clearPressed() { passwordField.setText(""); } public void helpPressed() { theTop.showHelpItem(theTag); } public static void main(String[] args) { JFrame f = new JFrame("Password test"); f.setSize(300, 100); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); f.setVisible(true); while (true) { pmLogin d = new pmLogin(f, "Test Login", "NIS/LDAP Authentication."); d.setVisible(true); } // System.exit(0); } public JPasswordField passwordField = null; public pmTextField serverField = null; public pmTextField dnField = null; protected int returnValue = JOptionPane.CLOSED_OPTION; }