Modify the Flux update user behavior so if admin does not provide a new password, the user's old password is still preserved
diff --git a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
index 074e2e2..0a8afb7 100644
--- a/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
+++ b/src/main/resources/archetype-resources/src/main/java/flux/modules/actions/user/FluxUserAction.java
@@ -34,10 +34,11 @@
import ${package}.flux.modules.actions.FluxAction;
/**
- * Change Password action.
- *
+ * Change user action
*/
-public class FluxUserAction extends FluxAction {
+public class FluxUserAction extends FluxAction
+{
+ /** Logging **/
private static Log log = LogFactory.getLog(FluxUserAction.class);
/** Injected service instance */
@@ -48,7 +49,8 @@
* ActionEvent responsible for inserting a new user into the Turbine security
* system.
*/
- public void doInsert(PipelineData pipelineData, Context context) throws Exception {
+ public void doInsert(PipelineData pipelineData, Context context) throws Exception
+ {
RunData data = (RunData) pipelineData;
/*
@@ -57,12 +59,14 @@
String username = data.getParameters().getString("username");
String password = data.getParameters().getString("password");
- if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)) {
+ if (!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password))
+ {
/*
* Make sure this account doesn't already exist. If the account already exists
* then alert the user and make them change the username.
*/
- if (security.accountExists(username)) {
+ if (security.accountExists(username))
+ {
context.put("username", username);
context.put("errorTemplate", "user,FluxUserAlreadyExists.vm");
@@ -70,9 +74,12 @@
data.getParameters().add("mode", "insert");
data.setScreen("user,FluxUserForm.vm");
return;
- } else {
+ }
+ else
+ {
- try {
+ try
+ {
/*
* Create a new user modeled directly from the SecurityServiceTest method
*/
@@ -83,7 +90,9 @@
// Use security to force the password
security.forcePassword(user, password);
- } catch (Exception e) {
+ }
+ catch (Exception e)
+ {
log.error("Error adding new user: " + e);
context.put("username", username);
@@ -106,35 +115,32 @@
}
/**
- * ActionEvent responsible updating a user. Must check the input for integrity
- * before allowing the user info to be update in the database.
+ * ActionEvent responsible updating a user
*/
- public void doUpdate(PipelineData pipelineData, Context context) throws Exception {
+ public void doUpdate(PipelineData pipelineData, Context context) throws Exception
+ {
RunData data = (RunData) pipelineData;
String username = data.getParameters().getString("username");
- if (!StringUtils.isEmpty(username)) {
- if (security.accountExists(username)) {
-
- // This wrapped user does work for change password though... see below
+ if (!StringUtils.isEmpty(username))
+ {
+ if (security.accountExists(username))
+ {
+ // Load the wrapped user object
User user = security.getUser(username);
+ User tmp_user = security.getUser(username);
if (user != null) {
- // update all properties from form
+ // Update user details except for the password
data.getParameters().setProperties(user);
-
- // save the changes to the user account
+ user.setPassword(tmp_user.getPassword());
security.saveUser(user);
- // get the new password from form submit
+ // Test if Admin provided new password
String password = data.getParameters().getString("password");
-
- // Only update if we received a new (non-empty) password
- if (!StringUtils.isEmpty(password)) {
-
+ if (!StringUtils.isEmpty(password))
+ {
// Change user password
security.changePassword(user, user.getPassword(), password);
-
- // this still works
security.forcePassword(user, password);
} else {
data.setMessage("Cannot provide an empty password");
@@ -150,16 +156,19 @@
}
/**
- * ActionEvent responsible for removing a user from the Tambora system.
+ * ActionEvent responsible for removing a user
*/
- public void doDelete(PipelineData pipelineData, Context context) throws Exception {
+ public void doDelete(PipelineData pipelineData, Context context) throws Exception
+ {
- try {
+ try
+ {
RunData data = (RunData) pipelineData;
String username = data.getParameters().getString("username");
- if (!StringUtils.isEmpty(username)) {
- if (security.accountExists(username)) {
-
+ if (!StringUtils.isEmpty(username))
+ {
+ if (security.accountExists(username))
+ {
// find the user object and remove using security mgr
User user = security.getUser(username);
@@ -174,7 +183,9 @@
data.setMessage("User not found!");
}
}
- } catch (Exception e) {
+ }
+ catch (Exception e)
+ {
log.error("Could not remove user: " + e);
}
}
@@ -182,17 +193,21 @@
/**
* Update the roles that are to assigned to a user for a project.
*/
- public void doRoles(PipelineData pipelineData, Context context) throws Exception {
+ public void doRoles(PipelineData pipelineData, Context context) throws Exception
+ {
RunData data = (RunData) pipelineData;
- try {
+ try
+ {
/*
* Get the user we are trying to update. The username has been hidden in the
* form so we will grab the hidden username and use that to retrieve the user.
*/
String username = data.getParameters().getString("username");
- if (!StringUtils.isEmpty(username)) {
- if (security.accountExists(username)) {
+ if (!StringUtils.isEmpty(username))
+ {
+ if (security.accountExists(username))
+ {
User user = security.getUser(username);
// Get the Turbine ACL implementation
@@ -204,9 +219,11 @@
GroupSet groups = security.getAllGroups();
RoleSet roles = security.getAllRoles();
- for (Group group : groups) {
+ for (Group group : groups)
+ {
String groupName = group.getName();
- for (Role role : roles) {
+ for (Role role : roles)
+ {
String roleName = role.getName();
/*
@@ -258,7 +275,8 @@
/**
* Implement this to add information to the context.
*/
- public void doPerform(PipelineData pipelineData, Context context) throws Exception {
+ public void doPerform(PipelineData pipelineData, Context context) throws Exception
+ {
log.info("Running do perform!");
( (RunData) pipelineData).setMessage("Can't find the requested action!");
}