Skip to content
Snippets Groups Projects
Commit e3b50e4a authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Added first time storage of user and receipt message

parent 6dc874e7
No related branches found
No related tags found
No related merge requests found
package no.bioforsk.vips.logic.controller.servlet; package no.bioforsk.vips.logic.controller.servlet;
import java.io.IOException; import java.io.IOException;
import java.util.HashSet;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import no.bioforsk.vips.logic.entity.Organization;
import no.bioforsk.vips.logic.entity.UserAuthentication; import no.bioforsk.vips.logic.entity.UserAuthentication;
import no.bioforsk.vips.logic.entity.UserAuthenticationType; import no.bioforsk.vips.logic.entity.UserAuthenticationType;
import no.bioforsk.vips.logic.entity.VipsLogicUser; import no.bioforsk.vips.logic.entity.VipsLogicUser;
import no.bioforsk.vips.logic.i18n.SessionLocaleUtil;
import no.bioforsk.vips.logic.util.Globals;
import no.bioforsk.vips.logic.util.SessionControllerGetter;
import no.bioforsk.vips.util.MD5Encrypter;
import no.bioforsk.vips.util.ServletUtil; import no.bioforsk.vips.util.ServletUtil;
import no.bioforsk.web.forms.FormField;
import no.bioforsk.web.forms.FormValidation; import no.bioforsk.web.forms.FormValidation;
import no.bioforsk.web.forms.FormValidator; import no.bioforsk.web.forms.FormValidator;
...@@ -93,81 +100,56 @@ public class UserControllerServlet extends HttpServlet { ...@@ -93,81 +100,56 @@ public class UserControllerServlet extends HttpServlet {
catch(Exception e) catch(Exception e)
{ {
request.getRequestDispatcher("/login.ftl").forward(request, response); request.getRequestDispatcher("/login.ftl").forward(request, response);
return;
} }
if(userAuthenticationType.getUserAuthenticationTypeId().equals(UserAuthenticationType.TYPE_PASSWORD)) if(userAuthenticationType.getUserAuthenticationTypeId().equals(UserAuthenticationType.TYPE_PASSWORD))
{ {
auth.setUsername(request.getParameter("username")); // Standard form validation
FormValidation formValidation = FormValidator.validateForm("userRegistrationForm",request,getServletContext()); FormValidation formValidation = FormValidator.validateForm("userRegistrationForm",request,getServletContext());
if(formValidation.isValid()) // Extra check: That user's email is not already in use
{ FormField emailField = formValidation.getFormField("email");
// Populate object etc. if(SessionControllerGetter.getUserBean().getUserByEmail(emailField.getWebValue()) != null)
// Are there special fields??
System.out.println("Valid, presumably...");
}
else
{ {
request.setAttribute("formValidation", formValidation); emailField.setValid(false);
request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList()); emailField.setValidationMessage(SessionLocaleUtil.getI18nText(request, "emailAddressIsAlreadyInUse"));
request.setAttribute("userAuthenticationTypeId", userAuthenticationType.getUserAuthenticationTypeId());
request.getRequestDispatcher("/userRegistrationForm.ftl").forward(request, response);
return;
} }
/* if(formValidation.isValid())
String password = request.getParameter("password");
String password2 = request.getParameter("password2");
if(password == null || password2 == null || ! password.equals(password2))
{
request.setAttribute("errorMessageKey", password == null || password2 == null ? "passwordNotRepeated" : "passwordsDoNotMatch");
// Get available organizations, add for select list
request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList());
request.setAttribute("userAuthenticationTypeId", userAuthenticationType.getUserAuthenticationTypeId());
request.getRequestDispatcher("/userRegistrationForm.ftl").forward(request, response);
return;
}
// Evaluate password strength
try
{ {
Locale currentLocale = SessionLocaleUtil.getCurrentLocale(request);
SessionControllerGetter.getUserBean().isPasswordValid(password, currentLocale); // Setting authentication info first
auth.setUserAuthenticationType(userAuthenticationType);
auth.setUsername(formValidation.getFormField("username").getWebValue());
auth.setPassword(SessionControllerGetter.getUserBean().getMD5EncryptedString(formValidation.getFormField("password").getWebValue()));
// Adding user info
user.setEmail(formValidation.getFormField("email").getWebValue());
user.setFirstName(formValidation.getFormField("firstName").getWebValue());
user.setLastName(formValidation.getFormField("lastName").getWebValue());
Organization organization = em.find(Organization.class, formValidation.getFormField("organizationId").getValueAsInteger());
user.setOrganizationId(organization);
user.setApprovalApplication(formValidation.getFormField("approvalApplication").getWebValue());
user.setUserStatusId(Globals.USER_STATUS_AWAITING_EMAIL_VERIFICATION);
SessionControllerGetter.getUserBean().storeUserFirstTime(user, auth);
response.sendRedirect(new StringBuilder("http://").append(ServletUtil.getServerName(request)).append("/user?action=registerNewUserFormReceipt").toString());
} }
catch(PasswordValidationException ex) else
{ {
request.setAttribute("errorMessage", ex.getMessage()); request.setAttribute("formValidation", formValidation);
// Get available organizations, add for select list
request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList()); request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList());
request.setAttribute("userAuthenticationTypeId", userAuthenticationType.getUserAuthenticationTypeId()); request.setAttribute("userAuthenticationTypeId", userAuthenticationType.getUserAuthenticationTypeId());
request.getRequestDispatcher("/userRegistrationForm.ftl").forward(request, response); request.getRequestDispatcher("/userRegistrationForm.ftl").forward(request, response);
return; return;
} }
auth.setPassword(password);
// Validate email
String email = request.getParameter("email");
if(email == null || !WebUtil.isValidEmailAddress(email))
{
request.setAttribute("errorMessageKey", "invalidEmailAddress");
// Get available organizations, add for select list
request.setAttribute("organizations", em.createNamedQuery("Organization.findAll").getResultList());
request.setAttribute("userAuthenticationTypeId", userAuthenticationType.getUserAuthenticationTypeId());
request.getRequestDispatcher("/userRegistrationForm").forward(request, response);
return;
}
String firstName = request.getParameter("firstName");
String lastName = request.getParameter("lastName");
if(lastName == null)
{
request.setAttribute("errorMessageKey", "missingValues");
}
PrintWriter out = response.getWriter();
out.print("Tjobing!!!!");
*/
} }
} }
else if(action.equals("registerNewUserFormReceipt"))
{
request.setAttribute("messageKey","registerNewUserReceipt");
request.getRequestDispatcher("/login.ftl").forward(request, response);
}
} }
......
...@@ -19,6 +19,8 @@ import java.util.List; ...@@ -19,6 +19,8 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Stateless; import javax.ejb.Stateless;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
...@@ -28,6 +30,7 @@ import javax.persistence.Query; ...@@ -28,6 +30,7 @@ import javax.persistence.Query;
import no.bioforsk.vips.logic.authenticate.PasswordValidationException; import no.bioforsk.vips.logic.authenticate.PasswordValidationException;
import no.bioforsk.vips.logic.entity.Organization; import no.bioforsk.vips.logic.entity.Organization;
import no.bioforsk.vips.logic.entity.UserAuthentication; import no.bioforsk.vips.logic.entity.UserAuthentication;
import no.bioforsk.vips.logic.entity.UserAuthenticationPK;
import no.bioforsk.vips.logic.entity.UserAuthenticationType; import no.bioforsk.vips.logic.entity.UserAuthenticationType;
import no.bioforsk.vips.logic.entity.VipsLogicUser; import no.bioforsk.vips.logic.entity.VipsLogicUser;
import no.bioforsk.vips.logic.i18n.SessionLocaleUtil; import no.bioforsk.vips.logic.i18n.SessionLocaleUtil;
...@@ -56,8 +59,9 @@ public class UserBean { ...@@ -56,8 +59,9 @@ public class UserBean {
{ {
Query q = em.createNamedQuery("UserAuthentication.findByUsernameAndPassword", UserAuthentication.class); Query q = em.createNamedQuery("UserAuthentication.findByUsernameAndPassword", UserAuthentication.class);
q.setParameter("username", loginInfo.get("username")); q.setParameter("username", loginInfo.get("username"));
String salt = this.getVIPSLogicServerProperties().getProperty("MD5_SALT");
q.setParameter("password", MD5Encrypter.getMD5HexString((String)loginInfo.get("password"),salt)); q.setParameter("password", this.getMD5EncryptedString((String)loginInfo.get("password")));
System.out.println(this.getMD5EncryptedString((String)loginInfo.get("password")));
UserAuthentication result = (UserAuthentication) q.getSingleResult(); UserAuthentication result = (UserAuthentication) q.getSingleResult();
return result.getVipsLogicUser(); return result.getVipsLogicUser();
} }
...@@ -102,6 +106,39 @@ public class UserBean { ...@@ -102,6 +106,39 @@ public class UserBean {
return null; return null;
} }
public void storeUserFirstTime(VipsLogicUser user,UserAuthentication auth)
{
em.persist(user);
auth.setVipsLogicUser(user);
UserAuthenticationPK pk = new UserAuthenticationPK(user.getUserId(), auth.getUserAuthenticationType().getUserAuthenticationTypeId());
auth.setUserAuthenticationPK(pk);
em.persist(auth);
}
/**
*
* @param email
* @return The user, or null if no user with given email is registered
*/
public VipsLogicUser getUserByEmail(String email)
{
Query q = em.createNamedQuery("VipsLogicUser.findByEmail",VipsLogicUser.class);
q.setParameter("email", email);
try
{
return (VipsLogicUser) q.getSingleResult();
}
catch(NoResultException ex)
{
return null;
}
}
public String getMD5EncryptedString(String str) throws IOException
{
return MD5Encrypter.getMD5HexString(str,this.getVIPSLogicServerProperties().getProperty("MD5_SALT"));
}
/** /**
* @return Properties for this server * @return Properties for this server
*/ */
......
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package no.bioforsk.vips.logic.entity;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @copyright 2013 <a href="http://www.bioforsk.no/">Bioforsk</a>
* @author Tor-Einar Skog <tor-einar.skog@bioforsk.no>
*/
@Entity
@Table(name = "user_status")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "UserStatus.findAll", query = "SELECT u FROM UserStatus u"),
@NamedQuery(name = "UserStatus.findByUserStatusId", query = "SELECT u FROM UserStatus u WHERE u.userStatusId = :userStatusId"),
@NamedQuery(name = "UserStatus.findByName", query = "SELECT u FROM UserStatus u WHERE u.name = :name"),
@NamedQuery(name = "UserStatus.findByDescription", query = "SELECT u FROM UserStatus u WHERE u.description = :description")})
public class UserStatus implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "user_status_id")
private Integer userStatusId;
@Size(max = 63)
@Column(name = "name")
private String name;
@Size(max = 1023)
@Column(name = "description")
private String description;
public UserStatus() {
}
public UserStatus(Integer userStatusId) {
this.userStatusId = userStatusId;
}
public Integer getUserStatusId() {
return userStatusId;
}
public void setUserStatusId(Integer userStatusId) {
this.userStatusId = userStatusId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public int hashCode() {
int hash = 0;
hash += (userStatusId != null ? userStatusId.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof UserStatus)) {
return false;
}
UserStatus other = (UserStatus) object;
if ((this.userStatusId == null && other.userStatusId != null) || (this.userStatusId != null && !this.userStatusId.equals(other.userStatusId))) {
return false;
}
return true;
}
@Override
public String toString() {
return "no.bioforsk.vips.logic.entity.UserStatus[ userStatusId=" + userStatusId + " ]";
}
}
...@@ -67,9 +67,8 @@ public class VipsLogicUser implements Serializable { ...@@ -67,9 +67,8 @@ public class VipsLogicUser implements Serializable {
@JoinColumn(name = "organization_id", referencedColumnName = "organization_id") @JoinColumn(name = "organization_id", referencedColumnName = "organization_id")
@ManyToOne @ManyToOne
private Organization organizationId; private Organization organizationId;
@JoinColumn(name = "user_status_id", referencedColumnName = "user_status_id") @Column(name = "user_status_id")
@ManyToOne private Integer userStatusId;
private UserStatus userStatusId;
@ManyToMany(fetch=FetchType.EAGER) @ManyToMany(fetch=FetchType.EAGER)
@JoinTable( @JoinTable(
name = "user_vips_logic_role", name = "user_vips_logic_role",
...@@ -191,14 +190,14 @@ public class VipsLogicUser implements Serializable { ...@@ -191,14 +190,14 @@ public class VipsLogicUser implements Serializable {
/** /**
* @return the userStatusId * @return the userStatusId
*/ */
public UserStatus getUserStatusId() { public Integer getUserStatusId() {
return userStatusId; return userStatusId;
} }
/** /**
* @param userStatusId the userStatusId to set * @param userStatusId the userStatusId to set
*/ */
public void setUserStatusId(UserStatus userStatusId) { public void setUserStatusId(Integer userStatusId) {
this.userStatusId = userStatusId; this.userStatusId = userStatusId;
} }
......
...@@ -35,6 +35,12 @@ public class Globals { ...@@ -35,6 +35,12 @@ public class Globals {
public static final Integer ROLE_SUPERUSER = 1; public static final Integer ROLE_SUPERUSER = 1;
public static final Integer ROLE_ORGANIZATION_ADMINISTRATOR = 2; public static final Integer ROLE_ORGANIZATION_ADMINISTRATOR = 2;
// User statuses
public static Integer USER_STATUS_AWAITING_EMAIL_VERIFICATION = 1;
public static Integer USER_STATUS_AWATING_APPROVAL = 2;
public static Integer USER_STATUS_REJECTED = 3;
public static Integer USER_STATUS_APPROVED = 4;
public static Integer USER_STATUS_DISABLED = 5;
} }
...@@ -54,3 +54,5 @@ lowerThanMinimum=Lower than the minimum ({0}) ...@@ -54,3 +54,5 @@ lowerThanMinimum=Lower than the minimum ({0})
higherThanMaximum=Higher than the maximum ({0}) higherThanMaximum=Higher than the maximum ({0})
xIsNotEqualToY={0} is not equal to {1} xIsNotEqualToY={0} is not equal to {1}
warning_fieldNotFoundInFormDefinition=WARNING: field {0} not found in form definition. The system does not know how to validate it. Continue anyway? warning_fieldNotFoundInFormDefinition=WARNING: field {0} not found in form definition. The system does not know how to validate it. Continue anyway?
emailAddressIsAlreadyInUse=Email address is already in use
registerNewUserReceipt=Thanks. The organization admin will hopefully approve your application shortly.
...@@ -54,3 +54,5 @@ lowerThanMinimum=Kan ikke v\u00e6re lavere enn {0} ...@@ -54,3 +54,5 @@ lowerThanMinimum=Kan ikke v\u00e6re lavere enn {0}
higherThanMaximum=Kan ikke v\u00e6re h\u00f8yere enn {0} higherThanMaximum=Kan ikke v\u00e6re h\u00f8yere enn {0}
xIsNotEqualToY={0} er ikke lik {1} xIsNotEqualToY={0} er ikke lik {1}
warning_fieldNotFoundInFormDefinition=Advarsel: feltet {0} ble ikke funnet i skjemadefinisjonen. Systemet vet derfor ikke hvordan feltet skal sjekkes. \u00d8nsker du allikevel \u00e5 fortsette? warning_fieldNotFoundInFormDefinition=Advarsel: feltet {0} ble ikke funnet i skjemadefinisjonen. Systemet vet derfor ikke hvordan feltet skal sjekkes. \u00d8nsker du allikevel \u00e5 fortsette?
emailAddressIsAlreadyInUse=E-postadressen er allerede registrert
registerNewUserReceipt=Takk. Organisasjonens administrator vil forh\u00e5pentligvis godkjenne s\u00f8knaden din snarlig.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment