]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/jsch/swing/SwingUserInfo.java
bffa8a042f7c33be44097510a53846561a6e96ba
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / jsch / swing / SwingUserInfo.java
1 package org.argeo.slc.jsch.swing;
2
3 import java.awt.Container;
4 import java.awt.GridLayout;
5 import java.awt.Panel;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
8 import java.util.Arrays;
9
10 import javax.swing.JButton;
11 import javax.swing.JDialog;
12 import javax.swing.JFrame;
13 import javax.swing.JLabel;
14 import javax.swing.JPanel;
15 import javax.swing.JPasswordField;
16
17 import org.argeo.slc.jsch.SimpleUserInfo;
18
19 public class SwingUserInfo extends SimpleUserInfo {
20
21 private Boolean alwaysPrompt = false;
22
23 public boolean promptPassphrase(String message) {
24 if (passphrase != null)
25 return true;
26
27 if (!alwaysPrompt && passphraseSafe != null)
28 return true;
29
30 PasswordDialog dialog = new PasswordDialog(message) {
31 private static final long serialVersionUID = 3266299327166418364L;
32
33 @Override
34 protected void useCredentials(char[] password) {
35 passphraseSafe = new char[password.length];
36 System.arraycopy(password, 0, passphraseSafe, 0,
37 password.length);
38 // passphraseSafe = Arrays.copyOf(password, password.length);
39 }
40 };
41 dialog.setVisible(true);
42 return dialog.getWasProvided();
43 }
44
45 public boolean promptPassword(String message) {
46 if (password != null)
47 return true;
48
49 if (!alwaysPrompt && passwordSafe != null)
50 return true;
51
52 PasswordDialog dialog = new PasswordDialog(message) {
53 private static final long serialVersionUID = 3266299327166418364L;
54
55 @Override
56 protected void useCredentials(char[] password) {
57 // passwordSafe = Arrays.copyOf(password, password.length);
58 passwordSafe = new char[password.length];
59 System.arraycopy(password, 0, passwordSafe, 0, password.length);
60 }
61 };
62 dialog.setVisible(true);
63 return dialog.getWasProvided();
64 }
65
66 public void setAlwaysPrompt(Boolean alwaysPrompt) {
67 this.alwaysPrompt = alwaysPrompt;
68 }
69
70 protected static class PasswordDialog extends JDialog implements
71 ActionListener {
72 private static final long serialVersionUID = 3399155607980846207L;
73
74 private static final String OK = "ok";
75
76 private JPasswordField password = new JPasswordField("", 10);
77
78 private JButton okButton;
79 private JButton cancelButton;
80
81 private Boolean wasProvided = false;
82
83 public PasswordDialog(String title) {
84 setTitle(title);
85 setModal(true);
86 setLocationRelativeTo(null);
87 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
88
89 JPanel p1 = new JPanel(new GridLayout(1, 2, 3, 3));
90 p1.add(new JLabel("Password"));
91 password.setActionCommand(OK);
92 password.addActionListener(this);
93 p1.add(password);
94 add("Center", p1);
95
96 Panel p2 = new Panel();
97 okButton = addButton(p2, "OK");
98 okButton.setActionCommand(OK);
99 cancelButton = addButton(p2, "Cancel");
100 add("South", p2);
101 setSize(240, 120);
102
103 pack();
104 }
105
106 /** To be overridden */
107 protected void useCredentials(char[] password) {
108 // does nothing
109 }
110
111 private JButton addButton(Container c, String name) {
112 JButton button = new JButton(name);
113 button.addActionListener(this);
114 c.add(button);
115 return button;
116 }
117
118 public final void actionPerformed(ActionEvent evt) {
119 Object source = evt.getSource();
120 if (source == okButton || evt.getActionCommand().equals(OK)) {
121 char[] p = password.getPassword();
122 useCredentials(p);
123 wasProvided = true;
124 Arrays.fill(p, '0');
125 cleanUp();
126 } else if (source == cancelButton)
127 cleanUp();
128 }
129
130 private void cleanUp() {
131 password.setText("");
132 dispose();
133 }
134
135 public Boolean getWasProvided() {
136 return wasProvided;
137 }
138
139 }
140
141 }