package org.jboss.seam.security.management.action; import static org.jboss.seam.ScopeType.CONVERSATION; import static org.jboss.seam.annotations.Install.BUILT_IN; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.jboss.seam.annotations.Begin; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.core.Conversation; import org.jboss.seam.international.StatusMessages; import org.jboss.seam.security.management.IdentityManager; /** * A conversation-scoped component for creating and managing user accounts * * @author Shane Bryzak */ @Name("org.jboss.seam.security.management.userAction") @Scope(CONVERSATION) @Install(precedence = BUILT_IN) public class UserAction implements Serializable { private String firstname; private String lastname; private String username; private String password; private String confirm; private List<String> roles; private boolean enabled; private boolean newUserFlag; @In IdentityManager identityManager; @Begin public void createUser() { roles = new ArrayList<String>(); newUserFlag = true; } @Begin public void editUser(String username) { this.username = username; roles = identityManager.getGrantedRoles(username); enabled = identityManager.isUserEnabled(username); newUserFlag = false; } public String save() { if (newUserFlag) { return saveNewUser(); } else { return saveExistingUser(); } } private String saveNewUser() { if (password == null || !password.equals(confirm)) { StatusMessages.instance().addToControl("password", "Passwords do not match"); return "failure"; } boolean success = identityManager.createUser(username, password, firstname, lastname); if (success) { for (String role : roles) { identityManager.grantRole(username, role); } if (!enabled) { identityManager.disableUser(username); } Conversation.instance().end(); return "success"; } return "failure"; } private String saveExistingUser() { // Check if a new password has been entered if (password != null && !"".equals(password)) { if (!password.equals(confirm)) { StatusMessages.instance().addToControl("password", "Passwords do not match"); return "failure"; } else { identityManager.changePassword(username, password); } } List<String> grantedRoles = identityManager.getGrantedRoles(username); if (grantedRoles != null) { for (String role : grantedRoles) { if (!roles.contains(role)) identityManager.revokeRole(username, role); } } for (String role : roles) { if (grantedRoles == null || !grantedRoles.contains(role)) { identityManager.grantRole(username, role); } } if (enabled) { identityManager.enableUser(username); } else { identityManager.disableUser(username); } Conversation.instance().end(); return "success"; } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getConfirm() { return confirm; } public void setConfirm(String confirm) { this.confirm = confirm; } public List<String> getRoles() { return roles; } public void setRoles(List<String> roles) { this.roles = roles; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } }