[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action ...
Christian Bauer
christian at hibernate.org
Wed Jan 2 00:36:15 EST 2008
User: cbauer
Date: 08/01/02 00:36:15
Modified: examples/wiki/src/main/org/jboss/seam/wiki/core/action
Authenticator.java
Added: examples/wiki/src/main/org/jboss/seam/wiki/core/action
UserPasswordReset.java
Log:
JBSEAM-2421 - Forgot password reset feature
Revision Changes Path
1.13 +19 -19 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Authenticator.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- Authenticator.java 30 Dec 2007 02:33:25 -0000 1.12
+++ Authenticator.java 2 Jan 2008 05:36:15 -0000 1.13
@@ -6,23 +6,24 @@
*/
package org.jboss.seam.wiki.core.action;
-import org.jboss.seam.annotations.*;
+import org.jboss.seam.Component;
+import org.jboss.seam.ScopeType;
+import org.jboss.seam.annotations.Factory;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.core.Events;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.security.Identity;
+import org.jboss.seam.util.Base64;
+import org.jboss.seam.wiki.core.action.prefs.UserManagementPreferences;
import org.jboss.seam.wiki.core.dao.UserDAO;
import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
-import org.jboss.seam.wiki.core.model.*;
-import org.jboss.seam.wiki.core.model.Role;
-import org.jboss.seam.wiki.core.action.prefs.UserManagementPreferences;
import org.jboss.seam.wiki.core.engine.MacroWikiTextRenderer;
-import org.jboss.seam.wiki.util.WikiUtil;
+import org.jboss.seam.wiki.core.model.*;
import org.jboss.seam.wiki.util.Hash;
-import org.jboss.seam.wiki.preferences.Preferences;
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.Component;
-import org.jboss.seam.log.Log;
-import org.jboss.seam.util.Base64;
-import org.jboss.seam.core.Events;
-import org.jboss.seam.contexts.Contexts;
-import org.jboss.seam.security.Identity;
+import org.jboss.seam.wiki.util.WikiUtil;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
@@ -42,6 +43,9 @@
@In
private Identity identity;
+ @In("#{preferences.get('UserManagement')}")
+ UserManagementPreferences prefs;
+
private String activationCode;
public String getActivationCode() { return activationCode; }
public void setActivationCode(String activationCode) { this.activationCode = activationCode; }
@@ -117,9 +121,7 @@
Contexts.getEventContext().set("activatedUser", user);
// Optionally, create home directory
- UserManagementPreferences userMgmtPrefs =
- (UserManagementPreferences) Preferences.getInstance("UserManagement");
- if ( userMgmtPrefs.getCreateHomeAfterUserActivation() ) {
+ if ( prefs.getCreateHomeAfterUserActivation() ) {
createHomeDirectory(user);
}
@@ -160,9 +162,7 @@
homePage.setWikiname(WikiUtil.convertToWikiName(homePage.getName()));
homePage.setCreatedBy(user);
homePage.setAreaNumber(homeDirectory.getAreaNumber());
- homePage.setContent(
- ((UserManagementPreferences) Preferences.getInstance("UserManagement")).getHomepageDefaultContent()
- );
+ homePage.setContent(prefs.getHomepageDefaultContent());
homePage.setWriteAccessLevel(Role.ADMINROLE_ACCESSLEVEL);
homePage.setReadAccessLevel(Role.GUESTROLE_ACCESSLEVEL);
1.1 date: 2008/01/02 05:36:15; author: cbauer; state: Exp;jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/action/UserPasswordReset.java
Index: UserPasswordReset.java
===================================================================
/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.wiki.core.action;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.faces.Renderer;
import org.jboss.seam.log.Log;
import org.jboss.seam.wiki.core.action.prefs.UserManagementPreferences;
import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
import org.jboss.seam.wiki.core.dao.UserDAO;
import org.jboss.seam.wiki.core.model.User;
import org.jboss.seam.wiki.preferences.Preferences;
import org.jboss.seam.wiki.util.Hash;
import javax.faces.application.FacesMessage;
import javax.persistence.EntityManager;
import java.io.Serializable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author Christian Bauer
*/
@Name("userPasswordReset")
@Scope(ScopeType.CONVERSATION)
public class UserPasswordReset implements Serializable {
public static final String RESET_PASSWORD_OF_USER = "resetPasswordOfUser";
@Logger
Log log;
@In
private FacesMessages facesMessages;
@In("#{preferences.get('UserManagement')}")
UserManagementPreferences prefs;
@In(create = true)
private Renderer renderer;
@In
private UserDAO userDAO;
@In
protected EntityManager entityManager;
@In
private Hash hashUtil;
private String activationCode;
private String username;
private String email;
private String password;
private String passwordControl;
public String getActivationCode() { return activationCode; }
public void setActivationCode(String activationCode) { this.activationCode = activationCode; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
public String getPasswordControl() { return passwordControl; }
public void setPasswordControl(String passwordControl) { this.passwordControl = passwordControl; }
public void sendResetPasswordEmail() {
log.debug("trying to reset password of user: " + username);
User user = getUserForEmail(username, email);
if (user == null) {
facesMessages.addFromResourceBundleOrDefault(
FacesMessage.SEVERITY_ERROR,
"lacewiki.msg.resetPassword.NotValid",
"Your account and e-mail address information didn't match, please try again to reset your password."
);
username = null;
email = null;
return;
}
// Set activation code (unique user in time)
String seed = user.getUsername() + System.currentTimeMillis() + prefs.getActivationCodeSalt();
user.setActivationCode( ((Hash) Component.getInstance("hashUtil")).hash(seed) );
// TODO: Flush by side effect?
try {
// Outject for email
Contexts.getEventContext().set(RESET_PASSWORD_OF_USER, user);
// Send confirmation email
renderer.render("/themes/"
+ ((WikiPreferences) Preferences.getInstance("Wiki")).getThemeName()
+ "/mailtemplates/resetPassword.xhtml");
facesMessages.addFromResourceBundleOrDefault(
FacesMessage.SEVERITY_INFO,
"lacewiki.msg.resetPassword.EmailSent",
"A new activation code has been sent to your e-mail address, please read this e-mail to reset your password."
);
} catch (Exception ex) {
facesMessages.add(FacesMessage.SEVERITY_ERROR, "Couldn't send password reset email: " + ex.getMessage());
}
}
public String prepare() {
User user = userDAO.findUserWithActivationCode(activationCode);
if (user != null) {
log.debug("preparing password reset of: " + user);
user.setActivationCode(null);
// Outject for form
Contexts.getSessionContext().set(RESET_PASSWORD_OF_USER, user);
return "prepared";
} else {
return "notFound";
}
}
public void reset() {
User user = (User)Component.getInstance(RESET_PASSWORD_OF_USER);
if (user == null) {
throw new IllegalStateException("No user for password reset in SESSION context");
}
// Validate
if (!passwordAndControlNotNull() ||
!passwordMatchesRegex() ||
!passwordMatchesControl()) {
// Force re-entry
setPassword(null);
setPasswordControl(null);
return;
}
log.debug("resetting password of: " + user);
User persistentUser = userDAO.findUser(user.getId());
persistentUser.setPasswordHash(hashUtil.hash(getPassword()));
Contexts.getSessionContext().remove(RESET_PASSWORD_OF_USER);
facesMessages.addFromResourceBundleOrDefault(
FacesMessage.SEVERITY_ERROR,
"lacewiki.msg.resetPassword.Complete",
"Successfully reset password of account '{0}', please log in.",
persistentUser.getUsername()
);
}
private User getUserForEmail(String username, String email) {
if (User.GUEST_USERNAME.equals(username)) return null;
User user = userDAO.findUser(username, false, true);
return user != null && user.getEmail().equals(email) ? user : null;
}
public boolean passwordAndControlNotNull() {
if (getPassword() == null || getPassword().length() == 0 ||
getPasswordControl() == null || getPasswordControl().length() == 0) {
facesMessages.addFromResourceBundleOrDefault(
FacesMessage.SEVERITY_ERROR,
"lacewiki.msg.PasswordOrPasswordControlEmpty",
"Please enter your password twice!"
);
return false;
}
return true;
}
public boolean passwordMatchesRegex() {
Matcher matcher = Pattern.compile(prefs.getPasswordRegex()).matcher(getPassword());
if (!matcher.find()) {
facesMessages.addFromResourceBundleOrDefault(
FacesMessage.SEVERITY_ERROR,
"lacewiki.msg.PasswordDoesntMatchPattern",
"Password does not match the pattern: {0}",
prefs.getPasswordRegex()
);
return false;
}
return true;
}
public boolean passwordMatchesControl() {
if (!password.equals(passwordControl) ) {
facesMessages.addFromResourceBundleOrDefault(
FacesMessage.SEVERITY_ERROR,
"lacewiki.msg.PasswordControlNoMatch",
"The passwords don't match."
);
return false;
}
return true;
}
}
More information about the jboss-cvs-commits
mailing list