Added recaptcha

This commit is contained in:
Katerina Iatropoulou 2018-04-12 10:12:32 +00:00
parent 56e1b3f7d2
commit e17be455fe
11 changed files with 409 additions and 142 deletions

View File

@ -4,9 +4,12 @@ import com.unboundid.ldap.sdk.LDAPException;
import eu.dnetlib.openaire.user.utils.EmailSender;
import eu.dnetlib.openaire.user.utils.LDAPActions;
import eu.dnetlib.openaire.user.utils.VerificationActions;
import eu.dnetlib.openaire.user.utils.VerifyRecaptcha;
import eu.dnetlib.openaire.usermanagement.utils.UrlConstructor;
import org.apache.commons.validator.routines.EmailValidator;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import javax.mail.MessagingException;
@ -25,12 +28,6 @@ import java.util.UUID;
public class ForgotPasswordServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
}
@Autowired
private LDAPActions ldapActions;
@ -40,66 +37,94 @@ public class ForgotPasswordServlet extends HttpServlet {
@Autowired
private EmailSender emailSender;
@Value("${google.recaptcha.secret}")
private String secret;
@Value("${google.recaptcha.key}")
private String sitekey;
private Logger logger = Logger.getLogger(ForgotPasswordServlet.class);
public void init(ServletConfig config) throws ServletException {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
config.getServletContext().setAttribute("sitekey", sitekey);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
String formEmail = request.getParameter("email").trim();
String gRecaptchaResponse = request.getParameter("g-recaptcha-response");
if (formEmail == null) {
request.getSession().setAttribute("message", "Error reading email.");
response.sendRedirect("./forgotPassword.jsp");
}
} else if (formEmail.isEmpty()) {
request.getSession().setAttribute("message", "Please enter your email.");
response.sendRedirect("./remindUsername.jsp");
try {
} else if (!EmailValidator.getInstance().isValid(formEmail)) {
request.getSession().setAttribute("message", "Please enter a valid email.");
response.sendRedirect("./remindUsername.jsp");
String username = ldapActions.getUsername(formEmail);
if (username == null || username.isEmpty()) {
request.getSession().setAttribute("message", "User does not exist.");
response.sendRedirect("./forgotPassword.jsp");
} else if (!VerifyRecaptcha.verify(gRecaptchaResponse, secret)) {
request.getSession().setAttribute("message", "You missed the reCAPTCHA validation!");
response.sendRedirect("./remindUsername.jsp");
} else {
UUID verificationCode = UUID.randomUUID();
Date creationDate = new Date();
} else {
Timestamp timestamp = new Timestamp(creationDate.getTime());
try {
if (!verificationActions.verificationEntryExists(username)) {
verificationActions.addVerificationEntry(username, verificationCode.toString(), timestamp);
String username = ldapActions.getUsername(formEmail);
if (username == null || username.isEmpty()) {
request.getSession().setAttribute("message", "User does not exist.");
response.sendRedirect("./forgotPassword.jsp");
} else {
verificationActions.updateVerificationEntry(username, verificationCode.toString(), timestamp);
UUID verificationCode = UUID.randomUUID();
Date creationDate = new Date();
Timestamp timestamp = new Timestamp(creationDate.getTime());
if (!verificationActions.verificationEntryExists(username)) {
verificationActions.addVerificationEntry(username, verificationCode.toString(), timestamp);
} else {
verificationActions.updateVerificationEntry(username, verificationCode.toString(), timestamp);
}
String resultPath = UrlConstructor.getRedirectUrl(request, "verify.jsp");
String verificationCodeMsg = "<p>Hello,</p>" +
"<p> A request has been made to reset your OpenAIRE account password. To reset your " +
"password, you will need to submit this verification code in order to verify that the " +
"request was legitimate.</p>" +
"<p> The verification code is " + verificationCode.toString() + "</p>" +
"Select the URL below and proceed with verification." +
"<p><a href=" + resultPath + ">" + resultPath + "</a></p>" +
"<p>Thank you</p>";
String verificationCodeSubject = "Your OpenAIRE password reset request";
emailSender.sendEmail(formEmail, verificationCodeSubject, verificationCodeMsg);
response.setContentType("text/html");
response.sendRedirect("./verify.jsp");
}
String resultPath = UrlConstructor.getRedirectUrl(request, "verify.jsp");
} catch (LDAPException ldape) {
logger.error("LDAP error", ldape);
response.sendRedirect(UrlConstructor.getRedirectUrl(request, "error.jsp"));
//response.sendRedirect("./error.jsp");
String verificationCodeMsg = "<p>Hello,</p>" +
"<p> A request has been made to reset your OpenAIRE account password. To reset your " +
"password, you will need to submit this verification code in order to verify that the " +
"request was legitimate.</p>" +
"<p> The verification code is " + verificationCode.toString() + "</p>" +
"Select the URL below and proceed with verification." +
"<p><a href=" + resultPath + ">" + resultPath + "</a></p>" +
"<p>Thank you</p>";
String verificationCodeSubject = "Your OpenAIRE password reset request";
emailSender.sendEmail(formEmail, verificationCodeSubject, verificationCodeMsg);
response.setContentType("text/html");
response.sendRedirect("./verify.jsp");
} catch (MessagingException e) {
logger.error("Error in sending email", e);
request.getSession().setAttribute("message", "Error sending email.");
response.sendRedirect("./forgotPassword.jsp");
}
} catch (LDAPException ldape) {
logger.error("LDAP error", ldape);
response.sendRedirect(UrlConstructor.getRedirectUrl(request, "error.jsp"));
//response.sendRedirect("./error.jsp");
} catch (MessagingException e) {
logger.error("Error in sending email", e);
request.getSession().setAttribute("message", "Error sending email.");
response.sendRedirect("./forgotPassword.jsp");
}
}

View File

@ -1,14 +1,20 @@
package eu.dnetlib.openaire.usermanagement;
import com.unboundid.ldap.sdk.LDAPException;
import eu.dnetlib.openaire.user.utils.EmailSender;
import org.apache.commons.validator.routines.EmailValidator;
import eu.dnetlib.openaire.user.utils.LDAPActions;
import eu.dnetlib.openaire.user.utils.VerificationActions;
import eu.dnetlib.openaire.user.utils.VerifyRecaptcha;
import eu.dnetlib.openaire.usermanagement.utils.UrlConstructor;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@ -25,12 +31,6 @@ import java.util.UUID;
*/
public class RegisterServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
}
@Autowired
private VerificationActions verificationActions;
@ -40,9 +40,23 @@ public class RegisterServlet extends HttpServlet {
@Autowired
private LDAPActions ldapActions;
private Logger logger = Logger.getLogger(RegisterServlet.class);
@Value("${google.recaptcha.secret}")
private String secret;
@Override
@Value("${google.recaptcha.key}")
private String sitekey;
public void init(ServletConfig config) throws ServletException {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
config.getServletContext().setAttribute("sitekey", sitekey);
}
private static Logger logger = Logger.getLogger(RegisterServlet.class);
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html");
PrintWriter printWriter = response.getWriter();
@ -55,12 +69,17 @@ public class RegisterServlet extends HttpServlet {
String confirmEmail = request.getParameter("email_conf").trim();
String password = request.getParameter("password");
String confirmPassword = request.getParameter("password_conf");
String gRecaptchaResponse = request.getParameter("g-recaptcha-response");
//System.out.println("RESPONSE " + gRecaptchaResponse);
if (organization == null){
logger.info("organization is null");
}
if (firstName != null && lastName != null && username != null &&
email.equals(confirmEmail) && password.equals(confirmPassword) ) {
if (firstName != null && lastName != null && username != null && email!= null &&
email.equals(confirmEmail) && password!= null && password.equals(confirmPassword) &&
!EmailValidator.getInstance().isValid(email) && isValidPassword(password) && VerifyRecaptcha.verify(gRecaptchaResponse, secret)) {
try {
@ -105,25 +124,7 @@ public class RegisterServlet extends HttpServlet {
if(!username.matches("^[a-zA-Z0-9\\.\\_\\-]{4,150}")) {
if (username.length() < 5) {
request.getSession().setAttribute("username_message", "Minimum username length 5 characters.");
logger.info("Minimum username length 5 characters.");
}
if (username.length() > 150) {
request.getSession().setAttribute("username_message", "Maximum username length 150 characters.");
logger.info("Maximum username length 150 characters.");
}
if (!username.matches("^[a-zA-Z0-9\\.\\_\\-]")) {
request.getSession().setAttribute("username_allowed_chars_message", "You can use letters, numbers, underscores, hyphens and periods.");
logger.info("Only letters, numbers, underscores, hyphens and periods.");
}
if (!username.matches("^[a-zA-Z0-9].*")) {
request.getSession().setAttribute("username_first_char_message", "The username must start with letter or digit.");
logger.info("The username must start with letter or digit.");
}
validateUsername(request, username);
}
@ -148,24 +149,144 @@ public class RegisterServlet extends HttpServlet {
}
request.getSession().setAttribute("first_name", firstName);
request.getSession().setAttribute("msg_first_name_error_display", "display:none");
request.getSession().setAttribute("last_name", lastName);
request.getSession().setAttribute("msg_last_name_error_display", "display:none");
request.getSession().setAttribute("organization", organization);
request.getSession().setAttribute("username", username);
request.getSession().setAttribute("email", email);
request.getSession().setAttribute("msg_email_error_display", "display:none" );
request.getSession().setAttribute("email_conf", confirmEmail);
request.getSession().setAttribute("msg_email_conf_error_display", "display:none");
request.getSession().setAttribute("msg_email_validation_error_display", "display:none");
request.getSession().setAttribute("msg_password_error_display", "display:none" );
request.getSession().setAttribute("msg_pass_conf_error_display", "display:none" );
request.getSession().setAttribute("msg_invalid_password_display", "display:none");
request.getSession().setAttribute("recaptcha_error_display", "display:none");
response.sendRedirect("./register.jsp");
}
} catch (Exception e) {
} catch (MessagingException e) {
logger.error("Error in sending email", e);
request.getSession().setAttribute("message","Error sending email");
response.sendRedirect(UrlConstructor.getRedirectUrl(request, "./remindUsername.jsp"));
//response.sendRedirect("./error.jsp");
//TODO better handling of these exceprions
}catch (Exception e) {
logger.error("LDAP error in creating user", e);
response.sendRedirect(UrlConstructor.getRedirectUrl(request, "error.jsp"));
//response.sendRedirect("./error.jsp");
}
} else {
request.getSession().setAttribute("first_name", firstName);
request.getSession().setAttribute("last_name", lastName);
request.getSession().setAttribute("organization", organization);
request.getSession().setAttribute("username", username);
request.getSession().setAttribute("email", email);
request.getSession().setAttribute("email_conf", confirmEmail);
if (firstName == null || firstName.isEmpty()) {
request.getSession().setAttribute("msg_first_name_error_display", "display:block" );
}
if (lastName == null || lastName.isEmpty()) {
request.getSession().setAttribute("msg_last_name_error_display", "display:block" );
}
if (username == null || username.isEmpty()) {
request.getSession().setAttribute("username_message", "Minimum username length 5 characters.");
logger.info("Username does not exist.");
} else {
validateUsername(request, username);
}
if (password == null || password.isEmpty()) {
request.getSession().setAttribute("msg_password_error_display", "display:block" );
}
if(!EmailValidator.getInstance().isValid(email)) {
request.getSession().setAttribute("msg_email_validation_error_display", "display:block");
}
if (!email.equals(confirmEmail)) {
request.getSession().setAttribute("msg_email_conf_error_display", "display:block" );
}
if (!password.equals(confirmPassword)){
request.getSession().setAttribute("msg_pass_conf_error_display", "display:block" );
}
if(!isValidPassword(password)) {
request.getSession().setAttribute("msg_invalid_password_display", "display:block");
}
if (!VerifyRecaptcha.verify(gRecaptchaResponse, secret)) {
request.getSession().setAttribute("recaptcha_error_display", "display:block" );
}
response.sendRedirect("./register.jsp");
}
printWriter.close();
}
private void validateUsername(HttpServletRequest request, String username) {
if (username.length() < 5) {
request.getSession().setAttribute("username_message", "Minimum username length 5 characters.");
logger.info("Minimum username length 5 characters.");
}
if (username.length() > 150) {
request.getSession().setAttribute("username_message", "Maximum username length 150 characters.");
logger.info("Maximum username length 150 characters.");
}
if (!username.matches("^[a-zA-Z0-9\\.\\_\\-]")) {
request.getSession().setAttribute("username_allowed_chars_message", "You can use letters, numbers, underscores, hyphens and periods.");
logger.info("Only letters, numbers, underscores, hyphens and periods.");
}
if (!username.matches("^[a-zA-Z0-9].*")) {
request.getSession().setAttribute("username_first_char_message", "The username must start with letter or digit.");
logger.info("The username must start with letter or digit.");
}
}
public static boolean isValidPassword(String password) {
/*
^ # start-of-string
(?=.*[0-9]) # a digit must occur at least once
(?=.*[a-z]) # a lower case letter must occur at least once
(?=.*[A-Z]) # an upper case letter must occur at least once
(?=.*[@#$%^&+=]) # a special character must occur at least once
(?=\S+$) # no whitespace allowed in the entire string
.{8,} # anything, at least eight places though
$ # end-of-string
*/
if (password.matches("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{6,}$")) {
logger.info("Valid password!");
return true;
}
logger.info("Not valid password!");
return false;
}
}

View File

@ -3,7 +3,9 @@ package eu.dnetlib.openaire.usermanagement;
import com.unboundid.ldap.sdk.LDAPException;
import eu.dnetlib.openaire.user.utils.EmailSender;
import eu.dnetlib.openaire.user.utils.LDAPActions;
import eu.dnetlib.openaire.user.utils.VerifyRecaptcha;
import eu.dnetlib.openaire.usermanagement.utils.UrlConstructor;
import org.apache.commons.validator.routines.EmailValidator;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -25,12 +27,6 @@ import java.io.IOException;
@Component
public class RemindUsernameServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
}
@Autowired
private LDAPActions ldapActions;
@ -40,52 +36,82 @@ public class RemindUsernameServlet extends HttpServlet {
@Value("${oidc.home}")
private String oidcHomeUrl;
private Logger logger = Logger.getLogger(RemindUsernameServlet.class);
@Value("${google.recaptcha.secret}")
private String secret;
@Value("${google.recaptcha.key}")
private String sitekey;
private static final Logger logger = Logger.getLogger(RemindUsernameServlet.class);
public void init(ServletConfig config) throws ServletException {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
config.getServletContext().setAttribute("sitekey", sitekey);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
String formEmail = request.getParameter("email").trim();
String gRecaptchaResponse = request.getParameter("g-recaptcha-response");
HttpSession session = request.getSession();
session.setAttribute("homeUrl", oidcHomeUrl);
if (formEmail == null){
if (formEmail == null) {
request.getSession().setAttribute("message", "Error reading email.");
response.sendRedirect("./remindUsername.jsp");
}
try{
String username = ldapActions.getUsername(formEmail);
if (username != null && !username.isEmpty()) {
} else if (formEmail.isEmpty()) {
request.getSession().setAttribute("message", "Please enter your email.");
response.sendRedirect("./remindUsername.jsp");
String verificationCodeMsg = "<p>Hello,</p>" +
"<p> A username reminder has been requested for your OpenAIRE account.</p>" +
"<p> Your username is "+ username + ".</p>" +
"<p> Thank you </p>";
} else if (!EmailValidator.getInstance().isValid(formEmail)) {
request.getSession().setAttribute("message", "Please enter a valid email.");
response.sendRedirect("./remindUsername.jsp");
String verificationCodeSubject = "Your OpenAIRE username";
} else if (!VerifyRecaptcha.verify(gRecaptchaResponse, secret)) {
request.getSession().setAttribute("message", "You missed the reCAPTCHA validation!");
response.sendRedirect("./remindUsername.jsp");
emailSender.sendEmail(formEmail, verificationCodeSubject, verificationCodeMsg);
} else {
response.sendRedirect(UrlConstructor.getRedirectUrl(request, "emailSuccess.jsp"));
//response.sendRedirect("./emailSuccess.jsp");
try {
String username = ldapActions.getUsername(formEmail);
if (username != null && !username.isEmpty()) {
} else {
request.getSession().setAttribute("message", "User not found");
response.sendRedirect("./remindUsername.jsp");
String verificationCodeMsg = "<p>Hello,</p>" +
"<p> A username reminder has been requested for your OpenAIRE account.</p>" +
"<p> Your username is " + username + ".</p>" +
"<p> Thank you </p>";
String verificationCodeSubject = "Your OpenAIRE username";
emailSender.sendEmail(formEmail, verificationCodeSubject, verificationCodeMsg);
response.sendRedirect(UrlConstructor.getRedirectUrl(request, "emailSuccess.jsp"));
//response.sendRedirect("./emailSuccess.jsp");
} else {
request.getSession().setAttribute("message", "User not found");
response.sendRedirect("./remindUsername.jsp");
}
} catch (LDAPException ldape) {
logger.error("Could not find user with email " + formEmail, ldape);
response.sendRedirect(UrlConstructor.getRedirectUrl(request, "error.jsp"));
//response.sendRedirect("./error.jsp");
} catch (MessagingException e) {
logger.error("Error in sending email", e);
request.getSession().setAttribute("message", "Error sending email");
response.sendRedirect(UrlConstructor.getRedirectUrl(request, "./remindUsername.jsp"));
//response.sendRedirect("./error.jsp");
}
} catch (LDAPException ldape) {
logger.error("Could not find user with email " + formEmail, ldape);
response.sendRedirect(UrlConstructor.getRedirectUrl(request, "error.jsp"));
//response.sendRedirect("./error.jsp");
} catch (MessagingException e) {
logger.error("Error in sending email", e);
response.sendRedirect(UrlConstructor.getRedirectUrl(request, "error.jsp"));
//response.sendRedirect("./error.jsp");
}
}
public String getOidcHomeUrl() {
@ -97,3 +123,5 @@ public class RemindUsernameServlet extends HttpServlet {
}
}

View File

@ -46,4 +46,5 @@ public class UrlConstructor {
return resultPath;
}
}

View File

@ -1,8 +1,13 @@
oidc.secret = U_gLOupYu2trYIOwfxGgZkkZoOHG_zGfaViOUsXcZ7qVQuF1rcJeQYKIDX1TY3z27CIoHaqq9ht2rmAiUmBRYQ
oidc.id = 24e83176-1312-4ba3-bc0b-ffeebea1603e
oidc.issuer = https://aai.openminted.eu/oidc/
oidc.id=767422b9-5461-4807-a80a-f9a2072d3a7d
oidc.secret=AMQtGlbTXNjwjhF0st28LmM6V0XypMdaVS7tJmGuYFlmH36iIv4t7tVqYuLYrNPkhnZ_GPUJvhymBhFupdgb6aU
oidc.issuer = https://aai.openaire.eu/oidc/
oidc.home = https://beta.services.openaire.eu/uoa-user-management/openid_connect_login
webbapp.front = https://beta.explore.openaire.eu/
oidc.home = http://rudie.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/openid_connect_login
#oidc.home = https://beta.services.openaire.eu/uoa-user-management/openid_connect_login
#webbapp.front = https://beta.explore.openaire.eu/
webbapp.front = http://scoobydoo.di.uoa.gr:4200
webbapp.front.path = /
webbapp.front.domain = .di.uoa.gr
webbapp.front.domain = .di.uoa.gr
google.recaptcha.secret = 6LfYrU8UAAAAADwrbImPvDo_XcxEZvrkkgMy9yU0
google.recaptcha.key = 6LfYrU8UAAAAAFsl3m2YhP1uavdmAdFEXBkoY_vd

View File

@ -12,8 +12,6 @@
<context:component-scan base-package="eu.dnetlib.openaire.usermanagement.*"/>
<context:annotation-config />
<import resource="classpath*:/eu/dnetlib/openaire/user/springContext-userManagementService.xml" />
<!--<bean id="webexpressionHandler"-->

View File

@ -1150,3 +1150,43 @@ color: black;
.list-horizontal-line > span:last-child {
border-right:none;
}
.msg_first_name_error {
display:none;
}
.msg_last_name_error {
display:none;
}
.msg_username_error {
display:none;
}
.msg_email_conf_error {
display:none;
}
.msg_email_error {
display:none;
}
.msg_password_error{
display:none;
}
.msg_pass_conf_error {
display:none;
}
.msg_email_validation_error {
display:none;
}
.msg_invalid_password {
display:none;
}
.recaptcha_error {
display:none;
}

View File

@ -8,10 +8,10 @@
<title>OpenAIRE - Forgot password</title>
<script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script>
<script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css">
<link rel="stylesheet" style="text/css" href="./css/aai-custom.css">
<script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body class="" style="">
<div class="uk-offcanvas-content uk-height-viewport">
@ -59,7 +59,9 @@
<span class="msg_email_validation_error uk-text-danger uk-text-small uk-float-left" style="display:none">Please enter a valid email.</span>
<input id="email" name="email" type="text" placeholder="Email" class="form-control"></div>
<div class="uk-margin uk-grid-small uk-child-width-auto uk-grid uk-text-left uk-grid-stack" uk-grid="">
<div class="uk-width-1-1 uk-grid-margin uk-first-column">RECAPTHA I AM NOT A ROBOT THING GOES HERE</div>
<div class="uk-width-1-1 uk-grid-margin uk-first-column">
<div class="g-recaptcha" data-sitekey=${applicationScope.sitekey}></div>
</div>
<div class="uk-width-1-1 uk-grid-margin uk-first-column">
<button type="submit" class="uk-button uk-button-primary" onclick="return validateForm();">Submit</button>
</div>

View File

@ -12,7 +12,6 @@ function validateForm() {
var isEmailFilled = false;
var isPasswordFilled = false;
// Check if first name is filled
if($("#first_name").val() != undefined) {
if($.trim($("#first_name").val()).length <= 0) {
@ -155,6 +154,15 @@ function validateForm() {
}
}
var recaptcha = grecaptcha.getResponse();
if (recaptcha!=null && recaptcha !== undefined && recaptcha.length > 0) {
$(".recaptcha_error").hide();
} else {
hasError = true;
$(".recaptcha_error").show();
}
return !hasError;
}
@ -164,7 +172,7 @@ function validateEmail(email) {
}
function validatePassword(password) {
var pattern = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}$/;
var pattern = /^(?=.*[^a-zA-Z])(?=.*[a-z])(?=.*[A-Z])\S{6,}$/;
return pattern.test(password);
}

View File

@ -22,6 +22,7 @@
<link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css">
<link rel="stylesheet" style="text/css" href="./css/aai-custom.css">
<script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body class="" style="">
<div class="uk-offcanvas-content uk-height-viewport">
@ -61,13 +62,17 @@
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
<div class="alert alert-success" aria-hidden="true" style="display: none;"></div>
<div class="alert alert-danger" aria-hidden="true" style="display: none;"></div>
<span id="server_error" class="uk-text-danger uk-text-small uk-float-left">${message}</span>
<c:remove var="message" scope="session" />
<div class="form-group">
<span class="msg_first_name_error uk-text-danger uk-text-small uk-float-left" style="display:none">Please enter your first name.</span>
<span class="msg_first_name_error uk-text-danger uk-text-small uk-float-left" style='${msg_first_name_error_display}'>Please enter your first name.</span>
<input id="first_name" name="first_name" type="text" placeholder="First name (*)" class="form-control" value=${first_name}></div>
<c:remove var="msg_first_name_error_display" scope="session" />
<c:remove var="first_name" scope="session" />
<div class="form-group">
<span class="msg_last_name_error uk-text-danger uk-text-small uk-float-left" style="display:none">Please enter your last name.</span>
<span class="msg_last_name_error uk-text-danger uk-text-small uk-float-left" style="${msg_last_name_error_display}">Please enter your last name.</span>
<input id="last_name" name="last_name" type="text" placeholder="Last name (*)" class="form-control" value=${last_name}></div>
<c:remove var="msg_last_name_error_display" scope="session" />
<c:remove var="last_name" scope="session" />
<div class="form-group">
<input id="organization" name="organization" type="text" placeholder="Affiliation / Organization:" class="form-control" value=${organization}></div>
@ -87,30 +92,42 @@
<input id="username" name="username" type="text" placeholder="Username (*)" class="form-control" value=${username}></div>
<c:remove var="username" scope="session" />
<div class="form-group">
<span class="msg_email_error uk-text-danger uk-text-small uk-float-left" style="display:none">Please enter your email.</span>
<span class="msg_email_validation_error uk-text-danger uk-text-small uk-float-left" style="display:none">Please enter a valid email.</span>
<span class="msg_email_conf_error uk-text-danger uk-text-small uk-float-left" style="display:none">These emails don't match.</span>
<span class="msg_email_error uk-text-danger uk-text-small uk-float-left" style="${msg_email_error_display}">Please enter your email.</span>
<span class="msg_email_validation_error uk-text-danger uk-text-small uk-float-left" style="${msg_email_validation_error_display}">Please enter a valid email.</span>
<span class="msg_email_conf_error uk-text-danger uk-text-small uk-float-left" style="${msg_email_conf_error_display}">These emails don't match.</span>
<span id="email_server_error" class="uk-text-danger uk-text-small uk-float-left">${email_message}</span>
<c:remove var="msg_email_conf_error_display" scope="session" />
<c:remove var="msg_email_validation_error_display" scope="session" />
<c:remove var="email_message" scope="session" />
<input id="email" name="email" type="text" placeholder="Email (*)" class="form-control" value=${email}></div>
<c:remove var="email" scope="session" />
<c:remove var="msg_email_error_display" scope="session" />
<div class="form-group">
<input id="email_conf" name="email_conf" type="text" placeholder="Confirm email (*)" class="form-control" value=${email_conf}></div>
<c:remove var="email_conf" scope="session" />
<div class="form-group">
<span class="msg_password_error uk-text-danger uk-text-small uk-float-left" style="display:none">Please enter your password.</span>
<span class="msg_pass_conf_error uk-text-danger uk-text-small uk-float-left" style="display:none">These passwords don't match.</span>
<p><span class="msg_please_add uk-text-danger uk-text-small uk-float-left" style="display:none">Please add: &nbsp</span></p>
<span class="msg_password_error uk-text-danger uk-text-small uk-float-left" style="${msg_password_error_display}">Please enter your password.</span>
<span class="msg_pass_conf_error uk-text-danger uk-text-small uk-float-left" style="${msg_pass_conf_error_display}">These passwords don't match.</span>
<p>
<span class="msg_whitespace uk-text-danger uk-text-small uk-float-left" style="display:none">White space is not allowed</span>
<span class="msg_please_add uk-text-danger uk-text-small uk-float-left" style="display:none">Please add: &nbsp</span></p>
<span class="msg_lowercase_letter uk-text-danger uk-text-small uk-float-left" style="display:none">A lowercase letter. &nbsp</span>
<span class="msg_capital_letter uk-text-danger uk-text-small uk-float-left" style="display:none">A capital (uppercase) letter. &nbsp </span>
<span class="msg_number uk-text-danger uk-text-small uk-float-left" style="display:none">A number. &nbsp</span>
<span class="msg_lenght uk-text-danger uk-text-small uk-float-left" style="display:none">Minimum 6 characters. &nbsp</span>
<span class="msg_lenght uk-text-danger uk-text-small uk-float-left" style="display:none">Minimum 6 characters (no white space allowed). &nbsp</span>
<span class="msg_invalid_password uk-text-danger uk-text-small uk-float-left" style="${msg_invalid_password_display}">The password must
contain a lowercase letter, a capital (uppercase) letter, a number and must be at least 6 characters long. White space character is not allowed.</span>
<input id="password" name="password" type="password" placeholder="Password" class="form-control"></div>
<c:remove var="msg_pass_conf_error_display" scope="session" />
<c:remove var="msg_password_error_display" scope="session" />
<c:remove var="msg_invalid_password_display" scope="session" />
<div class="form-group">
<input id="password_conf" name="password_conf" type="password" placeholder="Confirm password" class="form-control"></div>
<div class="uk-margin uk-grid-small uk-child-width-auto uk-grid uk-text-left uk-grid-stack" uk-grid="">
<div class="uk-width-1-1 uk-text-meta uk-text-danger uk-first-column">(*) Required fields</div>
<div class="uk-width-1-1 uk-grid-margin uk-first-column">RECAPTHA I AM NOT A ROBOT THING GOES HERE</div>
<span class="uk-text-danger uk-text-small recaptcha_error" style="${recaptcha_error_display}">You missed the reCAPTCHA validation!</span>
<c:remove var="recaptcha_error_display" scope="session" />
<div class="g-recaptcha" data-sitekey=${applicationScope.sitekey}></div>
<div class="uk-width-1-1 uk-grid-margin uk-first-column">
<button type="submit" class="uk-button uk-button-primary" onclick="return validateForm();">Register</button>
</div>
@ -119,14 +136,23 @@
</div>
<!-- END OF REGISTER FORM -->
<script>
var myInput = document.getElementById("password");
var usernameInput = document.getElementById("username");
//var myEmailInput = document.getElementById("email");
$("#password").focusin(function () {
$(".msg_invalid_password").fadeOut();
});
// When the user starts to type something inside the password field
myInput.onkeyup = function() {
if (/\s/g.test(myInput.value)) {
$("msg_whitespace").fadeIn();
} else {
$("msg_whitespace").fadeOut();
}
// Validate lowercase letters
var lowerCaseLetters = /[a-z]/g;
if (myInput.value.match(lowerCaseLetters)) {
@ -302,17 +328,27 @@
</div>
<!-- CONTENT ENDS HERE -->
<!-- FOOTER STARTS HERE-->
<div class="custom-footer">
<div class="uk-section-primary uk-section uk-section-small uk-padding-remove-bottom">
<div class="custom-footer" style="z-index: 200;">
<div class="uk-section-primary uk-section uk-section-small">
<div class="uk-container">
<div class="uk-grid-margin uk-grid uk-grid-stack" uk-grid="">
<div class="uk-width-expand@m uk-light uk-first-column">
FOOTER???
</div>
<div class="uk-grid-margin uk-grid uk-grid-stack" uk-grid="">
<div class="uk-width-1-1@m uk-first-column">
<div class="uk-margin uk-margin-remove-top uk-margin-remove-bottom uk-text-center">
<img alt="OpenAIRE" class="el-image" src="./images/Logo_Horizontal_white_small.png">
</div>
<div class="footer-license uk-margin uk-margin-remove-bottom uk-text-center uk-text-lead">
<div><a href="http://creativecommons.org/licenses/by/4.0/" target="_blank" rel="license"><img alt="Creative" src="./images/80x15.png" style="height: auto; max-width: 100%; vertical-align: middle;"></a>&nbsp;UNLESS OTHERWISE INDICATED, ALL MATERIALS CREATED BY THE OPENAIRE CONSORTIUM ARE LICENSED UNDER A&nbsp;<a href="http://creativecommons.org/licenses/by/4.0/" rel="license">CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE</a>.</div>
<div>OPENAIRE IS POWERED BY&nbsp;<a href="http://www.d-net.research-infrastructures.eu/">D-NET</a>.</div>
</div>
<div class="uk-margin uk-margin-remove-top uk-margin-remove-bottom uk-text-right">
<a class="uk-totop uk-icon" href="#" uk-scroll="" uk-totop="">
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -9,10 +9,11 @@
<title>OpenAIRE - Username Reminder</title>
<script src="./js/jquery.js"></script>
<script src="./js/uikit.js"></script>
<script src="./js/validation.js"></script>
<link rel="stylesheet" style="text/css" href="./css/theme.css">
<link rel="stylesheet" style="text/css" href="./css/custom.css">
<link rel="stylesheet" style="text/css" href="./css/aai-custom.css"></head>
<link rel="stylesheet" style="text/css" href="./css/aai-custom.css">
<script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body class="" style="">
<div class="uk-offcanvas-content uk-height-viewport">
<!-- MENU STARTS HERE -->
@ -59,7 +60,9 @@
<span class="msg_email_validation_error uk-text-danger uk-text-small uk-float-left" style="display:none">Please enter a valid email.</span>
<input id="email" name="email" type="text" placeholder="Email" class="form-control"></div>
<div class="uk-margin uk-grid-small uk-child-width-auto uk-grid uk-text-left uk-grid-stack" uk-grid="">
<div class="uk-width-1-1 uk-grid-margin uk-first-column">RECAPTHA I AM NOT A ROBOT THING GOES HERE</div>
<div class="uk-width-1-1 uk-grid-margin uk-first-column">
<div class="g-recaptcha" data-sitekey=${applicationScope.sitekey}></div>
</div>
<div class="uk-width-1-1 uk-grid-margin uk-first-column">
<button type="submit" class="uk-button uk-button-primary" onclick="return validateForm();">Submit</button>
</div>