Source code: org/apache/batik/apps/svgbrowser/JAuthenticator.java
1 /*
2
3 Copyright 2002-2003 The Apache Software Foundation
4
5 Licensed under the Apache License, Version 2.0 (the "License");
6 you may not use this file except in compliance with the License.
7 You may obtain a copy of the License at
8
9 http://www.apache.org/licenses/LICENSE-2.0
10
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16
17 */
18 package org.apache.batik.apps.svgbrowser;
19
20 import java.awt.BorderLayout;
21 import java.awt.Container;
22 import java.awt.EventQueue;
23 import java.awt.Frame;
24 import java.awt.GridBagConstraints;
25 import java.awt.GridBagLayout;
26 import java.awt.event.ActionEvent;
27 import java.awt.event.ActionListener;
28 import java.awt.event.WindowAdapter;
29 import java.awt.event.WindowEvent;
30 import java.net.Authenticator;
31 import java.net.PasswordAuthentication;
32
33 import javax.swing.JButton;
34 import javax.swing.JComponent;
35 import javax.swing.JDialog;
36 import javax.swing.JLabel;
37 import javax.swing.JPanel;
38 import javax.swing.JPasswordField;
39 import javax.swing.JTextField;
40 import javax.swing.SwingConstants;
41
42 /**
43 * This class is resposible for providing authentication information
44 * when needed by network protocols. It does this by poping up a small
45 * window that asks for User ID and password for the system.
46 */
47 public class JAuthenticator extends Authenticator {
48
49 /**
50 * Internationalization message string
51 */
52 public static final String TITLE
53 = "JAuthenticator.title";
54 public static final String LABEL_SITE
55 = "JAuthenticator.label.site";
56 public static final String LABEL_REQ
57 = "JAuthenticator.label.req";
58 public static final String LABEL_USERID
59 = "JAuthenticator.label.userID";
60 public static final String LABEL_PASSWORD
61 = "JAuthenticator.label.password";
62
63 public static final String LABEL_CANCEL
64 = "JAuthenticator.label.cancel";
65 public static final String LABEL_OK
66 = "JAuthenticator.label.ok";
67
68 protected JDialog window;
69 protected JButton cancelButton;
70 protected JButton okButton;
71
72 protected JLabel label1;
73 protected JLabel label2;
74 protected JTextField JUserID;
75 protected JPasswordField JPassword;
76
77 Object lock = new Object();
78
79 private boolean result;
80 private boolean wasNotified;
81 private String userID;
82 private char [] password;
83
84 public JAuthenticator() {
85 initWindow();
86 }
87
88 protected void initWindow() {
89 String title = Resources.getString(TITLE);
90 window = new JDialog((Frame)null, title, true);
91
92 Container mainPanel = window.getContentPane();
93 mainPanel.setLayout(new BorderLayout());
94 mainPanel.add(buildAuthPanel(), BorderLayout.CENTER);
95 mainPanel.add(buildButtonPanel(), BorderLayout.SOUTH);
96 window.pack();
97
98 window.addWindowListener( new WindowAdapter() {
99 public void windowClosing(WindowEvent e) {
100 cancelListener.actionPerformed
101 (new ActionEvent(e.getWindow(),
102 ActionEvent.ACTION_PERFORMED,
103 "Close"));
104 }
105 });
106 }
107
108 protected JComponent buildAuthPanel() {
109 GridBagLayout gridBag = new GridBagLayout();
110 GridBagConstraints c = new GridBagConstraints();
111 JPanel proxyPanel = new JPanel(gridBag);
112 c.fill = GridBagConstraints.BOTH;
113 c.weightx = 1.0;
114
115 c.gridwidth = 1;
116 JLabel labelS = new JLabel(Resources.getString(LABEL_SITE));
117 labelS.setHorizontalAlignment(SwingConstants.LEFT);
118 gridBag.setConstraints(labelS, c);
119 proxyPanel.add(labelS);
120
121 c.gridwidth = GridBagConstraints.REMAINDER;
122 label1 = new JLabel("");
123 label1.setHorizontalAlignment(SwingConstants.LEFT);
124 gridBag.setConstraints(label1, c);
125 proxyPanel.add(label1);
126
127 c.gridwidth = 1;
128 JLabel labelR = new JLabel(Resources.getString(LABEL_REQ));
129 labelR.setHorizontalAlignment(SwingConstants.LEFT);
130 gridBag.setConstraints(labelR, c);
131 proxyPanel.add(labelR);
132
133 c.gridwidth = GridBagConstraints.REMAINDER;
134 label2 = new JLabel("");
135 label2.setHorizontalAlignment(SwingConstants.LEFT);
136 gridBag.setConstraints(label2, c);
137 proxyPanel.add(label2);
138
139 c.gridwidth = 1;
140 JLabel labelUserID = new JLabel(Resources.getString(LABEL_USERID));
141 labelUserID.setHorizontalAlignment(SwingConstants.LEFT);
142 gridBag.setConstraints(labelUserID, c);
143 proxyPanel.add(labelUserID);
144
145 c.gridwidth = GridBagConstraints.REMAINDER;
146 JUserID = new JTextField(20);
147 gridBag.setConstraints(JUserID, c);
148 proxyPanel.add(JUserID);
149
150 c.gridwidth = 1;
151 JLabel labelPassword = new JLabel(Resources.getString(LABEL_PASSWORD));
152 labelPassword.setHorizontalAlignment(SwingConstants.LEFT);
153 gridBag.setConstraints(labelPassword, c);
154 proxyPanel.add(labelPassword);
155
156 c.gridwidth = GridBagConstraints.REMAINDER;
157 JPassword = new JPasswordField(20);
158 JPassword.setEchoChar('*');
159 JPassword.addActionListener(okListener);
160 gridBag.setConstraints(JPassword, c);
161 proxyPanel.add(JPassword);
162
163 return proxyPanel;
164 }
165
166
167
168 protected JComponent buildButtonPanel() {
169 JPanel buttonPanel = new JPanel();
170 cancelButton = new JButton(Resources.getString(LABEL_CANCEL));
171 cancelButton.addActionListener(cancelListener);
172 buttonPanel.add(cancelButton);
173
174 okButton = new JButton(Resources.getString(LABEL_OK));
175 okButton.addActionListener( okListener);
176 buttonPanel.add(okButton);
177
178 return buttonPanel;
179 }
180
181 /**
182 * This is called by the protocol stack when authentication is
183 * required. We then show the dialog in the Swing event thread,
184 * and block waiting for the user to select either cancel or ok,
185 * at which point we get notified.
186 */
187 public PasswordAuthentication getPasswordAuthentication() {
188 synchronized (lock) {
189 EventQueue.invokeLater(new Runnable() {
190 public void run() {
191 label1.setText(getRequestingSite().getHostName());
192 label2.setText(getRequestingPrompt());
193 window.setVisible(true);
194 }
195 });
196 wasNotified = false;
197 while (!wasNotified) {
198 try {
199 lock.wait();
200 } catch(InterruptedException ie) { }
201 }
202 if (!result)
203 return null;
204
205 return new PasswordAuthentication(userID, password);
206 }
207 }
208
209 ActionListener okListener = new ActionListener() {
210 public void actionPerformed(ActionEvent e) {
211 synchronized (lock) {
212 window.setVisible(false);
213
214 userID = JUserID.getText();
215 password = JPassword.getPassword();
216 JPassword.setText("");
217 result = true;
218 wasNotified = true;
219 lock.notifyAll();
220 }
221 }
222 };
223
224 ActionListener cancelListener = new ActionListener() {
225 public void actionPerformed(ActionEvent e) {
226 synchronized (lock) {
227 window.setVisible(false);
228
229 userID = null;
230 JUserID.setText("");
231 password = null;
232 JPassword.setText("");
233 result = false;
234 wasNotified = true;
235 lock.notifyAll();
236 }
237 }
238 };
239 }