| 1 package org.appfuse.webapp.action; 2 3 import java.util.Locale ; 4 5 import javax.servlet.http.HttpServletRequest ; 6 import javax.servlet.http.HttpServletResponse ; 7 8 import org.acegisecurity.Authentication; 9 import org.acegisecurity.AuthenticationTrustResolver; 10 import org.acegisecurity.AuthenticationTrustResolverImpl; 11 import org.acegisecurity.context.SecurityContextHolder; 12 import org.acegisecurity.context.SecurityContext; 13 14 import org.apache.commons.lang.StringUtils; 15 import org.appfuse.Constants; 16 import org.appfuse.model.Role; 17 import org.appfuse.model.User; 18 import org.appfuse.service.RoleManager; 19 import org.appfuse.service.UserManager; 20 import org.appfuse.service.UserExistsException; 21 import org.appfuse.util.StringUtil; 22 import org.appfuse.webapp.util.RequestUtil; 23 import org.springframework.validation.BindException; 24 import org.springframework.web.servlet.ModelAndView; 25 import org.springframework.web.servlet.view.RedirectView; 26 27 35 public class UserFormController extends BaseFormController { 36 private RoleManager roleManager; 37 38 41 public void setRoleManager(RoleManager roleManager) { 42 this.roleManager = roleManager; 43 } 44 45 public UserFormController() { 46 setCommandName("user"); 47 setCommandClass(User.class); 48 } 49 50 public ModelAndView processFormSubmission(HttpServletRequest request, 51 HttpServletResponse response, 52 Object command, 53 BindException errors) 54 throws Exception { 55 if (request.getParameter("cancel") != null) { 56 if (!StringUtils.equals(request.getParameter("from"), "list")) { 57 return new ModelAndView(getCancelView()); 58 } else { 59 return new ModelAndView(getSuccessView()); 60 } 61 } 62 63 return super.processFormSubmission(request, response, command, errors); 64 } 65 66 public ModelAndView onSubmit(HttpServletRequest request, 67 HttpServletResponse response, Object command, 68 BindException errors) 69 throws Exception { 70 if (log.isDebugEnabled()) { 71 log.debug("entering 'onSubmit' method..."); 72 } 73 74 User user = (User) command; 75 Locale locale = request.getLocale(); 76 77 if (request.getParameter("delete") != null) { 78 getUserManager().removeUser(user.getId().toString()); 79 saveMessage(request, getText("user.deleted", user.getFullName(), locale)); 80 81 return new ModelAndView(getSuccessView()); 82 } else { 83 Boolean encrypt = (Boolean ) getConfiguration().get(Constants.ENCRYPT_PASSWORD); 84 85 if (StringUtils.equals(request.getParameter("encryptPass"), "true") 86 && (encrypt != null && encrypt.booleanValue())) { 87 88 String algorithm = (String ) getConfiguration().get(Constants.ENC_ALGORITHM); 89 90 if (algorithm == null) { 92 if (log.isDebugEnabled()) { 93 log.debug("assuming testcase, setting algorithm to 'SHA'"); 94 } 95 96 algorithm = "SHA"; 97 } 98 99 user.setPassword(StringUtil.encodePassword(user.getPassword(), algorithm)); 100 } 101 102 String [] userRoles = request.getParameterValues("userRoles"); 103 104 if (userRoles != null) { 105 user.getRoles().clear(); 108 for (int i = 0; i < userRoles.length; i++) { 109 String roleName = userRoles[i]; 110 user.addRole(roleManager.getRole(roleName)); 111 } 112 } 113 114 Integer originalVersion = user.getVersion(); 115 116 try { 117 getUserManager().saveUser(user); 118 } catch (UserExistsException e) { 119 log.warn(e.getMessage()); 120 121 errors.rejectValue("username", "errors.existing.user", 122 new Object [] { 123 user.getUsername(), user.getEmail() 124 }, "duplicate user"); 125 126 user.setPassword(user.getConfirmPassword()); 128 user.setVersion(originalVersion); 130 131 return showForm(request, response, errors); 132 } 133 134 if (!StringUtils.equals(request.getParameter("from"), "list")) { 135 saveMessage(request, getText("user.saved", user.getFullName(), locale)); 136 137 return new ModelAndView(new RedirectView("mainMenu.html")); 139 } else { 140 if (StringUtils.isBlank(request.getParameter("version"))) { 141 saveMessage(request, getText("user.added", user.getFullName(), locale)); 142 143 message.setSubject(getText("signup.email.subject", locale)); 145 sendUserMessage(user, getText("newuser.email.message", user.getFullName(), locale), 146 RequestUtil.getAppURL(request)); 147 148 return showNewForm(request, response); 149 } else { 150 saveMessage(request, getText("user.updated.byAdmin", user.getFullName(), locale)); 151 } 152 } 153 } 154 155 return showForm(request, response, errors); 156 } 157 158 protected ModelAndView showForm(HttpServletRequest request, 159 HttpServletResponse response, 160 BindException errors) 161 throws Exception { 162 if (request.getRequestURI().indexOf("editProfile") > -1) { 163 if ((request.getParameter("username") != null) || (request.getParameter("from") != null)) { 168 response.sendError(HttpServletResponse.SC_FORBIDDEN); 169 log.warn("User '" + request.getRemoteUser() + "' is trying to edit user '" + 170 request.getParameter("username") + "'"); 171 172 return null; 173 } 174 } 175 176 if ((request.getRequestURI().indexOf("editUser") > -1) && (!request.isUserInRole(Constants.ADMIN_ROLE) && 179 (errors.getErrorCount() == 0) && (request.getRemoteUser() != null))) { response.sendError(HttpServletResponse.SC_FORBIDDEN); 182 183 return null; 184 } 185 186 return super.showForm(request, response, errors); 187 } 188 189 protected Object formBackingObject(HttpServletRequest request) 190 throws Exception { 191 if (!isFormSubmission(request)) { 192 String username = request.getParameter("username"); 193 194 log.debug("checking for remember me login..."); 196 197 AuthenticationTrustResolver resolver = new AuthenticationTrustResolverImpl(); 198 SecurityContext ctx = SecurityContextHolder.getContext(); 199 200 if (ctx.getAuthentication() != null) { 201 Authentication auth = ctx.getAuthentication(); 202 203 if (resolver.isRememberMe(auth)) { 204 request.getSession().setAttribute("cookieLogin", "true"); 205 206 saveMessage(request, getText("userProfile.cookieLogin", request.getLocale())); 208 } 209 } 210 211 User user = null; 212 213 if (request.getRequestURI().indexOf("editProfile") > -1) { 214 user = getUserManager().getUserByUsername(request.getRemoteUser()); 215 } else if (!StringUtils.isBlank(username) && !"".equals(request.getParameter("version"))) { 216 user = getUserManager().getUserByUsername(username); 217 } else { 218 user = new User(); 219 user.addRole(new Role(Constants.USER_ROLE)); 220 } 221 222 user.setConfirmPassword(user.getPassword()); 223 224 return user; 225 } 226 return super.formBackingObject(request); 227 } 228 229 protected void onBind(HttpServletRequest request, Object command) 230 throws Exception { 231 if (request.getParameter("delete") != null) { 233 super.setValidateOnBinding(false); 234 } else { 235 super.setValidateOnBinding(true); 236 } 237 } 238 } 239 | Popular Tags |