package org.hyperic.hq.ui.action.admin.user;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.interceptor.validation.SkipValidation;
import org.hyperic.hq.authz.server.session.AuthzSubject;
import org.hyperic.hq.bizapp.shared.AuthBoss;
import org.hyperic.hq.bizapp.shared.AuthzBoss;
import org.hyperic.hq.ui.Constants;
import org.hyperic.hq.ui.Portal;
import org.hyperic.hq.ui.action.BaseActionNG;
import org.hyperic.hq.ui.util.RequestUtils;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.opensymphony.xwork2.ModelDriven;
@Component(value = "UserPasswordActionNG")
@Scope(value = "prototype")
public class UserPasswordActionNG extends BaseActionNG implements
ModelDriven<UserNG> {
private static final String PORTLET_LIST = ".admin.user.List";
private static final String TITLE_NEW = "admin.user.NewUserTitle";
private static final String PORTLET_NEW = ".admin.user.New";
private static final String TITLE_CHANGE_PASSWORD = "admin.user.ChangeUserPasswordTitle";
private static final String PORTLET_CHANGE_PASSWORD = ".admin.user.EditPassword";
private static final String TITLE_REGISTER = "admin.user.RegisterUserTitle";
private static final String PORTLET_REGISTER = ".admin.user.RegisterUser";
protected final Log log = LogFactory.getLog(UserPasswordActionNG.class
.getName());
@Resource
private AuthBoss authBoss;
@Resource
private AuthzBoss authzBoss;
private Map<String, Object> userSession;
private UserNG user = new UserNG();
private String userId;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
@SkipValidation
public String cancel() throws Exception {
setHeaderResources();
Portal portal = Portal.createPortal(TITLE_NEW, PORTLET_LIST);
portal.setDialog(true);
getServletRequest().setAttribute(Constants.PORTAL_KEY, portal);
userId = RequestUtils.getUserId(getServletRequest()).toString();
return "cancel";
}
@SkipValidation
public String reset() throws Exception {
setHeaderResources();
Portal portal = Portal.createPortal(TITLE_NEW, PORTLET_NEW);
portal.setDialog(true);
getServletRequest().setAttribute(Constants.PORTAL_KEY, portal);
userId = RequestUtils.getUserId(getServletRequest()).toString();
user.reset();
return "reset";
}
@SkipValidation
public String startEdit() throws Exception {
setUser();
setHeaderResources();
Portal portal = Portal.createPortal(TITLE_NEW, PORTLET_CHANGE_PASSWORD);
portal.setDialog(true);
getServletRequest().setAttribute(Constants.PORTAL_KEY, portal);
userId = RequestUtils.getUserId(getServletRequest()).toString();
return "startEditPassword";
}
public String edit() throws Exception {
log.trace("Editing password for user.");
if ( !UserAdminPortalActionNG.validatePasswordNoSpaces(user.getNewPassword()) ) {
addFieldError("newPassword", getText("admin.user.changePassword.NoSpaces"));
return INPUT;
}
String checkResult = checkSubmit(user);
if (checkResult != null) {
return checkResult;
}
userId = user.getId().toString();
Integer sessionId = RequestUtils.getSessionId(getServletRequest());
AuthzSubject subject = authzBoss.findSubjectById(
RequestUtils.getSessionId(getServletRequest()), user.getId());
log.trace("Editing user's password.");
try {
authBoss.authenticate(subject.getName(), user.getCurrentPassword());
} catch (Exception e) {
addFieldError("currentPassword",
getText("admin.user.error.WrongPassword"));
return "editPasswordFailed";
}
authBoss.changePassword(sessionId.intValue(), subject.getName(),
user.getNewPassword());
return "passwordEdited";
}
public String execute() throws Exception {
return null;
}
public UserNG getUser() {
return user;
}
public void setUser(UserNG user) {
this.user = user;
}
public UserNG getModel() {
return user;
}
}