diff --git a/pom.xml b/pom.xml index 48117ada8f9889de5161701385be6cd7e5556eb7..16baeed81627c1f0038943968927bfb5bc0b2882 100644 --- a/pom.xml +++ b/pom.xml @@ -55,6 +55,11 @@ <groupId>it.sauronsoftware.cron4j</groupId> <artifactId>cron4j</artifactId> <version>2.2.5</version> +</dependency> +<dependency> + <groupId>org.openid4java</groupId> + <artifactId>openid4java</artifactId> + <version>0.9.8</version> </dependency> </dependencies> diff --git a/src/main/java/no/bioforsk/vips/logic/authenticate/AuthenticationFilter.java b/src/main/java/no/bioforsk/vips/logic/authenticate/AuthenticationFilter.java index e8fde3b4b6a89132da034f82173d3c64c7d84923..5e89934a399dc16ed1d1ed488620804d5891699f 100644 --- a/src/main/java/no/bioforsk/vips/logic/authenticate/AuthenticationFilter.java +++ b/src/main/java/no/bioforsk/vips/logic/authenticate/AuthenticationFilter.java @@ -6,6 +6,7 @@ import java.net.URLEncoder; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import no.bioforsk.vips.logic.entity.VipsLogicUser; import no.bioforsk.vips.logic.util.Globals; import no.bioforsk.vips.util.ServletUtil; @@ -34,11 +35,11 @@ public class AuthenticationFilter implements Filter{ } else { - boolean redirectToLogin = httpRequest.getSession().getAttribute("user") == null; + boolean redirectToLogin = (httpRequest.getSession().getAttribute("user") == null || !( httpRequest.getSession().getAttribute("user") instanceof VipsLogicUser)); if(redirectToLogin) { String nextPageDirective = ""; - if(!httpRequest.getServletPath().equals("/login")); + if(!httpRequest.getServletPath().equals("/login")) { String nextPage = ServletUtil.getFullRequestURI(httpRequest); nextPageDirective= "?nextPage=" + URLEncoder.encode(nextPage, "UTF-8"); diff --git a/src/main/java/no/bioforsk/vips/logic/authenticate/OpenIdAuthAttributes.java b/src/main/java/no/bioforsk/vips/logic/authenticate/OpenIdAuthAttributes.java new file mode 100644 index 0000000000000000000000000000000000000000..b167e5bbd4328d480cb9d16408eeba778fcac158 --- /dev/null +++ b/src/main/java/no/bioforsk/vips/logic/authenticate/OpenIdAuthAttributes.java @@ -0,0 +1,96 @@ +package no.bioforsk.vips.logic.authenticate; + +/** + * Contains information from an authentication session with an openId provider + * @copyright 2013 <a href="http://www.bioforsk.no/">Bioforsk</a> + * @author Tor-Einar Skog <tor-einar.skog@bioforsk.no> + */ +public class OpenIdAuthAttributes { + + private String email, firstName, lastName, fullName, countryCode, openId; + + /** + * @return the email + */ + public String getEmail() { + return email; + } + + /** + * @param email the email to set + */ + public void setEmail(String email) { + this.email = email; + } + + /** + * @return the firstName + */ + public String getFirstName() { + return firstName; + } + + /** + * @param firstName the firstName to set + */ + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + /** + * @return the lastName + */ + public String getLastName() { + return lastName; + } + + /** + * @param lastName the lastName to set + */ + public void setLastName(String lastName) { + this.lastName = lastName; + } + + /** + * @return the fullName + */ + public String getFullName() { + return fullName; + } + + /** + * @param fullName the fullName to set + */ + public void setFullName(String fullName) { + this.fullName = fullName; + } + + /** + * @return the countryCode + */ + public String getCountryCode() { + return countryCode; + } + + /** + * @param countryCode the countryCode to set + */ + public void setCountryCode(String countryCode) { + this.countryCode = countryCode; + } + + /** + * @return the openId + */ + public String getOpenId() { + return openId; + } + + /** + * @param openId the openId to set + */ + public void setOpenId(String openId) { + this.openId = openId; + } + +} diff --git a/src/main/java/no/bioforsk/vips/logic/authenticate/OpenIdRelyingParty.java b/src/main/java/no/bioforsk/vips/logic/authenticate/OpenIdRelyingParty.java new file mode 100644 index 0000000000000000000000000000000000000000..e2df4f2b1dfd9dd598d52c9718602e623a7886a2 --- /dev/null +++ b/src/main/java/no/bioforsk/vips/logic/authenticate/OpenIdRelyingParty.java @@ -0,0 +1,242 @@ +package no.bioforsk.vips.logic.authenticate; + +import java.io.IOException; +import java.util.List; +import java.util.Set; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import no.bioforsk.vips.util.ServletUtil; +import org.openid4java.OpenIDException; +import org.openid4java.consumer.ConsumerException; +import org.openid4java.consumer.ConsumerManager; +import org.openid4java.consumer.InMemoryConsumerAssociationStore; +import org.openid4java.consumer.InMemoryNonceVerifier; +import org.openid4java.consumer.VerificationResult; +import org.openid4java.discovery.DiscoveryInformation; +import org.openid4java.discovery.Identifier; +import org.openid4java.message.AuthRequest; +import org.openid4java.message.AuthSuccess; +import org.openid4java.message.MessageException; +import org.openid4java.message.MessageExtension; +import org.openid4java.message.ParameterList; +import org.openid4java.message.ax.AxMessage; +import org.openid4java.message.ax.FetchRequest; +import org.openid4java.message.ax.FetchResponse; +import org.openid4java.message.sreg.SRegMessage; +import org.openid4java.message.sreg.SRegRequest; +import org.openid4java.message.sreg.SRegResponse; + +/** + * Contains all methods needed to perform authenticating sessions with OpenId + * Resources: + * <ul> + * <li>Attributes: http://openid.net/specs/openid-attribute-properties-list-1_0-01.html</li> + * </ul> + * Relies on OpenId4Java. + * @copyright 2013 <a href="http://www.bioforsk.no/">Bioforsk</a> + * @author Tor-Einar Skog <tor-einar.skog@bioforsk.no> + */ +public class OpenIdRelyingParty { + private static ConsumerManager consumerManager; + + public OpenIdRelyingParty() throws ConsumerException + { + // instantiate a ConsumerManager object + consumerManager = new ConsumerManager(); + } + + private static ConsumerManager getConsumerManager() + { + if (consumerManager == null) { + consumerManager = new ConsumerManager(); + consumerManager.setAssociations(new InMemoryConsumerAssociationStore()); + consumerManager.setNonceVerifier(new InMemoryNonceVerifier(10000)); + } + return consumerManager; + } + + // --- placing the authentication request for first time registration --- + public String authRequest(String userSuppliedString, + HttpServletRequest httpReq, + HttpServletResponse httpResp) + throws IOException + { + try + { + // Overriding, using Google + //userSuppliedString = "https://www.google.com/accounts/o8/id"; + // configure the return_to URL where your application will receive + // the authentication responses from the OpenID provider + String returnToUrl = "http://vipslogic/test/testloginsuccess.jsp"; + + // --- Forward proxy setup (only if needed) --- + // ProxyProperties proxyProps = new ProxyProperties(); + // proxyProps.setProxyName("proxy.example.com"); + // proxyProps.setProxyPort(8080); + // HttpClientFactory.setProxyProperties(proxyProps); + + + + // perform discovery on the user-supplied identifier + // The list is a list of DiscoveryInformation objects + List discoveries = getConsumerManager().discover(userSuppliedString); + + // attempt to associate with the OpenID provider + // and retrieve one service endpoint for authentication + DiscoveryInformation discovered = getConsumerManager().associate(discoveries); + + System.out.println("DiscoveryInformation=" + discovered.toString()); + + Set types = discovered.getTypes(); + for(Object type : types) + { + System.out.println("Type=####" + type.toString() + " \n[" + type.getClass().getName() + "]\n####"); + } + + // store the discovery information in the user's session + httpReq.getSession().setAttribute("openid-disc", discovered); + + // obtain a AuthRequest message to be sent to the OpenID provider + AuthRequest authReq = getConsumerManager().authenticate(discovered, returnToUrl); + authReq.setHandle(""); + + /** + * OpenId Providers are VERY diverse when it comes to attributes + * We attempt to get email address (and other attributes) in diverse ways + */ + + // This works with Symantec Personal Identity Portal + SRegRequest sRegRequest = SRegRequest.createFetchRequest(); + sRegRequest.addAttribute("email", true); + // attach the extension to the authentication request + authReq.addExtension(sRegRequest); + + // This works with Google + FetchRequest fetch = FetchRequest.createFetchRequest(); + fetch.addAttribute("email1","http://openid.net/schema/contact/internet/email", true); // required + fetch.addAttribute("email2", "http://schema.openid.net/contact/email", true); + fetch.addAttribute("email3", "http://axschema.org/contact/email", true); + // attach the extension to the authentication request + authReq.addExtension(fetch); + + httpResp.sendRedirect(authReq.getDestinationUrl(true)); + return null; + } + catch (OpenIDException e) + { + // present error to the user + } + + return null; + } + + // --- processing the authentication response --- + public OpenIdAuthAttributes verifyResponse(HttpServletRequest httpReq) + { + try + { + + // extract the parameters from the authentication response + // (which comes in as a HTTP request from the OpenID provider) + ParameterList response = + new ParameterList(httpReq.getParameterMap()); + + // retrieve the previously stored discovery information + DiscoveryInformation discovered = (DiscoveryInformation) + httpReq.getSession().getAttribute("openid-disc"); + System.out.println("discovered = " + discovered.toString()); + + // verify the response; ConsumerManager needs to be the same + // (static) instance used to place the authentication request + VerificationResult verification = getConsumerManager().verify( + ServletUtil.getCompleteRequestURL(httpReq), + response, discovered); + + System.out.println("Verification finished. Verification = " + verification.toString()); + + // examine the verification result and extract the verified identifier + Identifier verified = verification.getVerifiedId(); + if (verified != null) + { + System.out.println("Verified = " + verified.getIdentifier()); + + AuthSuccess authSuccess = + (AuthSuccess) verification.getAuthResponse(); + + OpenIdAuthAttributes attributes = this.getOpenIdAuthAttributes(verified.getIdentifier(), authSuccess); + + + + return attributes; // success + } + } + catch (OpenIDException e) + { + e.printStackTrace();// present error to the user + } + + return null; + } + + private OpenIdAuthAttributes getOpenIdAuthAttributes(String identifier, AuthSuccess authSuccess) throws MessageException + { + OpenIdAuthAttributes retVal = new OpenIdAuthAttributes(); + retVal.setOpenId(identifier); + if (authSuccess.hasExtension(SRegMessage.OPENID_NS_SREG)) + { + MessageExtension extension = authSuccess.getExtension(SRegMessage.OPENID_NS_SREG); + if(extension instanceof SRegResponse) + { + SRegResponse sRegResponse = (SRegResponse) extension; + String value = sRegResponse.getAttributeValue("email"); + if(value != null) + { + retVal.setEmail(value); + } + value = sRegResponse.getAttributeValue("firstname"); + if(value != null) + { + retVal.setFirstName(value); + } + value = sRegResponse.getAttributeValue("lastname"); + if(value != null) + { + retVal.setLastName(value); + } + value = sRegResponse.getAttributeValue("fullname"); + if(value != null) + { + retVal.setFullName(value); + } + value = sRegResponse.getAttributeValue("countrycode"); + if(value != null) + { + retVal.setCountryCode(value); + } + } + + } + else if (authSuccess.hasExtension(AxMessage.OPENID_NS_AX)) + { + FetchResponse fetchResp = (FetchResponse) authSuccess + .getExtension(AxMessage.OPENID_NS_AX); + + //String emails = fetchResp.getAttributeValues("email1"); + String email = fetchResp.getAttributeValue("email1"); + if(email == null) + { + email = fetchResp.getAttributeValue("email2"); + } + if(email == null) + { + email = fetchResp.getAttributeValue("email3"); + } + retVal.setEmail(email); + } + + + return retVal; + } + +} + diff --git a/src/main/java/no/bioforsk/vips/logic/controller/LoginController.java b/src/main/java/no/bioforsk/vips/logic/controller/LoginController.java index f84d83eb870ac0445e4c4c3f1fe1395669f883cb..32b05a0cc479b56ec8641b7d38fb9cc8070d3402 100644 --- a/src/main/java/no/bioforsk/vips/logic/controller/LoginController.java +++ b/src/main/java/no/bioforsk/vips/logic/controller/LoginController.java @@ -14,7 +14,7 @@ import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; import no.bioforsk.vips.coremanager.service.ManagerResource; -import no.bioforsk.vips.logic.entity.UserVipslogicRole; +import no.bioforsk.vips.logic.entity.VipsLogicUser; import no.bioforsk.vips.logic.session.SessionControllerGetter; import no.bioforsk.vips.util.ServletUtil; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; @@ -67,28 +67,19 @@ public class LoginController extends HttpServlet { creds.put("username", username); creds.put("password", password); - Response resp = this.getManagerResource().getUserInfo(creds); - if(resp.getStatus() == Response.Status.OK.getStatusCode()) + VipsLogicUser user = SessionControllerGetter.getUserBean().authenticateUser(creds); + + if(user != null) { - Map user = resp.readEntity(HashMap.class); - if(user != null) - { - List<UserVipslogicRole> roles = SessionControllerGetter.getUserBean().getUserVipslogicRole((Integer)user.get("vipsCoreUserId")); - user.put("roles", roles); - request.getSession().setAttribute("user", user); - response.sendRedirect(new StringBuilder("http://").append(ServletUtil.getServerName(request)).append(nextPage).toString()); - } - else - { - request.setAttribute("errorMessageKey", "invalidcredentials"); - request.getRequestDispatcher("/login.ftl").forward(request, response); - } + request.getSession().setAttribute("user", user); + response.sendRedirect(new StringBuilder("http://").append(ServletUtil.getServerName(request)).append(nextPage).toString()); } else { request.setAttribute("errorMessageKey", "invalidcredentials"); request.getRequestDispatcher("/login.ftl").forward(request, response); } + } } diff --git a/src/main/java/no/bioforsk/vips/logic/controller/PointOfInterestController.java b/src/main/java/no/bioforsk/vips/logic/controller/PointOfInterestController.java index b45a2be25e3a9873336eb319a200f88a21e7a149..90c6137584b54d7f3424c3ac40eb0a34ed3a4d16 100644 --- a/src/main/java/no/bioforsk/vips/logic/controller/PointOfInterestController.java +++ b/src/main/java/no/bioforsk/vips/logic/controller/PointOfInterestController.java @@ -2,7 +2,6 @@ package no.bioforsk.vips.logic.controller; import java.io.IOException; import java.util.List; -import java.util.Map; import java.util.TimeZone; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -10,6 +9,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import no.bioforsk.vips.logic.entity.PointOfInterest; import no.bioforsk.vips.logic.entity.PointOfInterestWeatherStation; +import no.bioforsk.vips.logic.entity.VipsLogicUser; import no.bioforsk.vips.logic.session.SessionControllerGetter; /** @@ -35,8 +35,7 @@ public class PointOfInterestController extends HttpServlet { request.getSession().removeAttribute("weatherStations"); request.getSession().removeAttribute("weatherStation"); - Map userInfo = (Map) request.getSession().getAttribute("user"); - Integer userId = (Integer) userInfo.get("vipsCoreUserId"); + VipsLogicUser user = (VipsLogicUser) request.getSession().getAttribute("user"); /* System.out.println("PathInfo=" + request.getPathInfo()); @@ -54,12 +53,12 @@ public class PointOfInterestController extends HttpServlet { if(pointOfInterestId == null) { List<PointOfInterestWeatherStation> weatherStations; - if(SessionControllerGetter.getUserBean().isSuperUser(userInfo)){ + if(user.isSuperUser()){ weatherStations = SessionControllerGetter.getPointOfInterestBean().getAllWeatherStations(); } else { - weatherStations = SessionControllerGetter.getPointOfInterestBean().getWeatherstationsForUser(userId); + weatherStations = SessionControllerGetter.getPointOfInterestBean().getWeatherstationsForUser(user.getUserId()); } request.getSession().setAttribute("weatherStations", weatherStations); request.getRequestDispatcher("/weatherstationlist.ftl").forward(request, response); diff --git a/src/main/java/no/bioforsk/vips/logic/entity/Organization.java b/src/main/java/no/bioforsk/vips/logic/entity/Organization.java new file mode 100644 index 0000000000000000000000000000000000000000..59cdacb43129f34eec8255051af69b788e31e1ae --- /dev/null +++ b/src/main/java/no/bioforsk/vips/logic/entity/Organization.java @@ -0,0 +1,180 @@ +/* + * 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 java.util.Set; +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; +import org.codehaus.jackson.annotate.JsonIgnore; + +/** + * @copyright 2013 <a href="http://www.bioforsk.no/">Bioforsk</a> + * @author Tor-Einar Skog <tor-einar.skog@bioforsk.no> + */ +@Entity +@Table(name = "organization") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "Organization.findAll", query = "SELECT o FROM Organization o"), + @NamedQuery(name = "Organization.findByOrganizationId", query = "SELECT o FROM Organization o WHERE o.organizationId = :organizationId"), + @NamedQuery(name = "Organization.findByOrganizationName", query = "SELECT o FROM Organization o WHERE o.organizationName = :organizationName"), + @NamedQuery(name = "Organization.findByAddress1", query = "SELECT o FROM Organization o WHERE o.address1 = :address1"), + @NamedQuery(name = "Organization.findByAddress2", query = "SELECT o FROM Organization o WHERE o.address2 = :address2"), + @NamedQuery(name = "Organization.findByPostalCode", query = "SELECT o FROM Organization o WHERE o.postalCode = :postalCode")}) +public class Organization implements Serializable { + private static final long serialVersionUID = 1L; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Basic(optional = false) + @Column(name = "organization_id") + private Integer organizationId; + @Size(max = 255) + @Column(name = "organization_name") + private String organizationName; + @Size(max = 255) + @Column(name = "address1") + private String address1; + @Size(max = 255) + @Column(name = "address2") + private String address2; + @Size(max = 63) + @Column(name = "postal_code") + private String postalCode; + @OneToMany(mappedBy = "parentOrganizationId") + private Set<Organization> organizationSet; + @JoinColumn(name = "parent_organization_id", referencedColumnName = "organization_id") + @ManyToOne + private Organization parentOrganizationId; + @JoinColumn(name = "country_code", referencedColumnName = "country_code") + @ManyToOne + private Country countryCode; + @OneToMany(mappedBy = "organizationId") + private Set<VipsLogicUser> vipsLogicUserSet; + + public Organization() { + } + + public Organization(Integer organizationId) { + this.organizationId = organizationId; + } + + public Integer getOrganizationId() { + return organizationId; + } + + public void setOrganizationId(Integer organizationId) { + this.organizationId = organizationId; + } + + public String getOrganizationName() { + return organizationName; + } + + public void setOrganizationName(String organizationName) { + this.organizationName = organizationName; + } + + public String getAddress1() { + return address1; + } + + public void setAddress1(String address1) { + this.address1 = address1; + } + + public String getAddress2() { + return address2; + } + + public void setAddress2(String address2) { + this.address2 = address2; + } + + public String getPostalCode() { + return postalCode; + } + + public void setPostalCode(String postalCode) { + this.postalCode = postalCode; + } + + @XmlTransient + @JsonIgnore + public Set<Organization> getOrganizationSet() { + return organizationSet; + } + + public void setOrganizationSet(Set<Organization> organizationSet) { + this.organizationSet = organizationSet; + } + + public Organization getParentOrganizationId() { + return parentOrganizationId; + } + + public void setParentOrganizationId(Organization parentOrganizationId) { + this.parentOrganizationId = parentOrganizationId; + } + + public Country getCountryCode() { + return countryCode; + } + + public void setCountryCode(Country countryCode) { + this.countryCode = countryCode; + } + + @XmlTransient + @JsonIgnore + public Set<VipsLogicUser> getVipsLogicUserSet() { + return vipsLogicUserSet; + } + + public void setVipsLogicUserSet(Set<VipsLogicUser> vipsLogicUserSet) { + this.vipsLogicUserSet = vipsLogicUserSet; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (organizationId != null ? organizationId.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 Organization)) { + return false; + } + Organization other = (Organization) object; + if ((this.organizationId == null && other.organizationId != null) || (this.organizationId != null && !this.organizationId.equals(other.organizationId))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "no.bioforsk.vips.logic.entity.Organization[ organizationId=" + organizationId + " ]"; + } + +} diff --git a/src/main/java/no/bioforsk/vips/logic/entity/UserAuthentication.java b/src/main/java/no/bioforsk/vips/logic/entity/UserAuthentication.java new file mode 100644 index 0000000000000000000000000000000000000000..cad2441aba855a712e12dfcd6daf868ad7031623 --- /dev/null +++ b/src/main/java/no/bioforsk/vips/logic/entity/UserAuthentication.java @@ -0,0 +1,128 @@ +/* + * 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.Column; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.Table; +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_authentication") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "UserAuthentication.findAll", query = "SELECT u FROM UserAuthentication u"), + @NamedQuery(name = "UserAuthentication.findByUserId", query = "SELECT u FROM UserAuthentication u WHERE u.userAuthenticationPK.userId = :userId"), + @NamedQuery(name = "UserAuthentication.findByUserAuthenticationTypeId", query = "SELECT u FROM UserAuthentication u WHERE u.userAuthenticationPK.userAuthenticationTypeId = :userAuthenticationTypeId"), + @NamedQuery(name = "UserAuthentication.findByUsername", query = "SELECT u FROM UserAuthentication u WHERE u.username = :username"), + @NamedQuery(name = "UserAuthentication.findByUsernameAndPassword", query = "SELECT u FROM UserAuthentication u WHERE u.username = :username AND u.password = :password"), + @NamedQuery(name = "UserAuthentication.findByPassword", query = "SELECT u FROM UserAuthentication u WHERE u.password = :password")}) +public class UserAuthentication implements Serializable { + private static final long serialVersionUID = 1L; + @EmbeddedId + protected UserAuthenticationPK userAuthenticationPK; + @Size(max = 2047) + @Column(name = "username") + private String username; + @Size(max = 63) + @Column(name = "password") + private String password; + @JoinColumn(name = "user_id", referencedColumnName = "user_id", insertable = false, updatable = false) + @ManyToOne(optional = false) + private VipsLogicUser vipsLogicUser; + @JoinColumn(name = "user_authentication_type_id", referencedColumnName = "user_authentication_type_id", insertable = false, updatable = false) + @ManyToOne(optional = false) + private UserAuthenticationType userAuthenticationType; + + public UserAuthentication() { + } + + public UserAuthentication(UserAuthenticationPK userAuthenticationPK) { + this.userAuthenticationPK = userAuthenticationPK; + } + + public UserAuthentication(int userId, int userAuthenticationTypeId) { + this.userAuthenticationPK = new UserAuthenticationPK(userId, userAuthenticationTypeId); + } + + public UserAuthenticationPK getUserAuthenticationPK() { + return userAuthenticationPK; + } + + public void setUserAuthenticationPK(UserAuthenticationPK userAuthenticationPK) { + this.userAuthenticationPK = userAuthenticationPK; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public VipsLogicUser getVipsLogicUser() { + return vipsLogicUser; + } + + public void setVipsLogicUser(VipsLogicUser vipsLogicUser) { + this.vipsLogicUser = vipsLogicUser; + } + + public UserAuthenticationType getUserAuthenticationType() { + return userAuthenticationType; + } + + public void setUserAuthenticationType(UserAuthenticationType userAuthenticationType) { + this.userAuthenticationType = userAuthenticationType; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (userAuthenticationPK != null ? userAuthenticationPK.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 UserAuthentication)) { + return false; + } + UserAuthentication other = (UserAuthentication) object; + if ((this.userAuthenticationPK == null && other.userAuthenticationPK != null) || (this.userAuthenticationPK != null && !this.userAuthenticationPK.equals(other.userAuthenticationPK))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "no.bioforsk.vips.logic.entity.UserAuthentication[ userAuthenticationPK=" + userAuthenticationPK + " ]"; + } + +} diff --git a/src/main/java/no/bioforsk/vips/logic/entity/UserVipslogicRolePK.java b/src/main/java/no/bioforsk/vips/logic/entity/UserAuthenticationPK.java similarity index 52% rename from src/main/java/no/bioforsk/vips/logic/entity/UserVipslogicRolePK.java rename to src/main/java/no/bioforsk/vips/logic/entity/UserAuthenticationPK.java index 1a506a30253a2d3361465cc9bef00fcc79d29cc9..4b7575066e45f03a5000cf246f75f88344a12322 100644 --- a/src/main/java/no/bioforsk/vips/logic/entity/UserVipslogicRolePK.java +++ b/src/main/java/no/bioforsk/vips/logic/entity/UserAuthenticationPK.java @@ -1,5 +1,6 @@ /* - * To change this template, choose Tools | Templates + * 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. */ @@ -16,30 +17,22 @@ import javax.validation.constraints.NotNull; * @author Tor-Einar Skog <tor-einar.skog@bioforsk.no> */ @Embeddable -public class UserVipslogicRolePK implements Serializable { - @Basic(optional = false) - @NotNull - @Column(name = "vipslogic_role_id") - private int vipslogicRoleId; +public class UserAuthenticationPK implements Serializable { @Basic(optional = false) @NotNull @Column(name = "user_id") private int userId; + @Basic(optional = false) + @NotNull + @Column(name = "user_authentication_type_id") + private int userAuthenticationTypeId; - public UserVipslogicRolePK() { + public UserAuthenticationPK() { } - public UserVipslogicRolePK(int vipslogicRoleId, int userId) { - this.vipslogicRoleId = vipslogicRoleId; + public UserAuthenticationPK(int userId, int userAuthenticationTypeId) { this.userId = userId; - } - - public int getVipslogicRoleId() { - return vipslogicRoleId; - } - - public void setVipslogicRoleId(int vipslogicRoleId) { - this.vipslogicRoleId = vipslogicRoleId; + this.userAuthenticationTypeId = userAuthenticationTypeId; } public int getUserId() { @@ -50,25 +43,33 @@ public class UserVipslogicRolePK implements Serializable { this.userId = userId; } + public int getUserAuthenticationTypeId() { + return userAuthenticationTypeId; + } + + public void setUserAuthenticationTypeId(int userAuthenticationTypeId) { + this.userAuthenticationTypeId = userAuthenticationTypeId; + } + @Override public int hashCode() { int hash = 0; - hash += (int) vipslogicRoleId; hash += (int) userId; + hash += (int) userAuthenticationTypeId; 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 UserVipslogicRolePK)) { + if (!(object instanceof UserAuthenticationPK)) { return false; } - UserVipslogicRolePK other = (UserVipslogicRolePK) object; - if (this.vipslogicRoleId != other.vipslogicRoleId) { + UserAuthenticationPK other = (UserAuthenticationPK) object; + if (this.userId != other.userId) { return false; } - if (this.userId != other.userId) { + if (this.userAuthenticationTypeId != other.userAuthenticationTypeId) { return false; } return true; @@ -76,7 +77,7 @@ public class UserVipslogicRolePK implements Serializable { @Override public String toString() { - return "no.bioforsk.vips.logic.entity.UserVipslogicRolePK[ vipslogicRoleId=" + vipslogicRoleId + ", userId=" + userId + " ]"; + return "no.bioforsk.vips.logic.entity.UserAuthenticationPK[ userId=" + userId + ", userAuthenticationTypeId=" + userAuthenticationTypeId + " ]"; } } diff --git a/src/main/java/no/bioforsk/vips/logic/entity/UserAuthenticationType.java b/src/main/java/no/bioforsk/vips/logic/entity/UserAuthenticationType.java new file mode 100644 index 0000000000000000000000000000000000000000..15fd784e8ef3ea455d590dd01d2b8948d5d53c94 --- /dev/null +++ b/src/main/java/no/bioforsk/vips/logic/entity/UserAuthenticationType.java @@ -0,0 +1,120 @@ +/* + * 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 java.util.Set; +import javax.persistence.Basic; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; +import org.codehaus.jackson.annotate.JsonIgnore; + +/** + * @copyright 2013 <a href="http://www.bioforsk.no/">Bioforsk</a> + * @author Tor-Einar Skog <tor-einar.skog@bioforsk.no> + */ +@Entity +@Table(name = "user_authentication_type") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "UserAuthenticationType.findAll", query = "SELECT u FROM UserAuthenticationType u"), + @NamedQuery(name = "UserAuthenticationType.findByUserAuthenticationTypeId", query = "SELECT u FROM UserAuthenticationType u WHERE u.userAuthenticationTypeId = :userAuthenticationTypeId"), + @NamedQuery(name = "UserAuthenticationType.findByName", query = "SELECT u FROM UserAuthenticationType u WHERE u.name = :name"), + @NamedQuery(name = "UserAuthenticationType.findByDescription", query = "SELECT u FROM UserAuthenticationType u WHERE u.description = :description")}) +public class UserAuthenticationType implements Serializable { + private static final long serialVersionUID = 1L; + @Id + @Basic(optional = false) + @NotNull + @Column(name = "user_authentication_type_id") + private Integer userAuthenticationTypeId; + @Size(max = 63) + @Column(name = "name") + private String name; + @Size(max = 1023) + @Column(name = "description") + private String description; + @OneToMany(cascade = CascadeType.ALL, mappedBy = "userAuthenticationType") + private Set<UserAuthentication> userAuthenticationSet; + + public UserAuthenticationType() { + } + + public UserAuthenticationType(Integer userAuthenticationTypeId) { + this.userAuthenticationTypeId = userAuthenticationTypeId; + } + + public Integer getUserAuthenticationTypeId() { + return userAuthenticationTypeId; + } + + public void setUserAuthenticationTypeId(Integer userAuthenticationTypeId) { + this.userAuthenticationTypeId = userAuthenticationTypeId; + } + + 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; + } + + @XmlTransient + @JsonIgnore + public Set<UserAuthentication> getUserAuthenticationSet() { + return userAuthenticationSet; + } + + public void setUserAuthenticationSet(Set<UserAuthentication> userAuthenticationSet) { + this.userAuthenticationSet = userAuthenticationSet; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (userAuthenticationTypeId != null ? userAuthenticationTypeId.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 UserAuthenticationType)) { + return false; + } + UserAuthenticationType other = (UserAuthenticationType) object; + if ((this.userAuthenticationTypeId == null && other.userAuthenticationTypeId != null) || (this.userAuthenticationTypeId != null && !this.userAuthenticationTypeId.equals(other.userAuthenticationTypeId))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "no.bioforsk.vips.logic.entity.UserAuthenticationType[ userAuthenticationTypeId=" + userAuthenticationTypeId + " ]"; + } + +} diff --git a/src/main/java/no/bioforsk/vips/logic/entity/UserStatus.java b/src/main/java/no/bioforsk/vips/logic/entity/UserStatus.java new file mode 100644 index 0000000000000000000000000000000000000000..9ec9c8b95750df54a1b1a328bb45339c697be6ce --- /dev/null +++ b/src/main/java/no/bioforsk/vips/logic/entity/UserStatus.java @@ -0,0 +1,103 @@ +/* + * 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 + " ]"; + } + +} diff --git a/src/main/java/no/bioforsk/vips/logic/entity/UserVipslogicRole.java b/src/main/java/no/bioforsk/vips/logic/entity/UserVipslogicRole.java deleted file mode 100644 index 7e2001b70ae6b3bc40a2b7efadf8122508252acc..0000000000000000000000000000000000000000 --- a/src/main/java/no/bioforsk/vips/logic/entity/UserVipslogicRole.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - -package no.bioforsk.vips.logic.entity; - -import java.io.Serializable; -import javax.persistence.EmbeddedId; -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.Table; -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_vipslogic_role") -@XmlRootElement -@NamedQueries({ - @NamedQuery(name = "UserVipslogicRole.findAll", query = "SELECT u FROM UserVipslogicRole u"), - @NamedQuery(name = "UserVipslogicRole.findByVipslogicRoleId", query = "SELECT u FROM UserVipslogicRole u WHERE u.userVipslogicRolePK.vipslogicRoleId = :vipslogicRoleId"), - @NamedQuery(name = "UserVipslogicRole.findByUserId", query = "SELECT u FROM UserVipslogicRole u WHERE u.userVipslogicRolePK.userId = :userId")}) -public class UserVipslogicRole implements Serializable { - private static final long serialVersionUID = 1L; - @EmbeddedId - protected UserVipslogicRolePK userVipslogicRolePK; - @JoinColumn(name = "vipslogic_role_id", referencedColumnName = "vipslogic_role_id", insertable = false, updatable = false) - @ManyToOne(optional = false) - private VipslogicRole vipslogicRole; - - public UserVipslogicRole() { - } - - public UserVipslogicRole(UserVipslogicRolePK userVipslogicRolePK) { - this.userVipslogicRolePK = userVipslogicRolePK; - } - - public UserVipslogicRole(int vipslogicRoleId, int userId) { - this.userVipslogicRolePK = new UserVipslogicRolePK(vipslogicRoleId, userId); - } - - public UserVipslogicRolePK getUserVipslogicRolePK() { - return userVipslogicRolePK; - } - - public void setUserVipslogicRolePK(UserVipslogicRolePK userVipslogicRolePK) { - this.userVipslogicRolePK = userVipslogicRolePK; - } - - public VipslogicRole getVipslogicRole() { - return vipslogicRole; - } - - public void setVipslogicRole(VipslogicRole vipslogicRole) { - this.vipslogicRole = vipslogicRole; - } - - @Override - public int hashCode() { - int hash = 0; - hash += (userVipslogicRolePK != null ? userVipslogicRolePK.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 UserVipslogicRole)) { - return false; - } - UserVipslogicRole other = (UserVipslogicRole) object; - if ((this.userVipslogicRolePK == null && other.userVipslogicRolePK != null) || (this.userVipslogicRolePK != null && !this.userVipslogicRolePK.equals(other.userVipslogicRolePK))) { - return false; - } - return true; - } - - @Override - public String toString() { - return "no.bioforsk.vips.logic.entity.UserVipslogicRole[ userVipslogicRolePK=" + userVipslogicRolePK + " ]"; - } - -} diff --git a/src/main/java/no/bioforsk/vips/logic/entity/VipsLogicRole.java b/src/main/java/no/bioforsk/vips/logic/entity/VipsLogicRole.java new file mode 100644 index 0000000000000000000000000000000000000000..37dfaf354cb4fe86fb16f7cd5370889e731fa710 --- /dev/null +++ b/src/main/java/no/bioforsk/vips/logic/entity/VipsLogicRole.java @@ -0,0 +1,105 @@ +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 = "vips_logic_role") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "VipsLogicRole.findAll", query = "SELECT v FROM VipsLogicRole v"), + @NamedQuery(name = "VipsLogicRole.findByVipsLogicRoleId", query = "SELECT v FROM VipsLogicRole v WHERE v.vipsLogicRoleId = :vipsLogicRoleId"), + @NamedQuery(name = "VipsLogicRole.findByDefaultTitle", query = "SELECT v FROM VipsLogicRole v WHERE v.defaultTitle = :defaultTitle"), + @NamedQuery(name = "VipsLogicRole.findByDefaultDescription", query = "SELECT v FROM VipsLogicRole v WHERE v.defaultDescription = :defaultDescription")}) +public class VipsLogicRole implements Serializable { + + /** Static definitions */ + public static Integer VIPS_LOGIC_ROLE_SUPERUSER = 1; + public static Integer VIPS_LOGIC_ROLE_ORGNANIZATION_ADMINISTRATOR = 2; + + private static final long serialVersionUID = 1L; + @Id + @Basic(optional = false) + @NotNull + @Column(name = "vips_logic_role_id") + private Integer vipsLogicRoleId; + @Size(max = 255) + @Column(name = "default_title") + private String defaultTitle; + @Size(max = 2147483647) + @Column(name = "default_description") + private String defaultDescription; + + + public VipsLogicRole() { + } + + public VipsLogicRole(Integer vipsLogicRoleId) { + this.vipsLogicRoleId = vipsLogicRoleId; + } + + public Integer getVipsLogicRoleId() { + return vipsLogicRoleId; + } + + public void setVipsLogicRoleId(Integer vipsLogicRoleId) { + this.vipsLogicRoleId = vipsLogicRoleId; + } + + public String getDefaultTitle() { + return defaultTitle; + } + + public void setDefaultTitle(String defaultTitle) { + this.defaultTitle = defaultTitle; + } + + public String getDefaultDescription() { + return defaultDescription; + } + + public void setDefaultDescription(String defaultDescription) { + this.defaultDescription = defaultDescription; + } + + + + @Override + public int hashCode() { + int hash = 0; + hash += (vipsLogicRoleId != null ? vipsLogicRoleId.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 VipsLogicRole)) { + return false; + } + VipsLogicRole other = (VipsLogicRole) object; + if ((this.vipsLogicRoleId == null && other.vipsLogicRoleId != null) || (this.vipsLogicRoleId != null && !this.vipsLogicRoleId.equals(other.vipsLogicRoleId))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "no.bioforsk.vips.logic.entity.VipslogicRole[ vipslogicRoleId=" + vipsLogicRoleId + " ]"; + } + +} diff --git a/src/main/java/no/bioforsk/vips/logic/entity/VipsLogicUser.java b/src/main/java/no/bioforsk/vips/logic/entity/VipsLogicUser.java new file mode 100644 index 0000000000000000000000000000000000000000..e6a1a89c93dd5c86907a661998945d2f30c8cd7c --- /dev/null +++ b/src/main/java/no/bioforsk/vips/logic/entity/VipsLogicUser.java @@ -0,0 +1,228 @@ +package no.bioforsk.vips.logic.entity; + +import java.io.Serializable; +import java.util.Set; +import javax.persistence.Basic; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; +import javax.persistence.Table; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; +import org.codehaus.jackson.annotate.JsonIgnore; + +/** + * @copyright 2013 <a href="http://www.bioforsk.no/">Bioforsk</a> + * @author Tor-Einar Skog <tor-einar.skog@bioforsk.no> + */ +@Entity +@Table(name = "vips_logic_user") +@XmlRootElement +@NamedQueries({ + @NamedQuery(name = "VipsLogicUser.findAll", query = "SELECT v FROM VipsLogicUser v"), + @NamedQuery(name = "VipsLogicUser.findByUserId", query = "SELECT v FROM VipsLogicUser v WHERE v.userId = :userId"), + @NamedQuery(name = "VipsLogicUser.findByOrganizationId", query = "SELECT v FROM VipsLogicUser v WHERE v.organizationId = :organizationId"), + @NamedQuery(name = "VipsLogicUser.findByEmail", query = "SELECT v FROM VipsLogicUser v WHERE v.email = :email"), + @NamedQuery(name = "VipsLogicUser.findByFirstName", query = "SELECT v FROM VipsLogicUser v WHERE v.firstName = :firstName"), + @NamedQuery(name = "VipsLogicUser.findByLastName", query = "SELECT v FROM VipsLogicUser v WHERE v.lastName = :lastName")}) +public class VipsLogicUser implements Serializable { + private static final long serialVersionUID = 1L; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Basic(optional = false) + @Column(name = "user_id") + private Integer userId; + //if the field contains email address consider using this annotation to enforce field validation + @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email") + @Size(max = 1023) + @Column(name = "email") + private String email; + @Size(max = 255) + @Column(name = "first_name") + private String firstName; + @Size(max = 255) + @Column(name = "last_name") + private String lastName; + @Size(max = 2047) + @Column(name = "approval_application") + private String approvalApplication; + @Size(max = 2147483647) + @Column(name = "remarks") + private String remarks; + @OneToMany(cascade = CascadeType.ALL, mappedBy = "vipsLogicUser") + private Set<UserAuthentication> userAuthenticationSet; + @JoinColumn(name = "organization_id", referencedColumnName = "organization_id") + @ManyToOne + private Organization organizationId; + @JoinColumn(name = "user_status_id", referencedColumnName = "user_status_id") + @ManyToOne + private UserStatus userStatusId; + @ManyToMany(fetch=FetchType.EAGER) + @JoinTable( + name = "user_vips_logic_role", + joinColumns = {@JoinColumn(name = "user_id")}, + inverseJoinColumns = {@JoinColumn(name = "vips_logic_role_id")} + ) + private Set<VipsLogicRole> vipsLogicRoles; + + public VipsLogicUser() { + } + + public VipsLogicUser(Integer userId) { + this.userId = userId; + } + + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + @XmlTransient + @JsonIgnore + public Set<UserAuthentication> getUserAuthenticationSet() { + return userAuthenticationSet; + } + + public void setUserAuthenticationSet(Set<UserAuthentication> userAuthenticationSet) { + this.userAuthenticationSet = userAuthenticationSet; + } + + public Organization getOrganizationId() { + return organizationId; + } + + public void setOrganizationId(Organization organizationId) { + this.organizationId = organizationId; + } + + @Override + public int hashCode() { + int hash = 0; + hash += (userId != null ? userId.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 VipsLogicUser)) { + return false; + } + VipsLogicUser other = (VipsLogicUser) object; + if ((this.userId == null && other.userId != null) || (this.userId != null && !this.userId.equals(other.userId))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "no.bioforsk.vips.logic.entity.VipsLogicUser[ userId=" + userId + " ]"; + } + + /** + * @return the approvalApplication + */ + public String getApprovalApplication() { + return approvalApplication; + } + + /** + * @param approvalApplication the approvalApplication to set + */ + public void setApprovalApplication(String approvalApplication) { + this.approvalApplication = approvalApplication; + } + + /** + * @return the remarks + */ + public String getRemarks() { + return remarks; + } + + /** + * @param remarks the remarks to set + */ + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + /** + * @return the userStatusId + */ + public UserStatus getUserStatusId() { + return userStatusId; + } + + /** + * @param userStatusId the userStatusId to set + */ + public void setUserStatusId(UserStatus userStatusId) { + this.userStatusId = userStatusId; + } + + /** + * @return the vipsLogicRoles + */ + public Set<VipsLogicRole> getVipsLogicRoles() { + return vipsLogicRoles; + } + + /** + * @param vipsLogicRoles the vipsLogicRoles to set + */ + public void setVipsLogicRoles(Set<VipsLogicRole> vipsLogicRoles) { + this.vipsLogicRoles = vipsLogicRoles; + } + + @JsonIgnore + public boolean isSuperUser() + { + for(VipsLogicRole role:this.getVipsLogicRoles()){ + if(role.getVipsLogicRoleId().equals(VipsLogicRole.VIPS_LOGIC_ROLE_SUPERUSER)) + return true; + } + return false; + } +} diff --git a/src/main/java/no/bioforsk/vips/logic/entity/VipslogicRole.java b/src/main/java/no/bioforsk/vips/logic/entity/VipslogicRole.java deleted file mode 100644 index 9a6dc420f6c68fd92d0a3feccc08197c70eae94f..0000000000000000000000000000000000000000 --- a/src/main/java/no/bioforsk/vips/logic/entity/VipslogicRole.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - -package no.bioforsk.vips.logic.entity; - -import java.io.Serializable; -import java.util.Set; -import javax.persistence.Basic; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; -import org.codehaus.jackson.annotate.JsonIgnore; - -/** - * @copyright 2013 <a href="http://www.bioforsk.no/">Bioforsk</a> - * @author Tor-Einar Skog <tor-einar.skog@bioforsk.no> - */ -@Entity -@Table(name = "vipslogic_role") -@XmlRootElement -@NamedQueries({ - @NamedQuery(name = "VipslogicRole.findAll", query = "SELECT v FROM VipslogicRole v"), - @NamedQuery(name = "VipslogicRole.findByVipslogicRoleId", query = "SELECT v FROM VipslogicRole v WHERE v.vipslogicRoleId = :vipslogicRoleId"), - @NamedQuery(name = "VipslogicRole.findByDefaultTitle", query = "SELECT v FROM VipslogicRole v WHERE v.defaultTitle = :defaultTitle"), - @NamedQuery(name = "VipslogicRole.findByDefaultDescription", query = "SELECT v FROM VipslogicRole v WHERE v.defaultDescription = :defaultDescription")}) -public class VipslogicRole implements Serializable { - private static final long serialVersionUID = 1L; - @Id - @Basic(optional = false) - @NotNull - @Column(name = "vipslogic_role_id") - private Integer vipslogicRoleId; - @Size(max = 255) - @Column(name = "default_title") - private String defaultTitle; - @Size(max = 2147483647) - @Column(name = "default_description") - private String defaultDescription; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "vipslogicRole") - private Set<UserVipslogicRole> userVipslogicRoleSet; - - public VipslogicRole() { - } - - public VipslogicRole(Integer vipslogicRoleId) { - this.vipslogicRoleId = vipslogicRoleId; - } - - public Integer getVipslogicRoleId() { - return vipslogicRoleId; - } - - public void setVipslogicRoleId(Integer vipslogicRoleId) { - this.vipslogicRoleId = vipslogicRoleId; - } - - public String getDefaultTitle() { - return defaultTitle; - } - - public void setDefaultTitle(String defaultTitle) { - this.defaultTitle = defaultTitle; - } - - public String getDefaultDescription() { - return defaultDescription; - } - - public void setDefaultDescription(String defaultDescription) { - this.defaultDescription = defaultDescription; - } - - @XmlTransient - @JsonIgnore - public Set<UserVipslogicRole> getUserVipslogicRoleSet() { - return userVipslogicRoleSet; - } - - public void setUserVipslogicRoleSet(Set<UserVipslogicRole> userVipslogicRoleSet) { - this.userVipslogicRoleSet = userVipslogicRoleSet; - } - - @Override - public int hashCode() { - int hash = 0; - hash += (vipslogicRoleId != null ? vipslogicRoleId.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 VipslogicRole)) { - return false; - } - VipslogicRole other = (VipslogicRole) object; - if ((this.vipslogicRoleId == null && other.vipslogicRoleId != null) || (this.vipslogicRoleId != null && !this.vipslogicRoleId.equals(other.vipslogicRoleId))) { - return false; - } - return true; - } - - @Override - public String toString() { - return "no.bioforsk.vips.logic.entity.VipslogicRole[ vipslogicRoleId=" + vipslogicRoleId + " ]"; - } - -} diff --git a/src/main/java/no/bioforsk/vips/logic/scheduling/model/AppleScabModelPreprocessor.java b/src/main/java/no/bioforsk/vips/logic/scheduling/model/AppleScabModelPreprocessor.java index 9a9536fd56d11ca582017df3ac218259fb767a6c..a52e2af0effffdad1dd8c04c8fabbb4b9627cb2b 100644 --- a/src/main/java/no/bioforsk/vips/logic/scheduling/model/AppleScabModelPreprocessor.java +++ b/src/main/java/no/bioforsk/vips/logic/scheduling/model/AppleScabModelPreprocessor.java @@ -23,7 +23,7 @@ public class AppleScabModelPreprocessor extends ModelRunPreprocessor{ @Override public ModelConfiguration getModelConfiguration(ForecastConfiguration configuration) { //configuration.getDateStart(); - PointOfInterestWeatherStation weatherStation = (PointOfInterestWeatherStation) configuration.getPointOfInterestId(); + PointOfInterestWeatherStation weatherStation = (PointOfInterestWeatherStation) configuration.getLocationPointOfInterestId(); // What timezone is the calculation for TimeZone timeZone = TimeZone.getTimeZone(weatherStation.getTimeZone()); System.out.println("timeZone ID in preprocessor=" + timeZone.getID()); diff --git a/src/main/java/no/bioforsk/vips/logic/scheduling/model/ForecastConfiguration.java b/src/main/java/no/bioforsk/vips/logic/scheduling/model/ForecastConfiguration.java index 8d56546aba6c4e2388c1c6c2f4257eefcf4b5332..26e612e81d9f8b9776d6cbdd7ae39565b11f59ee 100644 --- a/src/main/java/no/bioforsk/vips/logic/scheduling/model/ForecastConfiguration.java +++ b/src/main/java/no/bioforsk/vips/logic/scheduling/model/ForecastConfiguration.java @@ -58,9 +58,12 @@ public class ForecastConfiguration implements Serializable { private Date dateEnd; @Column(name = "vips_core_user_id") private Integer vipsCoreUserId; - @JoinColumn(name = "point_of_interest_id", referencedColumnName = "point_of_interest_id") + @JoinColumn(name = "location_point_of_interest_id", referencedColumnName = "point_of_interest_id") @ManyToOne - private PointOfInterest pointOfInterestId; + private PointOfInterest locationPointOfInterestId; + @JoinColumn(name = "weather_station_point_of_interest_id", referencedColumnName = "point_of_interest_id") + @ManyToOne + private PointOfInterest weatherStationPointOfInterestId; public ForecastConfiguration() { } @@ -109,12 +112,12 @@ public class ForecastConfiguration implements Serializable { this.vipsCoreUserId = vipsCoreUserId; } - public PointOfInterest getPointOfInterestId() { - return pointOfInterestId; + public PointOfInterest getLocationPointOfInterestId() { + return locationPointOfInterestId; } - public void setPointOfInterestId(PointOfInterest pointOfInterestId) { - this.pointOfInterestId = pointOfInterestId; + public void setLocationPointOfInterestId(PointOfInterest locationPointOfInterestId) { + this.locationPointOfInterestId = locationPointOfInterestId; } @Override @@ -169,4 +172,18 @@ public class ForecastConfiguration implements Serializable { return null; } + /** + * @return the weatherStationPointOfInterestId + */ + public PointOfInterest getWeatherStationPointOfInterestId() { + return weatherStationPointOfInterestId; + } + + /** + * @param weatherStationPointOfInterestId the weatherStationPointOfInterestId to set + */ + public void setWeatherStationPointOfInterestId(PointOfInterest weatherStationPointOfInterestId) { + this.weatherStationPointOfInterestId = weatherStationPointOfInterestId; + } + } diff --git a/src/main/java/no/bioforsk/vips/logic/session/UserBean.java b/src/main/java/no/bioforsk/vips/logic/session/UserBean.java index 08b4321312396edb90b21a2c96abf9bb2f923467..cc98e84e629e3ff1e029add6ec29317fcd21eaff 100644 --- a/src/main/java/no/bioforsk/vips/logic/session/UserBean.java +++ b/src/main/java/no/bioforsk/vips/logic/session/UserBean.java @@ -1,14 +1,18 @@ package no.bioforsk.vips.logic.session; -import java.util.List; +import java.io.IOException; +import java.io.InputStream; import java.util.Map; +import java.util.Properties; import javax.ejb.LocalBean; import javax.ejb.Stateless; import javax.persistence.EntityManager; +import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; import javax.persistence.Query; -import no.bioforsk.vips.logic.entity.UserVipslogicRole; -import no.bioforsk.vips.logic.util.Globals; +import no.bioforsk.vips.logic.entity.UserAuthentication; +import no.bioforsk.vips.logic.entity.VipsLogicUser; +import no.bioforsk.vips.util.MD5Encrypter; /** * Handles user stuff, credentials @@ -18,29 +22,49 @@ import no.bioforsk.vips.logic.util.Globals; @LocalBean @Stateless public class UserBean { + + @PersistenceContext(unitName="VIPSLogic-PU") EntityManager em; - /** - * - * @param userId - * @return list of roles for this user - */ - public List<UserVipslogicRole> getUserVipslogicRole(Integer userId) + private Properties serverProperties; + + public VipsLogicUser authenticateUser(Map loginInfo) { - Query q = em.createNamedQuery("UserVipslogicRole.findByUserId", UserVipslogicRole.class); - q.setParameter("userId", userId); - return q.getResultList(); + + try + { + Query q = em.createNamedQuery("UserAuthentication.findByUsernameAndPassword", UserAuthentication.class); + q.setParameter("username", loginInfo.get("username")); + String salt = this.getVIPSLogicServerProperties().getProperty("MD5_SALT"); + q.setParameter("password", MD5Encrypter.getMD5HexString((String)loginInfo.get("password"),salt)); + UserAuthentication result = (UserAuthentication) q.getSingleResult(); + return result.getVipsLogicUser(); + } + catch(NoResultException | IOException ex) + { + if(ex instanceof IOException) + { + // TODO Throw an error instead + ex.printStackTrace(); + } + // TODO sensible handling + return null; + } } - public boolean isSuperUser(Map userInfo) + /** + * @return Properties for this server + */ + private Properties getVIPSLogicServerProperties() throws IOException { - List<UserVipslogicRole> roles = (List<UserVipslogicRole>) userInfo.get("roles"); - for(UserVipslogicRole role : roles) + if(this.serverProperties == null) { - if(role.getVipslogicRole().getVipslogicRoleId().equals(Globals.ROLE_SUPERUSER)) - return true; + this.serverProperties = new Properties(); + try (InputStream in = this.getClass().getResourceAsStream("/server.properties")) { + this.serverProperties.load(in); + } } - return false; + return this.serverProperties; } } diff --git a/src/main/java/no/bioforsk/vips/logic/util/Globals.java b/src/main/java/no/bioforsk/vips/logic/util/Globals.java index d259e3a8441d08563f8b8eaef3ca88f8b3fe1c90..1ff717a4f6b46acefc58300a9c0b4bde3e0df8cf 100644 --- a/src/main/java/no/bioforsk/vips/logic/util/Globals.java +++ b/src/main/java/no/bioforsk/vips/logic/util/Globals.java @@ -18,7 +18,9 @@ public class Globals { "/css", "/403", "/404", - "/rest" + "/rest", + "/test/testlogin.jsp", + "/test/testloginsuccess.jsp" }; // Point of interest type IDs diff --git a/src/main/resources/server.properties b/src/main/resources/server.properties new file mode 100644 index 0000000000000000000000000000000000000000..1e79ab2e99c74ed1694d7f40b8fb6c2b3f24bb44 --- /dev/null +++ b/src/main/resources/server.properties @@ -0,0 +1,6 @@ +# To change this template, choose Tools | Templates +# and open the template in the editor. + + +# The salt for Md5 can of course NOT be part of the source! TODO Must be moved to the server's properties +MD5_SALT=lfa98r32reoi30q8t3th34t9382ty932ty9hg98 diff --git a/src/main/webapp/test/testlogin.jsp b/src/main/webapp/test/testlogin.jsp new file mode 100644 index 0000000000000000000000000000000000000000..e36114a6033ae5256ff1640e1e498d02a09da577 --- /dev/null +++ b/src/main/webapp/test/testlogin.jsp @@ -0,0 +1,49 @@ +<%-- + Document : testlogin + Created on : Nov 25, 2013, 12:46:33 PM + Author : treinar +--%> +<%@page import="no.bioforsk.vips.logic.authenticate.OpenIdRelyingParty"%> +<%@page import="org.openid4java.message.AuthRequest"%> +<%@page import="org.openid4java.discovery.Identifier"%> +<%@page import="org.openid4java.discovery.DiscoveryInformation"%> +<%@page import="java.util.List"%> +<%@page import="org.openid4java.consumer.ConsumerManager"%> +<% + String openIdStr = request.getParameter("openId"); + String identifierName = ""; + String loginType = request.getParameter("loginType"); + if(loginType != null) + { + + OpenIdRelyingParty openId = new OpenIdRelyingParty(); + if(loginType.equals("Google")) + { + openIdStr = "https://www.google.com/accounts/o8/id"; + } + openId.authRequest(openIdStr, request, response); + } +%> + +<%@page contentType="text/html" pageEncoding="UTF-8"%> +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>Login test</title> + </head> + <body> + <h1>Login test</h1> + <form action="/test/testlogin.jsp" method="GET"> + <input type="hidden" name="loginType" value="openId"/> + <label for="openId">My OpenId</label> <a href="" target="new">What is OpenId?</a> + <input type="text" name="openId"/> + <input type="submit" value="Log in with my OpenID"/> + </form> + <form action="/test/testlogin.jsp" method="GET"> + <input type="hidden" name="loginType" value="Google"/> + <input type="submit" value="Log in with my Google Account"/> + </form> + <p><%=identifierName%></p> + </body> +</html> diff --git a/src/main/webapp/test/testloginsuccess.jsp b/src/main/webapp/test/testloginsuccess.jsp new file mode 100644 index 0000000000000000000000000000000000000000..2e7c277c69a38a63fa087ec4576e51b77a93ecb1 --- /dev/null +++ b/src/main/webapp/test/testloginsuccess.jsp @@ -0,0 +1,37 @@ +<%-- + Document : testloginsuccess + Created on : Nov 25, 2013, 4:04:27 PM + Author : treinar +--%> +<%@page import="no.bioforsk.vips.logic.authenticate.OpenIdAuthAttributes"%> +<%@page import="no.bioforsk.vips.logic.authenticate.OpenIdRelyingParty"%> +<%@page import="org.openid4java.discovery.Identifier"%> +<%@page import="org.openid4java.consumer.ConsumerManager"%> +<%@page import="org.openid4java.consumer.VerificationResult"%> +<%@page import="org.openid4java.discovery.DiscoveryInformation"%> +<%@page import="org.openid4java.message.ParameterList"%> +<% + OpenIdRelyingParty relP = new OpenIdRelyingParty(); + OpenIdAuthAttributes attributes = relP.verifyResponse(request); +%> + + +<%@page contentType="text/html" pageEncoding="UTF-8"%> +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>JSP Page</title> + </head> + <body> + <% if(attributes != null) { %> + <h1>Login success!</h1> + <ul> + <li><%= attributes.getOpenId()%></li> + <li><%= attributes.getEmail() %></li> + </ul> + <% } else { %> + <h1>Login failure</h1> + <% } %> + </body> +</html>