001 /* 002 * Cumulus4j - Securing your data in the cloud - http://cumulus4j.org 003 * Copyright (C) 2011 NightLabs Consulting GmbH 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 package org.cumulus4j.keymanager.front.webapp; 019 020 import java.io.Serializable; 021 import java.util.Arrays; 022 023 /** 024 * Authentication information (username + password). Can be obtained in every 025 * REST service by sub-classing {@link AbstractService} and using 026 * {@link AbstractService#getAuth()} or {@link AbstractService#authenticate(String)}. 027 * 028 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de 029 */ 030 public class Auth 031 implements Serializable 032 { 033 private static final long serialVersionUID = 1L; 034 035 private String userName; 036 037 private char[] password; 038 039 /** 040 * Create an empty instance. 041 */ 042 public Auth() { } 043 044 /** 045 * Create an instance with the given values. 046 * @param userName the user-name (might be <code>null</code>). 047 * @param password the password (might be <code>null</code>). 048 */ 049 public Auth(String userName, char[] password) 050 { 051 this.userName = userName; 052 this.password = password; 053 } 054 055 /** 056 * Get the user-name. 057 * @return the user-name or <code>null</code>. 058 */ 059 public String getUserName() { 060 return userName; 061 } 062 063 /** 064 * Set the user-name. 065 * @param userName the user-name or <code>null</code>. 066 */ 067 public void setUserName(String userName) { 068 this.userName = userName; 069 } 070 071 /** 072 * <p> 073 * Get the password. 074 * </p> 075 * <p> 076 * <b>Warning: the char-array returned by this method might be modified later</b> (overwritten with 0), e.g. if 077 * {@link #clear()} is called! If you want to use this char-array elsewhere, you must clone it immediately! 078 * </p> 079 080 * @return the password or <code>null</code>. 081 */ 082 public char[] getPassword() { 083 return password; 084 } 085 086 /** 087 * <p> 088 * Set the password. 089 * </p> 090 * <p> 091 * <b>Warning: the char-array passed to this method is modified</b> (overwritten with 0), if 092 * {@link #clear()} is called! If you want to use this char-array elsewhere, you must pass 093 * a clone here! 094 * </p> 095 * @param password the password or <code>null</code>. 096 */ 097 public void setPassword(char[] password) 098 { 099 this.password = password; 100 } 101 102 /** 103 * Clear the sensitive data from this <code>Auth</code> instance. If the <code>password</code> 104 * is not <code>null</code>, it is overwritten with 0. This method is called by the 105 * {@link #finalize()} method of this class! 106 */ 107 public void clear() 108 { 109 if (password != null) 110 Arrays.fill(password, (char)0); 111 112 password = null; 113 } 114 115 @Override 116 protected void finalize() throws Throwable { 117 clear(); 118 } 119 }