001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018:
019: package org.apache.lenya.ac.impl;
020:
021: import org.apache.avalon.framework.logger.Logger;
022: import org.apache.lenya.ac.AccessControlException;
023: import org.apache.lenya.ac.ItemManager;
024: import org.apache.lenya.ac.Password;
025: import org.apache.lenya.ac.User;
026:
027: /**
028: * Abstract user implementation.
029: * @version $Id: AbstractUser.java 580116 2007-09-27 18:02:21Z rfrovarp $
030: */
031: public abstract class AbstractUser extends AbstractGroupable implements
032: User {
033:
034: private String email;
035: private String encryptedPassword;
036: private String defaultMenuLocale;
037: private String defaultDocumentLocale;
038:
039: /**
040: * Creates a new User.
041: * @param itemManager The item manager.
042: * @param logger The logger.
043: */
044: public AbstractUser(ItemManager itemManager, Logger logger) {
045: super (itemManager, logger);
046: }
047:
048: /**
049: * Create a User instance
050: * @param itemManager The item manager.
051: * @param logger The logger.
052: * @param id the user id
053: * @param fullName the full name of the user
054: * @param _email the users email address
055: * @param password the users password
056: */
057: public AbstractUser(ItemManager itemManager, Logger logger,
058: String id, String fullName, String _email, String password) {
059: this (itemManager, logger);
060: setId(id);
061: setName(fullName);
062: this .email = _email;
063: setPassword(password);
064: }
065:
066: /**
067: * Get the email address
068: * @return a <code>String</code>
069: */
070: public String getEmail() {
071: return this .email;
072: }
073:
074: /**
075: * Set the email address
076: * @param _email the new email address
077: */
078: public void setEmail(String _email) {
079: this .email = _email;
080: }
081:
082: /**
083: * Sets the password.
084: * @param plainTextPassword The plain text passwrod.
085: */
086: public void setPassword(String plainTextPassword) {
087: this .encryptedPassword = Password.encrypt(plainTextPassword);
088: }
089:
090: /**
091: * This method can be used for subclasses to set the password without it
092: * being encrypted again. Some subclass might have knowledge of the
093: * encrypted password and needs to be able to set it.
094: * @param _encryptedPassword the encrypted password
095: */
096: protected void setEncryptedPassword(String _encryptedPassword) {
097: this .encryptedPassword = _encryptedPassword;
098: }
099:
100: /**
101: * Get the encrypted password
102: * @return the encrypted password
103: */
104: protected String getEncryptedPassword() {
105: return this .encryptedPassword;
106: }
107:
108: /**
109: * Checks support for changing password
110: * @return true if password change is supported
111: */
112: public boolean canChangePassword() {
113: return true;
114: }
115:
116: /**
117: * @return Returns the defaultDocumentLocale.
118: */
119: public String getDefaultDocumentLocale() {
120: return defaultDocumentLocale;
121: }
122:
123: /**
124: * @param defaultDocumentLocale The defaultDocumentLocale to set.
125: */
126: public void setDefaultDocumentLocale(String defaultDocumentLocale) {
127: this .defaultDocumentLocale = defaultDocumentLocale;
128: }
129:
130: /**
131: * @return Returns the defaultMenuLocale.
132: */
133: public String getDefaultMenuLocale() {
134: return defaultMenuLocale;
135: }
136:
137: /**
138: * @param defaultMenuLocale The defaultMenuLocale to set.
139: */
140: public void setDefaultMenuLocale(String defaultMenuLocale) {
141: this .defaultMenuLocale = defaultMenuLocale;
142: }
143:
144: /**
145: * Save the user
146: * @throws AccessControlException if the save failed
147: */
148: public abstract void save() throws AccessControlException;
149:
150: /**
151: * Delete a user
152: * @throws AccessControlException if the delete failed
153: */
154: public void delete() throws AccessControlException {
155: removeFromAllGroups();
156: }
157:
158: /**
159: * Authenticate a user. This is done by encrypting the given password and
160: * comparing this to the encryptedPassword.
161: * @param password to authenticate with
162: * @return true if the given password matches the password for this user
163: */
164: public boolean authenticate(String password) {
165: getLogger().debug("LDAP Password: " + password);
166: getLogger().debug(
167: "LDAP pw encypted: " + Password.encrypt(password));
168: getLogger().debug(
169: "LDAP orig encrypted pw: " + this.encryptedPassword);
170:
171: return this.encryptedPassword
172: .equals(Password.encrypt(password));
173: }
174:
175: }
|