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