Home | History | Annotate | Download | only in callback
      1 /*
      2  * Copyright (c) 1999, 2013, Oracle and/or its affiliates. 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.  Oracle designates this
      8  * particular file as subject to the "Classpath" exception as provided
      9  * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
     22  * or visit www.oracle.com if you need additional information or have any
     23  * questions.
     24  */
     25 
     26 package javax.security.auth.callback;
     27 
     28 /**
     29  * <p> Underlying security services instantiate and pass a
     30  * {@code PasswordCallback} to the {@code handle}
     31  * method of a {@code CallbackHandler} 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} 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} is null or
     68      *                  if {@code prompt} 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 }
    143