1 /*
2 * Copyright 1999-2003 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26 package javax.security.auth.callback;
27
28 /**
29 * <p> Underlying security services instantiate and pass a
30 * <code>PasswordCallback</code> to the <code>handle</code>
31 * method of a <code>CallbackHandler</code> to retrieve password information.
32 *
33 * @see javax.security.auth.callback.CallbackHandler
34 */
35 public class PasswordCallback implements Callback, java.io.Serializable {
36
37 private static final long serialVersionUID = 2267422647454909926L;
38
39 /**
40 * @serial
41 * @since 1.4
42 */
43 private String prompt;
44 /**
45 * @serial
46 * @since 1.4
47 */
48 private boolean echoOn;
49 /**
50 * @serial
51 * @since 1.4
52 */
53 private char[] inputPassword;
54
55 /**
56 * Construct a <code>PasswordCallback</code> with a prompt
57 * and a boolean specifying whether the password should be displayed
58 * as it is being typed.
59 *
60 * <p>
61 *
62 * @param prompt the prompt used to request the password. <p>
63 *
64 * @param echoOn true if the password should be displayed
65 * as it is being typed.
66 *
67 * @exception IllegalArgumentException if <code>prompt</code> is null or
68 * if <code>prompt</code> has a length of 0.
69 */
70 public PasswordCallback(String prompt, boolean echoOn) {
71 if (prompt == null || prompt.length() == 0)
72 throw new IllegalArgumentException();
73
74 this.prompt = prompt;
75 this.echoOn = echoOn;
76 }
77
78 /**
79 * Get the prompt.
80 *
81 * <p>
82 *
83 * @return the prompt.
84 */
85 public String getPrompt() {
86 return prompt;
87 }
88
89 /**
90 * Return whether the password
91 * should be displayed as it is being typed.
92 *
93 * <p>
94 *
95 * @return the whether the password
96 * should be displayed as it is being typed.
97 */
98 public boolean isEchoOn() {
99 return echoOn;
100 }
101
102 /**
103 * Set the retrieved password.
104 *
105 * <p> This method makes a copy of the input <i>password</i>
106 * before storing it.
107 *
108 * <p>
109 *
110 * @param password the retrieved password, which may be null.
111 *
112 * @see #getPassword
113 */
114 public void setPassword(char[] password) {
115 this.inputPassword = (password == null ? null : password.clone());
116 }
117
118 /**
119 * Get the retrieved password.
120 *
121 * <p> This method returns a copy of the retrieved password.
122 *
123 * <p>
124 *
125 * @return the retrieved password, which may be null.
126 *
127 * @see #setPassword
128 */
129 public char[] getPassword() {
130 return (inputPassword == null ? null : inputPassword.clone());
131 }
132
133 /**
134 * Clear the retrieved password.
135 */
136 public void clearPassword() {
137 if (inputPassword != null) {
138 for (int i = 0; i < inputPassword.length; i++)
139 inputPassword[i] = ' ';
140 }
141 }
142 }