diff --git a/.gitignore b/.gitignore index 516e6715..8bd6b864 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ wisemapping.ipr wisemapping.iws wisemapping.iml wisemapping.ids -wise-webapp/wisemapping.log* +*/wisemapping.log* */.DS_Store .DS_Store target diff --git a/wise-webapp/pom.xml b/wise-webapp/pom.xml index ae3a712a..847dfb70 100644 --- a/wise-webapp/pom.xml +++ b/wise-webapp/pom.xml @@ -193,12 +193,6 @@ 1.0.1B runtime - - com.octo.captcha - jcaptcha - 1.0 - compile - org.springframework spring-jdbc @@ -308,6 +302,17 @@ 2.10.0 compile + + net.tanesha.recaptcha4j + recaptcha4j + 0.0.7 + compile + + + org.slf4j + slf4j-log4j12 + 1.2 + diff --git a/wise-webapp/src/main/java/com/wisemapping/controller/CaptchaController.java b/wise-webapp/src/main/java/com/wisemapping/controller/CaptchaController.java deleted file mode 100644 index 14fbb5a5..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/controller/CaptchaController.java +++ /dev/null @@ -1,93 +0,0 @@ -/* -* Copyright [2011] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.controller; - -import java.awt.image.BufferedImage; -import java.io.ByteArrayOutputStream; - -import javax.servlet.ServletOutputStream; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.Controller; - -import com.octo.captcha.service.image.ImageCaptchaService; - -import com.sun.image.codec.jpeg.JPEGCodec; -import com.sun.image.codec.jpeg.JPEGImageEncoder; - -public class CaptchaController - implements Controller, InitializingBean -{ - private ImageCaptchaService captchaService; - - public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) - throws Exception - { - - byte[] captchaChallengeAsJpeg; - // the output stream to render the captcha image as jpeg into - final ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream(); - - // get the session id that will identify the generated captcha. - //the same id must be used to validate the response, the session id is a good candidate! - final String captchaId = request.getSession().getId(); - - // call the ImageCaptchaService getChallenge method - final BufferedImage challenge = captchaService.getImageChallengeForID(captchaId,request.getLocale()); - - // a jpeg encoder - final JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream); - jpegEncoder.encode(challenge); - - captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); - - // flush it in the response - response.setHeader("Cache-Control", "no-store"); - response.setHeader("Pragma", "no-cache"); - response.setDateHeader("Expires", 0); - response.setContentType("image/jpeg"); - final ServletOutputStream responseOutputStream = response.getOutputStream(); - responseOutputStream.write(captchaChallengeAsJpeg); - responseOutputStream.flush(); - responseOutputStream.close(); - return null; - } - - /** Set captcha service - * @param captchaService The captchaService to set. - */ - public void setCaptchaService(ImageCaptchaService captchaService) { - this.captchaService = captchaService; - } - - /** - * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() - */ - public void afterPropertiesSet() - throws Exception - { - if(captchaService == null){ - throw new RuntimeException("captcha service wasn`t set!"); - } - } -} diff --git a/wise-webapp/src/main/java/com/wisemapping/controller/CaptchaFormController.java b/wise-webapp/src/main/java/com/wisemapping/controller/CaptchaFormController.java deleted file mode 100644 index 5d8247e6..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/controller/CaptchaFormController.java +++ /dev/null @@ -1,109 +0,0 @@ -/* -* Copyright [2011] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.controller; - -import com.octo.captcha.service.CaptchaServiceException; -import com.octo.captcha.service.image.ImageCaptchaService; -import org.springframework.validation.BindException; -import org.springframework.web.servlet.mvc.SimpleFormController; - -import javax.servlet.http.HttpServletRequest; - -/** - * Convenient superclass for form controller implementations which need - * CAPTCHA support. - */ -public class CaptchaFormController extends SimpleFormController { - /** - * Default paramter name for CAPTCHA response in {@link HttpServletRequest} - */ - private static final String DEFAULT_CAPTCHA_RESPONSE_PARAMETER_NAME = "j_captcha_response"; - - protected ImageCaptchaService captchaService; - protected String captchaResponseParameterName = DEFAULT_CAPTCHA_RESPONSE_PARAMETER_NAME; - - /** - * Delegates request to CAPTCHA validation, subclasses which overrides this - * method must manually call {@link #validateCaptcha(HttpServletRequest,BindException)} - * or explicitly call super method. - * - * @see #validateCaptcha(HttpServletRequest,BindException) - * @see org.springframework.web.servlet.mvc.BaseCommandController#onBindAndValidate(javax.servlet.http.HttpServletRequest,java.lang.Object,org.springframework.validation.BindException) - */ - @Override - protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors) throws Exception { - validateCaptcha(request, errors); - } - - /** - * Validate CAPTCHA response, if response isn`t valid creates new error object - * and put him to errors holder. - * - * @param request current servlet request - * @param errors errors holder - */ - protected void validateCaptcha(HttpServletRequest request, BindException errors) { - boolean isResponseCorrect = false; - - //remenber that we need an id to validate! - String captchaId = request.getSession().getId(); - //retrieve the response - String response = request.getParameter(captchaResponseParameterName); - //validate response - try { - if (response != null) { - isResponseCorrect = - captchaService.validateResponseForID(captchaId, response); - } - } catch (CaptchaServiceException e) { - //should not happen, may be thrown if the id is not valid - } - - if (!isResponseCorrect) { - //prepare object error, captcha response isn`t valid -// String objectName = "Captcha"; -// String[] codes = {"invalid"}; -// Object[] arguments = {}; -// String defaultMessage = "Wrong control text!"; -// ObjectError oe = new ObjectError(objectName, codes, arguments, defaultMessage); -// -// errors.addError(oe); - errors.rejectValue("captcha", Messages.CAPTCHA_ERROR); - } - } - - /** - * Set captcha service - * - * @param captchaService the captchaService to set. - */ - public void setCaptchaService(ImageCaptchaService captchaService) { - this.captchaService = captchaService; - } - - /** - * Set paramter name for CAPTCHA response in {@link HttpServletRequest} - * - * @param captchaResponseParameterName the captchaResponseParameterName to set. - */ - public void setCaptchaResponseParameterName(String captchaResponseParameterName) { - this.captchaResponseParameterName = captchaResponseParameterName; - } -} - diff --git a/wise-webapp/src/main/java/com/wisemapping/controller/UserController.java b/wise-webapp/src/main/java/com/wisemapping/controller/UserController.java deleted file mode 100644 index 4de7b860..00000000 --- a/wise-webapp/src/main/java/com/wisemapping/controller/UserController.java +++ /dev/null @@ -1,71 +0,0 @@ -/* -* Copyright [2011] [wisemapping] -* -* Licensed under WiseMapping Public License, Version 1.0 (the "License"). -* It is basically the Apache License, Version 2.0 (the "License") plus the -* "powered by wisemapping" text requirement on every single page; -* you may not use this file except in compliance with the License. -* You may obtain a copy of the license at -* -* http://www.wisemapping.org/license -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.wisemapping.controller; - -import com.wisemapping.model.User; -import com.wisemapping.service.UserService; -import com.wisemapping.view.UserBean; -import com.wisemapping.exceptions.WiseMappingException; -import org.springframework.web.servlet.ModelAndView; - -import java.util.HashMap; -import java.util.Map; - -public class UserController - extends CaptchaFormController { - - //~ Instance fields ...................................................................................... - - private boolean emailConfirmEnabled; - private UserService userService; - - //~ Methods .............................................................................................. - - - public boolean isEmailConfirmEnabled() { - return emailConfirmEnabled; - } - - public void setEmailConfirmEnabled(boolean emailConfirmEnabled) { - this.emailConfirmEnabled = emailConfirmEnabled; - } - - public ModelAndView onSubmit(Object command) throws WiseMappingException { - final UserBean userBean = ((UserBean) command); - - if (userBean != null) { - 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); - } - - final Map model = new HashMap(); - model.put("confirmByEmail",emailConfirmEnabled); - return new ModelAndView(getSuccessView(),model); - } - - public void setUserService(UserService userService) { - this.userService = userService; - } -} diff --git a/wise-webapp/src/main/java/com/wisemapping/controller/UserRegistrationController.java b/wise-webapp/src/main/java/com/wisemapping/controller/UserRegistrationController.java new file mode 100644 index 00000000..e9279c5f --- /dev/null +++ b/wise-webapp/src/main/java/com/wisemapping/controller/UserRegistrationController.java @@ -0,0 +1,132 @@ +/* +* Copyright [2011] [wisemapping] +* +* Licensed under WiseMapping Public License, Version 1.0 (the "License"). +* It is basically the Apache License, Version 2.0 (the "License") plus the +* "powered by wisemapping" text requirement on every single page; +* you may not use this file except in compliance with the License. +* You may obtain a copy of the license at +* +* http://www.wisemapping.org/license +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.wisemapping.controller; + +import com.wisemapping.model.User; +import com.wisemapping.service.UserService; +import com.wisemapping.view.UserBean; +import com.wisemapping.exceptions.WiseMappingException; +import net.tanesha.recaptcha.ReCaptcha; +import net.tanesha.recaptcha.ReCaptchaResponse; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.springframework.validation.BindException; +import org.springframework.validation.ObjectError; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +public class UserRegistrationController + extends BaseSimpleFormController { + + //~ Instance fields ...................................................................................... + + private boolean emailConfirmEnabled; + private UserService userService; + private ReCaptcha captchaService; + private boolean captchaEnabled; + + //~ Methods .............................................................................................. + + + public boolean isEmailConfirmEnabled() { + return emailConfirmEnabled; + } + + public void setEmailConfirmEnabled(boolean emailConfirmEnabled) { + this.emailConfirmEnabled = emailConfirmEnabled; + } + + public ModelAndView onSubmit(@Nullable Object command) throws WiseMappingException { + final UserBean userBean = ((UserBean) command); + + if (userBean != null) { + 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); + } + + final Map model = new HashMap(); + model.put("confirmByEmail", emailConfirmEnabled); + return new ModelAndView(getSuccessView(), model); + } + + public void setUserService(UserService userService) { + this.userService = userService; + } + + public void setCaptchaService(@NotNull final ReCaptcha captchaService) { + this.captchaService = captchaService; + } + + public ReCaptcha getCaptchaService() { + return captchaService; + } + + public boolean isCaptchaEnabled() { + return captchaEnabled; + } + + public void setCaptchaEnabled(boolean captchaEnabled) { + this.captchaEnabled = captchaEnabled; + } + + @Override + protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors) throws Exception { + + super.onBindAndValidate(request, command, errors); + // If captcha is enabled, generate it ... + if (isCaptchaEnabled()) { + + 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()) { + errors.rejectValue("captcha", Messages.CAPTCHA_ERROR); + } + } + } + + @Override + protected ModelAndView showForm(HttpServletRequest request, HttpServletResponse response, BindException bindException) throws Exception { + final ModelAndView modelAndView = super.showForm(request, response, bindException); + + // If captcha is enabled, generate it ... + if (isCaptchaEnabled()) { + 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 modelAndView; + } + +} diff --git a/wise-webapp/src/main/java/com/wisemapping/model/User.java b/wise-webapp/src/main/java/com/wisemapping/model/User.java index 6208e3e5..7bebde47 100644 --- a/wise-webapp/src/main/java/com/wisemapping/model/User.java +++ b/wise-webapp/src/main/java/com/wisemapping/model/User.java @@ -107,12 +107,12 @@ public class User final User user = (User) o; - if (!getEmail().equals(user.getEmail())) return false; + final String email = getEmail(); + if (email != null ? !email.equals(user.getEmail()) : user.getEmail() != null) return false; if (firstname != null ? !firstname.equals(user.firstname) : user.firstname != null) return false; if (lastname != null ? !lastname.equals(user.lastname) : user.lastname != null) return false; - if (username != null ? !username.equals(user.username) : user.username != null) return false; + return !(username != null ? !username.equals(user.username) : user.username != null); - return true; } public int hashCode() { @@ -120,7 +120,7 @@ public class User result = (firstname != null ? firstname.hashCode() : 0); result = 29 * result + (lastname != null ? lastname.hashCode() : 0); result = 29 * result + (password != null ? password.hashCode() : 0); - result = 29 * result + getEmail().hashCode(); + result = 29 * result + (getEmail() != null ? getEmail().hashCode() : 0); return result; } diff --git a/wise-webapp/src/main/java/com/wisemapping/validator/UserValidator.java b/wise-webapp/src/main/java/com/wisemapping/validator/UserValidator.java index 42b476bd..e3919ba4 100644 --- a/wise-webapp/src/main/java/com/wisemapping/validator/UserValidator.java +++ b/wise-webapp/src/main/java/com/wisemapping/validator/UserValidator.java @@ -22,6 +22,9 @@ import com.wisemapping.controller.Messages; import com.wisemapping.service.UserService; import com.wisemapping.view.UserBean; import com.wisemapping.model.Constants; +import net.tanesha.recaptcha.ReCaptcha; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; @@ -30,12 +33,14 @@ public class UserValidator implements Validator { private UserService userService; + private ReCaptcha captchaService; + public boolean supports(final Class clazz) { return clazz.equals(UserBean.class); } - public void validate(Object obj, Errors errors) { + public void validate(@Nullable Object obj, @NotNull Errors errors) { UserBean user = (UserBean) obj; if (user == null) { errors.rejectValue("user", "error.not-specified"); @@ -65,30 +70,30 @@ public class UserValidator ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", Messages.FIELD_REQUIRED); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "retypePassword", Messages.FIELD_REQUIRED); ValidatorUtils.rejectIfExceeded(errors, - "firstname", - "The firstname must have less than "+ Constants.MAX_USER_FIRSTNAME_LENGTH + " characters.", - user.getFirstname(), - Constants.MAX_USER_FIRSTNAME_LENGTH); + "firstname", + "The firstname must have less than " + Constants.MAX_USER_FIRSTNAME_LENGTH + " characters.", + user.getFirstname(), + Constants.MAX_USER_FIRSTNAME_LENGTH); ValidatorUtils.rejectIfExceeded(errors, - "lastname", - "The lastname must have less than "+ Constants.MAX_USER_LASTNAME_LENGTH + " characters.", - user.getLastname(), - Constants.MAX_USER_LASTNAME_LENGTH); + "lastname", + "The lastname must have less than " + Constants.MAX_USER_LASTNAME_LENGTH + " characters.", + user.getLastname(), + Constants.MAX_USER_LASTNAME_LENGTH); ValidatorUtils.rejectIfExceeded(errors, - "username", - "The username must have less than "+ Constants.MAX_USER_USERNAME_LENGTH + " characters.", - username, - Constants.MAX_USER_USERNAME_LENGTH); + "username", + "The username must have less than " + Constants.MAX_USER_USERNAME_LENGTH + " characters.", + username, + Constants.MAX_USER_USERNAME_LENGTH); ValidatorUtils.rejectIfExceeded(errors, - "password", - "The password must have less than "+ Constants.MAX_USER_PASSWORD_LENGTH + " characters.", - user.getPassword(), - Constants.MAX_USER_PASSWORD_LENGTH); + "password", + "The password must have less than " + Constants.MAX_USER_PASSWORD_LENGTH + " characters.", + user.getPassword(), + Constants.MAX_USER_PASSWORD_LENGTH); ValidatorUtils.rejectIfExceeded(errors, - "retypePassword", - "The retypePassword must have less than "+ Constants.MAX_USER_PASSWORD_LENGTH + " characters.", - user.getRetypePassword(), - Constants.MAX_USER_PASSWORD_LENGTH); + "retypePassword", + "The retypePassword must have less than " + Constants.MAX_USER_PASSWORD_LENGTH + " characters.", + user.getRetypePassword(), + Constants.MAX_USER_PASSWORD_LENGTH); final String password = user.getPassword(); if (password != null && !password.equals(user.getRetypePassword())) { @@ -100,4 +105,12 @@ public class UserValidator public void setUserService(UserService userService) { this.userService = userService; } + + public void setCaptchaService(@NotNull final ReCaptcha captchaService) { + this.captchaService = captchaService; + } + + public ReCaptcha getCaptchaService() { + return captchaService; + } } \ No newline at end of file diff --git a/wise-webapp/src/main/webapp/WEB-INF/app.properties b/wise-webapp/src/main/webapp/WEB-INF/app.properties index ef1e9b55..c5e02bf9 100755 --- a/wise-webapp/src/main/webapp/WEB-INF/app.properties +++ b/wise-webapp/src/main/webapp/WEB-INF/app.properties @@ -44,6 +44,7 @@ database.password= #------------------------ # GMAIL SMTP Configuration #------------------------ +mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory mail.smtp.socketFactory.port=587 mail.smtp.auth = true mail.host=smtp.gmail.com @@ -54,19 +55,28 @@ mail.smtp.starttls.enable=true #------------------------ # Domain address #------------------------ - mail.registrationEmail=root@localhost mail.siteEmail=root@localhost +################################################################################## +# Users Registration Configuration +################################################################################## + +# Enable/Disable user registration confirmation by e-mail. If it's enabled, mail must be configured. +registration.email.enabled = false + +# Enable captcha confirmation +registration.recaptcha.enabled = false + +# ReCaptcha is the default captcha. Public and private keys are required. +# More Info: http://www.google.com/recaptcha +registration.recaptcha.privateKey = +registration.recaptcha.publicKey = ################################################################################## # Site configuration ################################################################################## -# Enable/Disable user registration confirmation by e-mail. If it's enabled, mail must be configured. -user.confirm.registration=false - # Site administration user. This user will have special permissions for operations such as removing users, set password # etc. admin.user = admin@wisemapping.org - diff --git a/wise-webapp/src/main/webapp/WEB-INF/classes/log4j.properties b/wise-webapp/src/main/webapp/WEB-INF/classes/log4j.properties index 69310dd9..8abef6ba 100644 --- a/wise-webapp/src/main/webapp/WEB-INF/classes/log4j.properties +++ b/wise-webapp/src/main/webapp/WEB-INF/classes/log4j.properties @@ -1,6 +1,6 @@ log4j.rootLogger=WARN, stdout, R log4j.logger.com.wisemapping=WARN,stdout,R -log4j.logger.org.springframework=DEBUG,stdout,R +log4j.logger.org.springframework=WARN,stdout,R log4j.logger.org.codehaus.jackson=WARN,stdout,R # Stdout logger � diff --git a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-servlet.xml b/wise-webapp/src/main/webapp/WEB-INF/wisemapping-servlet.xml index 8b6b8860..7d14529a 100644 --- a/wise-webapp/src/main/webapp/WEB-INF/wisemapping-servlet.xml +++ b/wise-webapp/src/main/webapp/WEB-INF/wisemapping-servlet.xml @@ -116,10 +116,10 @@ + - - + @@ -127,7 +127,9 @@ - + + + @@ -275,10 +277,6 @@ - - - - @@ -337,5 +335,9 @@ - + + + + + \ No newline at end of file diff --git a/wise-webapp/src/main/webapp/jsp/login.jsp b/wise-webapp/src/main/webapp/jsp/login.jsp index 8b7cefe5..fd155399 100644 --- a/wise-webapp/src/main/webapp/jsp/login.jsp +++ b/wise-webapp/src/main/webapp/jsp/login.jsp @@ -48,8 +48,7 @@ - - : + : @@ -57,8 +56,7 @@ - - : + : diff --git a/wise-webapp/src/main/webapp/jsp/mindmapDetail.jsp b/wise-webapp/src/main/webapp/jsp/mindmapDetail.jsp index eb815a08..f3906e3d 100644 --- a/wise-webapp/src/main/webapp/jsp/mindmapDetail.jsp +++ b/wise-webapp/src/main/webapp/jsp/mindmapDetail.jsp @@ -1,19 +1,6 @@ <%@ include file="/jsp/init.jsp" %> <%--@elvariable id="wisemapDetail" type="com.wisemapping.view.MindMapBean"--%> - - diff --git a/wise-webapp/src/main/webapp/jsp/userRegistration.jsp b/wise-webapp/src/main/webapp/jsp/userRegistration.jsp index 0c29d68e..a6873fa0 100644 --- a/wise-webapp/src/main/webapp/jsp/userRegistration.jsp +++ b/wise-webapp/src/main/webapp/jsp/userRegistration.jsp @@ -1,139 +1,117 @@ <%@ include file="/jsp/init.jsp" %> -
-
-

- -

+
+

+ +

-

- -

- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- * - - : - - - -
- * - - : - - - -
- * - - : - - - -
- * - - : - - - -
- * - - : - - - -
- * - - : - - - -
- * - - : - -

- -

-
-
- -
- - : - - - - - .
-
  - -
 " id="submitButton" class="btn-primary"> - " - onclick="window.location=''" class="btn-secondary"> -
-
-
+

+ +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ * + : + + + +
+ * + : + + + +
+ * + : + + + +
+ * + : + + + +
+ * + : + + + +
+ * + : + + + +
+ + + ${requestScope.captchaHtml} +
+ + + + + + .
+
  + +
 " id="submitButton" + class="btn-primary"> + " + onclick="window.location=''" class="btn-secondary"> +
+
+