/*
* Created on 25/01/2005
* Created by Paul Duran
* Copyright (C) 2004 Aelitis, All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* AELITIS, SARL au capital de 30,000 euros
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*
*/
package org.gudy.azureus2.ui.console;
import org.gudy.azureus2.ui.console.util.StringEncrypter;
import org.gudy.azureus2.ui.console.util.StringEncrypter.EncryptionException;
import com.aelitis.azureus.core.AzureusCoreException;
/**
* the user profile contains the information about a user that is allowed to use the console ui.
* Users may be assigned one of three profiles:<br>
* <ul>
* <li><b>ADMIN</b> have full access to all commands and to torrents of all users
* <li><b>USER</b> have limited access to commands - can only add/modify their own torrents
* <li><b>GUEST</b> have no access - can only view the torrent download status
* </ul>
* @author pauld
*/
public class UserProfile
{
private String username;
private String userType;
private String encryptedPassword;
private String defaultSaveDirectory;
public static final String ADMIN = "admin";
public static final String USER = "user";
public static final String GUEST = "guest";
public static final String DEFAULT_USER_TYPE = ADMIN;
public static final UserProfile DEFAULT_USER_PROFILE = new UserProfile("admin", ADMIN);
/**
* returns true if the specified value is a valid user type
* @param userType
* @return
*/
public static boolean isValidUserType( String userType )
{
return ADMIN.equals(userType) || USER.equals(userType) || GUEST.equals(userType);
}
/**
*
*/
public UserProfile() {
super();
this.userType = DEFAULT_USER_TYPE;
}
public UserProfile(String name, String userType)
{
this.username = name;
setUserType(userType);
}
/**
* returns true if the specified password is the password for this
* user profile
* @param password
* @return
*/
public boolean authenticate(String password) {
StringEncrypter encrypter;
try {
encrypter = new StringEncrypter(StringEncrypter.DES_ENCRYPTION_SCHEME);
return encrypter.decrypt(encryptedPassword).equals(password);
} catch (EncryptionException e) {
throw new AzureusCoreException("Unable to decrypt password", e);
}
}
/**
* stores the specified password as an encrypted password
* @param password The password to set.
*/
public void setPassword(String password)
{
try {
StringEncrypter encrypter = new StringEncrypter(StringEncrypter.DES_ENCRYPTION_SCHEME);
setEncryptedPassword(encrypter.encrypt(password));
} catch (EncryptionException e)
{
throw new AzureusCoreException("Unable to encrypt password", e);
}
}
/**
* @return Returns the username.
*/
public String getUsername() {
return username;
}
/**
* @param username The username to set.
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return Returns the userType.
*/
public String getUserType() {
return userType;
}
/**
* @param userType The userType to set.
*/
public void setUserType(String userType) {
if(userType.equalsIgnoreCase(ADMIN))
userType = ADMIN;
else if(userType.equalsIgnoreCase(USER))
userType = USER;
else if(userType.equalsIgnoreCase(GUEST))
userType = GUEST;
else
userType = DEFAULT_USER_TYPE;
this.userType = userType;
}
/**
* check for equality with another user profile object
*/
public boolean equals(Object obj) {
if( obj == null || ! (obj instanceof UserProfile) )
return false;
UserProfile other = (UserProfile)obj;
if( getUsername() != null )
return getUsername().equals(other.getUsername());
else
if( other.getUsername() != null )
return false;
if( getEncryptedPassword() != null )
return getEncryptedPassword().equals(other.getEncryptedPassword());
else
if( other.getEncryptedPassword() != null )
return false;
return true;
}
/**
* @return Returns the encryptedPassword.
*/
public String getEncryptedPassword() {
return encryptedPassword;
}
/**
* @param encryptedPassword The encryptedPassword to set.
*/
public void setEncryptedPassword(String encryptedPassword) {
this.encryptedPassword = encryptedPassword;
}
/**
* @return the directory that torrents should be saved to for this user, by default
*/
public String getDefaultSaveDirectory() {
return defaultSaveDirectory;
}
public void setDefaultSaveDirectory(String newValue) {
this.defaultSaveDirectory = newValue;
}
}