package com.rafali.flickruploader; import java.awt.GridLayout; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class SecurePrompt extends javax.swing.JDialog { private static final String TMP_REMOTEAPI = "/tmp/remoteapi"; private static final long serialVersionUID = 4731149010265015213L; static String[] getLoginPass(String defaultLogin) { LoginPass savedPass = getSavedPass(); if (savedPass != null && savedPass.login.equals(defaultLogin)) { return new String[] { savedPass.login, savedPass.pass }; } JPanel panel = new JPanel(); panel.setLayout(new GridLayout(4, 1)); JLabel username = new JLabel("Username"); JLabel passwordLabel = new JLabel("Password"); JTextField textField = new JTextField(12); final JPasswordField passwordField = new JPasswordField(12); panel.add(username); panel.add(textField); panel.add(passwordLabel); panel.add(passwordField); textField.setText(defaultLogin); JOptionPane jop = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION); JDialog dialog = jop.createDialog("Password:"); dialog.setVisible(true); int result = (Integer) jop.getValue(); dialog.dispose(); String password = null; String login = null; if (result == JOptionPane.OK_OPTION && passwordField.getPassword().length > 0) { login = textField.getText(); password = new String(passwordField.getPassword()); savePass(new LoginPass(login, password)); } return new String[] { login, password }; } static class LoginPass implements Serializable { private static final long serialVersionUID = 1L; public LoginPass(String login, String pass) { this.login = login; this.pass = pass; } String login; String pass; } public static void savePass(LoginPass ish) { try { FileOutputStream fos = new FileOutputStream(TMP_REMOTEAPI); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(ish); oos.close(); } catch (Throwable e) { e.printStackTrace(); } } public static LoginPass getSavedPass() { try { File file = new File(TMP_REMOTEAPI); if (file.exists()) { FileInputStream fin = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fin); LoginPass iHandler = (LoginPass) ois.readObject(); ois.close(); return iHandler; } } catch (Throwable e) { e.printStackTrace(); } return null; } }