Migrate UserRegitration to MVC 3.0.

wisemapping-servlet.xml is not used anymore.
This commit is contained in:
Paulo Gustavo Veiga 2012-06-16 19:27:22 -03:00
parent ea2bff60f7
commit 33131d4e9e
14 changed files with 116 additions and 76 deletions

View File

@ -42,7 +42,7 @@ public class LoginController {
result = new ModelAndView("forward:/c/maps/");
} else {
result = new ModelAndView("login");
result.addObject("isHsql", driver.indexOf("hsql") != -1);
result.addObject("isHsql", driver.contains("hsql"));
}
return result;
}

View File

@ -19,11 +19,19 @@
package com.wisemapping.ncontroller;
import com.wisemapping.controller.Messages;
import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.User;
import com.wisemapping.service.InvalidUserEmailException;
import com.wisemapping.service.UserService;
import com.wisemapping.validator.UserValidator;
import com.wisemapping.view.UserBean;
import net.tanesha.recaptcha.ReCaptcha;
import net.tanesha.recaptcha.ReCaptchaResponse;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
@ -32,6 +40,9 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.Properties;
@Controller
public class UsersController {
@ -39,6 +50,16 @@ public class UsersController {
@Autowired
private UserService userService;
@Value("${registration.email.enabled}")
boolean emailConfirmEnabled;
@Autowired
private ReCaptcha captchaService;
@Value("${registration.recaptcha.enabled}")
private boolean captchaEnabled;
@RequestMapping(value = "user/resetPassword", method = RequestMethod.GET)
public ModelAndView showResetPasswordPage() {
return new ModelAndView("forgotPassword");
@ -59,7 +80,62 @@ public class UsersController {
return result;
}
public void setUserService(@NotNull UserService userService) {
this.userService = userService;
@RequestMapping(value = "user/registration", method = RequestMethod.GET)
public ModelAndView showRegistrationPage(@NotNull HttpServletRequest request) {
if (captchaEnabled) {
// If captcha is enabled, generate it ...
final Properties prop = new Properties();
prop.put("theme", "white");
final String captchaHtml = captchaService.createRecaptchaHtml(null, prop);
request.setAttribute("captchaHtml", captchaHtml);
request.setAttribute("captchaEnabled", true);
}
return new ModelAndView("userRegistration", "user", new UserBean());
}
@RequestMapping(value = "user/registration", method = RequestMethod.POST)
public ModelAndView registerUser(@ModelAttribute("user") UserBean userBean, @NotNull HttpServletRequest request, @NotNull BindingResult bindingResult) throws WiseMappingException {
ModelAndView result;
validateRegistrationForm(userBean, request, bindingResult);
if (bindingResult.hasErrors()) {
result = this.showRegistrationPage(request);
result.addObject("user", userBean);
} else {
final User user = new User();
// trim() the email email in order to remove spaces ...
user.setEmail(userBean.getEmail().trim());
user.setUsername(userBean.getUsername());
user.setFirstname(userBean.getFirstname());
user.setLastname(userBean.getLastname());
user.setPassword(userBean.getPassword());
userService.createUser(user, emailConfirmEnabled);
// Forward to the success view ...
result = new ModelAndView("userRegistrationSuccess");
result.addObject("confirmByEmail", emailConfirmEnabled);
}
return result;
}
private BindingResult validateRegistrationForm(@NotNull UserBean userBean, @NotNull HttpServletRequest request, @NotNull BindingResult bindingResult) {
final UserValidator userValidator = new UserValidator();
userValidator.setUserService(userService);
userValidator.setCaptchaService(captchaService);
userValidator.validate(userBean, bindingResult);
// If captcha is enabled, generate it ...
if (captchaEnabled) {
final String challenge = request.getParameter("recaptcha_challenge_field");
final String uresponse = request.getParameter("recaptcha_response_field");
final String remoteAddr = request.getRemoteAddr();
final ReCaptchaResponse reCaptchaResponse = captchaService.checkAnswer(remoteAddr, challenge, uresponse);
if (!reCaptchaResponse.isValid()) {
bindingResult.rejectValue("captcha", Messages.CAPTCHA_ERROR);
}
}
return bindingResult;
}
}

View File

@ -22,20 +22,20 @@ import com.wisemapping.model.CollaborationRole;
import com.wisemapping.model.Collaborator;
import com.wisemapping.model.User;
public class ColaboratorBean
public class CollaboratorBean
{
private CollaborationRole collaborationRole;
private boolean isUser;
private Collaborator collaborator;
public ColaboratorBean(Collaborator collaborator, CollaborationRole role)
public CollaboratorBean(Collaborator collaborator, CollaborationRole role)
{
this.collaborator = collaborator;
this.collaborationRole = role;
this.isUser = false;
}
public ColaboratorBean(User user, CollaborationRole role)
public CollaboratorBean(User user, CollaborationRole role)
{
this.collaborator = user;
this.collaborationRole = role;

View File

@ -29,8 +29,8 @@ import java.util.*;
public class MindMapBean {
private MindMap mindMap;
private List<ColaboratorBean> viewers;
private List<ColaboratorBean> colaborators;
private List<CollaboratorBean> viewers;
private List<CollaboratorBean> colaborators;
public MindMapBean(final MindMap mindmap) {
this.mindMap = mindmap;
@ -62,11 +62,11 @@ public class MindMapBean {
return mindMap.isStarred(Utils.getUser());
}
public List<ColaboratorBean> getViewers() {
public List<CollaboratorBean> getViewers() {
return viewers;
}
public List<ColaboratorBean> getCollaborators() {
public List<CollaboratorBean> getCollaborators() {
return colaborators;
}
@ -86,12 +86,12 @@ public class MindMapBean {
return mindMap.getTags();
}
private List<ColaboratorBean> getColaboratorBy(Set<Collaboration> source, CollaborationRole role) {
List<ColaboratorBean> col = new ArrayList<ColaboratorBean>();
private List<CollaboratorBean> getColaboratorBy(Set<Collaboration> source, CollaborationRole role) {
List<CollaboratorBean> col = new ArrayList<CollaboratorBean>();
if (source != null) {
for (Collaboration mu : source) {
if (mu.getRole() == role) {
col.add(new ColaboratorBean(mu.getCollaborator(), mu.getRole()));
col.add(new CollaboratorBean(mu.getCollaborator(), mu.getRole()));
}
}
}

View File

@ -58,12 +58,12 @@ mail.supportEmail=root@localhost
registration.email.enabled = false
# Enable captcha confirmation
registration.recaptcha.enabled = false
registration.recaptcha.enabled = true
# ReCaptcha is the default captcha. Public and private keys are required.
# More Info: http://www.google.com/recaptcha
registration.recaptcha.privateKey =
registration.recaptcha.publicKey =
# More Info: http://www.google.com/recaptcha .
registration.recaptcha.privateKey = 6LeQ4tISAAAAAMfHMPRKyHupTfA-KE4QeTCnLXhK
registration.recaptcha.publicKey = 6LeQ4tISAAAAALzCGKNgRv8UqsDx7Cb0vq4wbJBr
##################################################################################
# Site configuration

View File

@ -77,9 +77,9 @@
<put-attribute name="body" value="/jsp/userRegistration.jsp"/>
</definition>
<definition name="userRegistrationConfirmation" extends="pageTemplate">
<definition name="userRegistrationSuccess" extends="pageTemplate">
<put-attribute name="title" value="USER_REGISTRATION"/>
<put-attribute name="body" value="/jsp/userRegistrationConfirmation.jsp"/>
<put-attribute name="body" value="/jsp/userRegistrationSuccess.jsp"/>
</definition>
<definition name="login" extends="pageTemplate">

View File

@ -74,7 +74,7 @@
<value>/index.jsp</value>
<value>/c/home</value>
<value>/c/login</value>
<value>/c/userRegistration</value>
<value>/c/user/registration</value>
<value>/c/captcha</value>
<value>/c/publicView</value>
<value>/service/*</value>

View File

@ -23,7 +23,7 @@
<sec:http pattern="/favicon.ico" security="none"/>
<sec:http pattern="/c/login" security="none"/>
<sec:http pattern="/c/userregistration" security="none"/>
<sec:http pattern="/c/user/registration" security="none"/>
<sec:http pattern="/c/user/resetpassword" security="none"/>
<sec:http pattern="/c/home" security="none"/>
<sec:http pattern="/c/maps/*/embed" security="none"/>

View File

@ -3,24 +3,6 @@
<beans>
<bean id="userValidator" class="com.wisemapping.validator.UserValidator">
<property name="userService" ref="userService"/>
<property name="captchaService" ref="reCaptcha"/>
</bean>
<bean id="userController" class="com.wisemapping.controller.UserRegistrationController">
<property name="sessionForm" value="false"/>
<property name="commandName" value="user"/>
<property name="commandClass" value="com.wisemapping.view.UserBean"/>
<property name="validator" ref="userValidator"/>
<property name="formView" value="userRegistration"/>
<property name="successView" value="userRegistrationConfirmation"/>
<property name="userService" ref="userService"/>
<property name="emailConfirmEnabled" value="${registration.email.enabled}"/>
<property name="captchaEnabled" value="${registration.recaptcha.enabled}"/>
<property name="captchaService" ref="reCaptcha"/>
</bean>
<bean id="settingResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
@ -61,24 +43,4 @@
<bean id="activationController" class="com.wisemapping.controller.ActivationController">
<property name="userService" ref="userService"/>
</bean>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="browserSupportInterceptor"/>
<ref bean="localeChangeInterceptor"/>
</list>
</property>
<property name="mappings">
<props>
<!-- Forms based -->
<prop key="userRegistration">usersController</prop>
<prop key="login">loginController</prop>
<prop key="activation">activationController</prop>
<prop key="changePassword">changePasswordController</prop>
<prop key="settings">settingsController</prop>
<prop key="editProfile">editProfileController</prop>
</props>
</property>
</bean>
</beans>
ans>

View File

@ -196,7 +196,7 @@ function updateStatusToolbar() {
// Can be executed by the owner ?
var rowData = tableElem.dataTable().fnGetData(selectedRows[0]);
if (rowData.role != 'owner') {
$("#buttonsToolbar").find('#publishBtn').hide().end().find('#shareBtn').hide();
$("#buttonsToolbar").find('#publishBtn').hide().end().find('#shareBtn').hide().end().find('#renameBtn').hide();
}
} else {
$("#buttonsToolbar .act-multiple").show();

View File

@ -62,7 +62,7 @@
<div id="register">
<b><spring:message code="NOT_READY_A_USER"/></b>
<spring:message code="NOT_READY_A_USER_MESSAGE"/>
<a href="c/userRegistration">
<a href="c/user/registration">
<spring:message code="JOIN_NOW"/>
</a>
</div>

View File

@ -33,7 +33,7 @@
<spring:message code="NOT_READY_A_USER"/>
</b>
<spring:message code="NOT_READY_A_USER_MESSAGE"/>
<a href="c/userRegistration">
<a href="c/user/registration">
<spring:message code="JOIN_NOW"/>
</a>
</div>

View File

@ -1,6 +1,4 @@
<%@ include file="/jsp/init.jsp" %>
<div>
<div class="fform">
@ -35,23 +33,28 @@
<form:errors path="retypePassword" cssClass="errorMsg"/>
<c:if test="${requestScope.captchaEnabled}">
<form:errors path="captcha" cssClass="errorMsg"/>
${requestScope.captchaHtml}
<p>
<form:errors path="captcha" cssClass="errorMsg"/>
</p>
</c:if>
<div>
<p>
<spring:message code="TERM_OF_THE_SERVICE"/>
<spring:message code="WISEMAPPING_ACCOUNT_MESSAGE"/> <a href="c/termsOfUse"><spring:message
code="HERE"/></a>
code="HERE"/></a>.
<spring:message code="REGISTRATION_CLICK_ADVICE"/>
</p>
</div>
<input type="submit" value="<spring:message code="REGISTER" />" id="submitButton"
<input type="submit" value="<spring:message code="REGISTER"/>"
data-loading-text="<spring:message code="REGISTER"/> ..." id="submitButton"
class="btn btn-primary">
<input type="button" value="<spring:message code="CANCEL"/>"
onclick="window.location='c/<c:url value="maps/"/>'" class="btn">
</form:form>
</div>
</div>

View File

@ -1,22 +1,20 @@
<%@ include file="/jsp/init.jsp" %>
<div>
<h1>
<spring:message code="USER_REGISTRATION"/>
</h1>
<h2 style="font-weight:bold;">Thanks for signing up!</h2>
<c:if test="${confirmByEmail==true}">
<p>
You will receive a confirmation message shortly from WiseMapping. This message will ask you to activate your WiseMapping account.
You will receive a confirmation message shortly from WiseMapping. This message will ask you to activate your
WiseMapping account.
Please select the link to activate and start creating and sharing maps.
</p>
<br/>
<p>
Thanks so much for your interest in WiseMapping.
</p>
<br/>
<p>
If you have any questions or have any feedback, please don't hesitate to use the on line form.
We'd love to hear from you.
@ -24,7 +22,8 @@
</c:if>
<c:if test="${confirmByEmail==false}">
<p>
Your account has been created successfully, click <a href="c/login">here</a> to sign in and start enjoying WiseMapping.
Your account has been created successfully, click <a href="c/login">here</a> to sign in and start enjoying
WiseMapping.
</p>
</c:if>
</div>