diff --git a/dmp-backend/src/main/java/dao/entities/security/UserInfoDao.java b/dmp-backend/src/main/java/dao/entities/UserInfoDao.java similarity index 78% rename from dmp-backend/src/main/java/dao/entities/security/UserInfoDao.java rename to dmp-backend/src/main/java/dao/entities/UserInfoDao.java index 63a17532c..cd4bf85c4 100644 --- a/dmp-backend/src/main/java/dao/entities/security/UserInfoDao.java +++ b/dmp-backend/src/main/java/dao/entities/UserInfoDao.java @@ -1,9 +1,9 @@ -package dao.entities.security; +package dao.entities; import java.util.UUID; import dao.Dao; -import entities.security.UserInfo; +import entities.UserInfo; public interface UserInfoDao extends Dao { diff --git a/dmp-backend/src/main/java/dao/entities/security/UserInfoDaoImpl.java b/dmp-backend/src/main/java/dao/entities/UserInfoDaoImpl.java similarity index 95% rename from dmp-backend/src/main/java/dao/entities/security/UserInfoDaoImpl.java rename to dmp-backend/src/main/java/dao/entities/UserInfoDaoImpl.java index d6d806e60..4905d0caf 100644 --- a/dmp-backend/src/main/java/dao/entities/security/UserInfoDaoImpl.java +++ b/dmp-backend/src/main/java/dao/entities/UserInfoDaoImpl.java @@ -1,4 +1,4 @@ -package dao.entities.security; +package dao.entities; import java.util.List; import java.util.UUID; @@ -7,8 +7,8 @@ import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import dao.JpaDao; +import entities.UserInfo; import entities.security.UserAuth; -import entities.security.UserInfo; public class UserInfoDaoImpl extends JpaDao implements UserInfoDao { diff --git a/dmp-backend/src/main/java/entities/DMP.java b/dmp-backend/src/main/java/entities/DMP.java index f418e123b..e98764226 100644 --- a/dmp-backend/src/main/java/entities/DMP.java +++ b/dmp-backend/src/main/java/entities/DMP.java @@ -88,6 +88,14 @@ public class DMP implements Serializable { private Set researchers; +// @OneToMany(fetch = FetchType.EAGER) +// @JoinTable(name="\"UserDMP\"", +// joinColumns={@JoinColumn(name="dmp", referencedColumnName="\"ID\"")}, +// inverseJoinColumns={@JoinColumn(name="user", referencedColumnName="\"ID\"")} +// ) +// private Set users; + + public UUID getId() { return id; } @@ -168,6 +176,15 @@ public class DMP implements Serializable { this.researchers = researchers; } + +// public Set getUsers() { +// return users; +// } +// +// public void setUsers(Set users) { +// this.users = users; +// } + public String toString() { try { return new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).writeValueAsString(this); diff --git a/dmp-backend/src/main/java/entities/UserDMP.java b/dmp-backend/src/main/java/entities/UserDMP.java new file mode 100644 index 000000000..f200e0ddd --- /dev/null +++ b/dmp-backend/src/main/java/entities/UserDMP.java @@ -0,0 +1,76 @@ +//package entities; +// +//import java.io.Serializable; +//import java.util.UUID; +// +//import javax.persistence.Column; +//import javax.persistence.Entity; +//import javax.persistence.GeneratedValue; +//import javax.persistence.Id; +//import javax.persistence.Table; +// +//import org.hibernate.annotations.GenericGenerator; +//import org.hibernate.annotations.Type; +// +//import com.fasterxml.jackson.annotation.JsonIdentityInfo; +//import com.fasterxml.jackson.annotation.ObjectIdGenerators; +// +//@Entity +//@Table(name="\"UserInfo\"") +//@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="autoid") +//public class UserDMP implements Serializable{ +// +// private static final long serialVersionUID = -4467370784003784660L; +// +// +// @Id +// @GeneratedValue +// @GenericGenerator(name = "uuid2", strategy = "uuid2") +// @Column(name = "id", updatable = false, nullable = false, columnDefinition = "BINARY(16)") +// private UUID id; +// +// @Type(type="org.hibernate.type.PostgresUUIDType") //DEPWARN dependency to Hibernate and PostgreSQL +// @Column(name = "user", nullable = false) +// private UUID user; +// +// @Type(type="org.hibernate.type.PostgresUUIDType") //DEPWARN dependency to Hibernate and PostgreSQL +// @Column(name = "dmp", nullable = false) +// private UUID dmp; +// +// @Column(name = "role") +// private Integer role; +// +// public UUID getId() { +// return id; +// } +// +// public void setId(UUID id) { +// this.id = id; +// } +// +// public UUID getUser() { +// return user; +// } +// +// public void setUser(UUID user) { +// this.user = user; +// } +// +// public UUID getDmp() { +// return dmp; +// } +// +// public void setDmp(UUID dmp) { +// this.dmp = dmp; +// } +// +// public Integer getRole() { +// return role; +// } +// +// public void setRole(Integer role) { +// this.role = role; +// } +// +// +//} diff --git a/dmp-backend/src/main/java/entities/security/UserInfo.java b/dmp-backend/src/main/java/entities/UserInfo.java similarity index 75% rename from dmp-backend/src/main/java/entities/security/UserInfo.java rename to dmp-backend/src/main/java/entities/UserInfo.java index 23710c997..df718fef8 100644 --- a/dmp-backend/src/main/java/entities/security/UserInfo.java +++ b/dmp-backend/src/main/java/entities/UserInfo.java @@ -1,7 +1,8 @@ -package entities.security; +package entities; import java.io.Serializable; import java.util.Date; +import java.util.Set; import java.util.UUID; import javax.persistence.Column; @@ -10,6 +11,8 @@ import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Temporal; @@ -21,10 +24,12 @@ import org.hibernate.annotations.Type; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import entities.security.UserAuth; + @Entity @Table(name="\"UserInfo\"") -@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="autoid") +@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") public class UserInfo implements Serializable{ private static final long serialVersionUID = 1225151430484658395L; @@ -32,13 +37,10 @@ public class UserInfo implements Serializable{ @Id @GeneratedValue @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Column(name = "autoid", updatable = false, nullable = false, columnDefinition = "BINARY(16)") - private UUID autoid; + @Column(name = "id", updatable = false, nullable = false, columnDefinition = "BINARY(16)") + private UUID id; - @Column(name = "identification", nullable = false) - private String identification = null; - @Column(name = "email", nullable = false) private String email = null; @@ -71,12 +73,37 @@ public class UserInfo implements Serializable{ @Column(name = "additionalinfo", columnDefinition = "xml", nullable = true) private String additionalinfo; - public String getIdentification() { - return identification; +// @OneToMany(fetch = FetchType.EAGER) +// @JoinTable(name="\"UserDMP\"", +// joinColumns={@JoinColumn(name="user", referencedColumnName="\"ID\"")}, +// inverseJoinColumns={@JoinColumn(name="dmp", referencedColumnName="\"ID\"")} +// ) +// private Set users; + + + + public UUID getId() { + return id; } - public void setIdentification(String identification) { - this.identification = identification; + public void setId(UUID id) { + this.id = id; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public Date getLastloggedin() { + return lastloggedin; + } + + public void setLastloggedin(Date lastloggedin) { + this.lastloggedin = lastloggedin; } public String getEmail() { diff --git a/dmp-backend/src/main/java/login/Login.java b/dmp-backend/src/main/java/login/Login.java index 83396c21a..617a890a3 100644 --- a/dmp-backend/src/main/java/login/Login.java +++ b/dmp-backend/src/main/java/login/Login.java @@ -21,10 +21,10 @@ import org.springframework.web.bind.annotation.RestController; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import dao.entities.UserInfoDao; import dao.entities.security.UserAuthDao; -import dao.entities.security.UserInfoDao; +import entities.UserInfo; import entities.security.UserAuth; -import entities.security.UserInfo; import security.TokenSessionManager; diff --git a/dmp-backend/src/main/java/rest/proxy/Proxy.java b/dmp-backend/src/main/java/proxy/Proxy.java similarity index 95% rename from dmp-backend/src/main/java/rest/proxy/Proxy.java rename to dmp-backend/src/main/java/proxy/Proxy.java index 4678ee955..a4cffe510 100644 --- a/dmp-backend/src/main/java/rest/proxy/Proxy.java +++ b/dmp-backend/src/main/java/proxy/Proxy.java @@ -1,4 +1,4 @@ -package rest.proxy; +package proxy; import java.io.BufferedReader; import java.io.IOException; @@ -57,12 +57,12 @@ public class Proxy { while ((inputLine = in.readLine()) != null) response.append(inputLine); in.close(); - } else { + return ResponseEntity.status(HttpStatus.OK).body(response.toString()); + } + else { return ResponseEntity.status(HttpStatus.FORBIDDEN).body("{'reason': 'Remote server responded with: "+responseCode+"'}"); } - return ResponseEntity.status(HttpStatus.OK).body(response.toString()); - } catch (IOException | URISyntaxException e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("{'reason': 'Could not proxy to given host'}"); } diff --git a/dmp-backend/src/main/java/rest/entities/Datasets.java b/dmp-backend/src/main/java/rest/entities/Datasets.java index 487c29711..2cad4479b 100644 --- a/dmp-backend/src/main/java/rest/entities/Datasets.java +++ b/dmp-backend/src/main/java/rest/entities/Datasets.java @@ -257,6 +257,7 @@ public class Datasets { try { return ResponseEntity.status(HttpStatus.CREATED).body(objectMapper.writeValueAsString(createdDatasetProfile)); } catch (JsonProcessingException e) { + e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("{\"msg\":\"Could not set dataset profile!\"}"); } diff --git a/dmp-backend/src/main/java/rest/entities/Projects.java b/dmp-backend/src/main/java/rest/entities/Projects.java index f9fdf63d1..5c806d605 100644 --- a/dmp-backend/src/main/java/rest/entities/Projects.java +++ b/dmp-backend/src/main/java/rest/entities/Projects.java @@ -132,6 +132,7 @@ public class Projects { } + @Transactional @RequestMapping(method = RequestMethod.POST, value = { "/project/create" }, consumes = "application/json", produces="application/json") public @ResponseBody ResponseEntity setProject(@RequestBody Project project) { diff --git a/dmp-backend/src/main/java/security/CustomAuthenticationProvider.java b/dmp-backend/src/main/java/security/CustomAuthenticationProvider.java index 71b458f81..4094e9c7b 100644 --- a/dmp-backend/src/main/java/security/CustomAuthenticationProvider.java +++ b/dmp-backend/src/main/java/security/CustomAuthenticationProvider.java @@ -12,8 +12,8 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.stereotype.Component; -import dao.entities.security.UserInfoDao; -import entities.security.UserInfo; +import dao.entities.UserInfoDao; +import entities.UserInfo; import exceptions.NonValidTokenException; import security.validators.GoogleTokenValidator; import security.validators.NativeTokenValidator; @@ -64,7 +64,6 @@ public class CustomAuthenticationProvider implements AuthenticationProvider { else throw new AuthenticationServiceException("Authentication failed"); - } @Override diff --git a/dmp-backend/src/main/java/security/validators/GoogleTokenValidator.java b/dmp-backend/src/main/java/security/validators/GoogleTokenValidator.java index cc381c298..a6f07646a 100644 --- a/dmp-backend/src/main/java/security/validators/GoogleTokenValidator.java +++ b/dmp-backend/src/main/java/security/validators/GoogleTokenValidator.java @@ -12,7 +12,7 @@ import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; -import entities.security.UserInfo; +import entities.UserInfo; import exceptions.NonValidTokenException; public class GoogleTokenValidator implements TokenValidator { diff --git a/dmp-backend/src/main/webapp/WEB-INF/applicationContext.xml b/dmp-backend/src/main/webapp/WEB-INF/applicationContext.xml index eda1d3d0e..5b2d0c977 100644 --- a/dmp-backend/src/main/webapp/WEB-INF/applicationContext.xml +++ b/dmp-backend/src/main/webapp/WEB-INF/applicationContext.xml @@ -31,7 +31,7 @@ - + @@ -100,7 +100,7 @@ - + diff --git a/dmp-backend/src/main/webapp/WEB-INF/dmp-backend-login-servlet.xml b/dmp-backend/src/main/webapp/WEB-INF/dmp-backend-login-servlet.xml index 4d2127185..b09d16973 100644 --- a/dmp-backend/src/main/webapp/WEB-INF/dmp-backend-login-servlet.xml +++ b/dmp-backend/src/main/webapp/WEB-INF/dmp-backend-login-servlet.xml @@ -10,7 +10,7 @@ http://www.springframework.org/schema/beans/spring-beans-4.1.xsd"> - + diff --git a/dmp-backend/src/main/webapp/WEB-INF/dmp-backend-proxy-servlet.xml b/dmp-backend/src/main/webapp/WEB-INF/dmp-backend-proxy-servlet.xml new file mode 100644 index 000000000..a24cbb4af --- /dev/null +++ b/dmp-backend/src/main/webapp/WEB-INF/dmp-backend-proxy-servlet.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dmp-backend/src/main/webapp/WEB-INF/dmp-backend-rest-servlet.xml b/dmp-backend/src/main/webapp/WEB-INF/dmp-backend-rest-servlet.xml index 1b2b28672..5bce8017b 100644 --- a/dmp-backend/src/main/webapp/WEB-INF/dmp-backend-rest-servlet.xml +++ b/dmp-backend/src/main/webapp/WEB-INF/dmp-backend-rest-servlet.xml @@ -16,9 +16,7 @@ - - - + diff --git a/dmp-backend/src/main/webapp/WEB-INF/web.xml b/dmp-backend/src/main/webapp/WEB-INF/web.xml index 00096c71c..13fdb5e4c 100644 --- a/dmp-backend/src/main/webapp/WEB-INF/web.xml +++ b/dmp-backend/src/main/webapp/WEB-INF/web.xml @@ -3,7 +3,20 @@ dmp-backend - + + dmp-backend-proxy + org.springframework.web.servlet.DispatcherServlet + 1 + + + dmp-backend-proxy + /proxy/* + + + org.springframework.web.context.ContextLoaderListener + + + dmp-backend-login org.springframework.web.servlet.DispatcherServlet diff --git a/dmp-db-scema/DataManagementPlanDB.sql b/dmp-db-scema/DataManagementPlanDB.sql index 9a97eae62..67cd5b12a 100644 --- a/dmp-db-scema/DataManagementPlanDB.sql +++ b/dmp-db-scema/DataManagementPlanDB.sql @@ -25,7 +25,10 @@ drop table if exists "Registry" cascade; drop table if exists "DatasetService" cascade; drop table if exists "DatasetRegistry" cascade; drop table if exists "DatasetDataRepository" cascade; -drop table if exists "UserInfo" cascade; +DROP table if exists "UserDMP" cascade; +DROP table if exists "UserInfo" cascade; +DROP table if exists "UserAuth" cascade; + -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; @@ -447,12 +450,13 @@ ALTER TABLE ONLY "DatasetService" ADD CONSTRAINT "DatasetServiceServiceReference" FOREIGN KEY ("Service") REFERENCES "Service"("ID"); +DROP table if exists "UserDMP"; DROP table if exists "UserInfo"; +DROP table if exists "UserAuth"; CREATE TABLE "UserInfo" ( - "autoid" uuid DEFAULT uuid_generate_v4() NOT NULL, - "identification" character varying(500) NOT NULL, - "email" character varying(250) NOT NULL, + "id" uuid DEFAULT uuid_generate_v4() UNIQUE NOT NULL, + "email" character varying(250) UNIQUE NOT NULL, "authorization_level" smallint NOT NULL, "usertype" smallint NOT NULL, "authentication" uuid, @@ -461,15 +465,13 @@ CREATE TABLE "UserInfo" ( "created" timestamp, "lastloggedin" timestamp, "additionalinfo" xml, - PRIMARY KEY (identification, email) + PRIMARY KEY (id) ); COMMENT ON COLUMN "UserInfo"."authorization_level" IS 'This stores the authorization level of the user: 0 admin, 1 user, being able to be extended furthermore'; COMMENT ON COLUMN "UserInfo"."usertype" IS 'This stores the type of user: 0 -> internal, 1 external'; -DROP table if exists "UserAuth"; - CREATE TABLE "UserAuth" ( "id" uuid DEFAULT uuid_generate_v4() NOT NULL UNIQUE, "username" character varying(200) NOT NULL, @@ -483,8 +485,21 @@ ALTER TABLE "UserInfo" ADD CONSTRAINT fkey_userinfo_userauth FOREIGN KEY ("authe COMMENT ON COLUMN "UserAuth"."password" IS 'This field stores a password hash'; + +create table "UserDMP" ( + "id" uuid DEFAULT uuid_generate_v4() NOT NULL, + "user" uuid NOT NULL, + "dmp" uuid NOT NUll, + "role" integer +); + +ALTER TABLE "UserDMP" ADD CONSTRAINT fkey_userdmp_user FOREIGN KEY ("user") REFERENCES "UserInfo"("id"); +ALTER TABLE "UserDMP" ADD CONSTRAINT fkey_userdmp_dmp FOREIGN KEY ("dmp") REFERENCES "DMP"("ID"); + + ALTER TABLE "UserInfo" OWNER TO dmptool; ALTER TABLE "UserAuth" OWNER TO dmptool; +ALTER TABLE "UserDMP" OWNER TO dmptool;