/**
*
*/
package org.openuap.cms.setup.action;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.openuap.base.util.ControllerHelper;
import org.openuap.base.web.mvc.BaseFormController;
import org.openuap.cms.config.ConfigFactory;
import org.openuap.cms.user.manager.IUserManager;
import org.openuap.cms.user.model.AbstractUser;
import org.openuap.cms.user.model.IUser;
import org.openuap.cms.user.security.SecurityUtil;
import org.openuap.cms.user.security.permissions.UserPermissionConstant;
import org.openuap.cms.user.ui.UserStatus;
import org.openuap.cms.user.ui.UserType;
import org.openuap.passport.sso.UnauthorizedException;
import org.openuap.runtime.setup.BaseApplicationConfiguration;
import org.springframework.util.StringUtils;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.web.servlet.ModelAndView;
/**
* @author weiping.ju
*
*/
public class SupermanAction extends BaseFormController {
private String BASIC_AUTH_USER;
//
private String BASIC_AUTH_PASS;
private String defaultScreensPath;
//
private String operationViewName;
//
private IUserManager baseUserManager;
public SupermanAction() {
initDefaultProperty();
}
protected void initDefaultProperty() {
defaultScreensPath = "/plugin/cms/base/screens/superman/";
operationViewName = defaultScreensPath + "user_operation_result.html";
this.setFormView(defaultScreensPath + "user_edit.html");
this.setSuccessView(this.getFormView());
this.setSessionForm(true);
this.setBindOnNewForm(false);
this.setCommandClass(IUser.class);
this.setCommandName("user");
}
public ModelAndView beforePerform(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
BaseApplicationConfiguration config = ConfigFactory.getInstance()
.getBaseConfig();
//
BASIC_AUTH_USER = config.getString("sys.security.admin.username", "");
BASIC_AUTH_PASS = config.getString("sys.security.admin.password", "");
// 这里如果是中文会出现乱码
String BASIC_AUTH_DESC = config.getString("sys.security.admin.desc",
"CMS Super Administrator Control Center");
if (!BASIC_AUTH_USER.equals("")
&& helper.getAuthUsername().equals(BASIC_AUTH_USER)
&& helper.getAuthPassword().equals(BASIC_AUTH_PASS)) {
} else {
try {
helper.requireAuthentication(BASIC_AUTH_DESC);
} catch (Exception ex) {
log.fatal("Can't require Authentication", ex);
}
return errorPage(request, response, helper, "invalid_access", model);
}
return null;
}
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors,
ControllerHelper helper, Map model) throws Exception {
//
//
ModelAndView mv = new ModelAndView(operationViewName, model);
//
try {
IUser user = (IUser) command;
String mode = request.getParameter("mode");
String pwd = request.getParameter("pwd1");
if (mode.equals("add")) {
model.put("op", "add");
user.setPos(new Integer(0));
user.setPassword(pwd);
user.setCreationDate(new Long(System.currentTimeMillis()));
user.setLoginTimes(new Long(0));
user.setLastLoginDate(new Long(-1));
baseUserManager.addUser(user);
model.put("rs", "success");
} else {
model.put("op", "edit");
if (pwd != null && !pwd.trim().equals("")) {
user.setPassword(pwd);
baseUserManager.saveUserWithChangePwd(user);
} else {
baseUserManager.saveUser(user);
}
model.put("rs", "success");
}
} catch (Exception ex) {
ex.printStackTrace();
model.put("rs", "failed");
model.put("ex", ex);
}
return mv;
}
/**
* 数据校验
*/
protected void onBindAndValidate(HttpServletRequest request,
Object command, BindException errors) {
String mode = request.getParameter("mode");
String pwd1 = request.getParameter("pwd1");
String pwd2 = request.getParameter("pwd2");
AbstractUser user = (AbstractUser) command;
if (mode.equals("add")) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name",
"name_empty", "the name shouldn't be empty.");
//
if (!StringUtils.hasText(pwd1)) {
errors.reject("password_empty",
"the password shouldn't be empty");
}
if (pwd1 != null && !pwd1.equals(pwd2)) {
errors.reject("password_not_equal",
"the password is not equal.");
}
// http://jira.openuap.org/browse/CMS-15
String name = request.getParameter("name");
int count = baseUserManager.getUserByNameCount(name);
if (count > 0) {
errors.reject("name_is_exist", "用户名已经存在,请选择别的用户名.");
}
} else if (mode.equals("edit")) {
if (pwd1 != null && !pwd1.equals(pwd2)) {
errors.reject("password_not_equal",
"the password is not equal.");
}
}
}
protected Object formBackingObject(HttpServletRequest request) {
String mode = request.getParameter("mode");
String userId = request.getParameter("userId");
if (mode != null && mode.equals("edit")) {
Long uid = new Long(userId);
IUser user = baseUserManager.getUserById(uid);
return user;
} else {
IUser user = baseUserManager.createUser();
return user;
}
}
protected Map referenceData(HttpServletRequest request, Object command,
Errors errors) throws Exception {
Map ref = new HashMap();
String mode = request.getParameter("mode");
if (mode == null) {
mode = "add";
}
ref.put("mode", mode);
ref.put("userStatues", UserStatus.ALL_USER_STATUS);
ref.put("userTypes", UserType.SYS_USER_TYPES);
return ref;
}
/**
* 用户名检查
* @param request
* @param response
* @param helper
* @param model
* @return
* @throws Exception
*/
public ModelAndView doCheckUserName(HttpServletRequest request,
HttpServletResponse response, ControllerHelper helper, Map model)
throws Exception {
String name = helper.getString("name");
int count = baseUserManager.getUserByNameCount(name);
//
PrintWriter writer = response.getWriter();
if (count == 0) {
writer.print("1");
} else {
writer.print("0");
}
writer.flush();
writer.close();
return null;
}
public void setDefaultScreensPath(String defaultScreensPath) {
this.defaultScreensPath = defaultScreensPath;
}
public void setBaseUserManager(IUserManager baseUserManager) {
this.baseUserManager = baseUserManager;
}
}