// possibly supply credentials that were stored in the keyring
if (state == State.Keyring) {
char[] password = getPasswordFromKeyring(lastUsername);
if (password != null)
return new PasswordAuthentication(lastUsername, password);
else
state = State.UserEntry1;
}
// create user interface components to prompt for username and password
JTextField username = new JTextField(2);
JPasswordField password = new JPasswordField(2);
JComponent focus = username;
if (StringUtils.hasValue(lastUsername)) {
username.setText(lastUsername);
focus = password;
}
JLabel usernameLabel = new JLabel(resources.getString("Username"),
SwingConstants.RIGHT);
JLabel passwordLabel = new JLabel(resources.getString("Password"),
SwingConstants.RIGHT);
Dimension d = usernameLabel.getPreferredSize();
d.width = Math.max(d.width, passwordLabel.getPreferredSize().width);
usernameLabel.setPreferredSize(d);
passwordLabel.setPreferredSize(d);
// if "remember me" support is enabled, create a checkbox
JCheckBox rememberMe = null;
if (rememberMeDays > 0) {
rememberMe = new JCheckBox(
resources.getString("Remember_Me.Prompt"));
rememberMe.setToolTipText(resources.format(
"Remember_Me.Tooltip_FMT", rememberMeDays));
Font f = rememberMe.getFont();
f = f.deriveFont(f.getSize2D() * 0.8f);
rememberMe.setFont(f);
}
// prompt the user for credentials
final String title = (StringUtils.hasValue(this.title) ? this.title
: resources.getString("Title"));
final Object[] message = new Object[] {
resources.formatStrings("Prompt_FMT", getRequestingPrompt()),
BoxUtils.vbox(5),
BoxUtils.hbox(15, usernameLabel, 5, username),
BoxUtils.hbox(15, passwordLabel, 5, password),
BoxUtils.hbox(BoxUtils.GLUE, rememberMe),
new JOptionPaneTweaker.GrabFocus(focus) };
final int[] userChoice = new int[1];
try {
Runnable r = new Runnable() {
public void run() {
userChoice[0] = JOptionPane.showConfirmDialog(
parentComponent, message, title,
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE);
}
};
if (SwingUtilities.isEventDispatchThread())
r.run();
else
SwingUtilities.invokeAndWait(r);
} catch (Exception e) {
}
// record metadata about this password request
lastUrl = getEffectiveURL();
lastTimestamp = System.currentTimeMillis();
lastUsername = username.getText().trim();
prefs.put(prefsKey(LAST_USERNAME), lastUsername);
if (userChoice[0] == JOptionPane.OK_OPTION) {
// if the user entered credentials, return them.
if (rememberMe != null && rememberMe.isSelected())
savePasswordToKeyring(lastUsername, password.getPassword());
return new PasswordAuthentication(lastUsername,
password.getPassword());
} else {
// if the user cancelled the operation, abort.
state = State.Cancelled;
return null;