diff --git a/src/main/java/it/enea/xlab/GECORegistration/controller/DataController.java b/src/main/java/it/enea/xlab/GECORegistration/controller/DataController.java index f6a841196f6eadb84fadc9e101f20a129a9e201f..f86e85dc52e6faeeb6f01650ef1e4ad6ba66b919 100644 --- a/src/main/java/it/enea/xlab/GECORegistration/controller/DataController.java +++ b/src/main/java/it/enea/xlab/GECORegistration/controller/DataController.java @@ -144,9 +144,10 @@ public class DataController { { List data = pqueryInterface.findAll(); List tmdata; + List> parameterMetadata = new ArrayList>(); List list = null; for (ParametricQuery pq : data) { - List> parameterMetadata = new ArrayList>(); + parameterMetadata = new ArrayList>(); Map> resultList = pqm.getResultList(pq); for (String key : resultList.keySet()) { diff --git a/src/main/java/it/enea/xlab/GECORegistration/controller/UserController.java b/src/main/java/it/enea/xlab/GECORegistration/controller/UserController.java index 34ad3a9e65fa33aec0bda037f84137703ea51ac6..8436ee30ddb644ccc44722f5cf35d538c65405b7 100644 --- a/src/main/java/it/enea/xlab/GECORegistration/controller/UserController.java +++ b/src/main/java/it/enea/xlab/GECORegistration/controller/UserController.java @@ -449,7 +449,7 @@ public class UserController { return new ResponseEntity(new User(), HttpStatus.FORBIDDEN); } String subject = encryptionManager.encrypt(userdto.getEmail()); - User user = getUserFromSubject(subject).getBody(); + User user = userInterface.findBySubject(subject); //getUserFromSubject(subject).getBody(); if (user == null) { log.info("Used does not exist on local DB"); return new ResponseEntity(new User(), HttpStatus.FORBIDDEN); @@ -494,8 +494,9 @@ public class UserController { @ApiResponses(value = { @ApiResponse(code = 200, message = "Success"), @ApiResponse(code = 403, message = "Token not valid"), @ApiResponse(code = 500, message = "Token is null") }) - ResponseEntity checkToken( - @ApiParam(name = "token", type = "String", value = "The user's token", example = "", required = true) @RequestParam String token) { + ResponseEntity checkToken( + @ApiParam(name = "token", type = "String", value = "The user's token", example = "", required = true) + @RequestHeader(name = "Authorization", required=false) String token) { if (token == null || token == "") { log.info("Token is empty"); return new ResponseEntity(false, HttpStatus.INTERNAL_SERVER_ERROR); @@ -557,6 +558,40 @@ public class UserController { } + @ApiOperation(value = "Check if the token is valid and return the user", response = Boolean.class, tags = "") + @ApiResponses(value = { @ApiResponse(code = 200, message = "Success"), + @ApiResponse(code = 403, message = "Token not valid or access forbidden"), + @ApiResponse(code = 500, message = "Token is null") }) + @PostMapping("/user/getUserIdFromToken") + ResponseEntity getUserFromIdToken( + @ApiParam(name = "token", type = "String", value = "The user's ID-Provider token", example = "", required = true) + @RequestHeader(name = "Authorization", required=true) String token) { + User result = new User(); + + if (token == null || token == "") { + log.info("Token is empty"); + return new ResponseEntity(0, HttpStatus.INTERNAL_SERVER_ERROR); + } + UserDto userdto = idpClientManager.getUserFromToken(token); + + if (userdto == null) { + log.info("User not found on ID-Provider - Token is not valid"); + + return new ResponseEntity(0, HttpStatus.FORBIDDEN); + } + String subject = encryptionManager.encrypt(userdto.getEmail()); + User user = getUserFromSubject(subject).getBody(); + if (user == null) { + log.info("User not found on local DB"); + + return new ResponseEntity(0, HttpStatus.FORBIDDEN); + } + user.mergeWithDto(userdto); + + return new ResponseEntity(user.getUserid().intValue(), HttpStatus.OK); + + } + @ApiOperation(value = "List the devices associated to a user", response = Boolean.class, tags = "") @ApiResponses(value = { @ApiResponse(code = 200, message = "Success"), diff --git a/src/main/java/it/enea/xlab/GECORegistration/entity/data/AdmittedQueryValues.java b/src/main/java/it/enea/xlab/GECORegistration/entity/data/AdmittedQueryValues.java index f9c884c5b2802a22b58c0c5fd09173b5ffb59afe..26ebb26ebf0ae1ec7882986debe4f98c9eaf90f8 100644 --- a/src/main/java/it/enea/xlab/GECORegistration/entity/data/AdmittedQueryValues.java +++ b/src/main/java/it/enea/xlab/GECORegistration/entity/data/AdmittedQueryValues.java @@ -14,7 +14,7 @@ import lombok.Getter; import lombok.Setter; @Entity (name = "admittedqueryvalues") -@Table(name = "t_admittedqueryvalues") +@Table(name = "cruise.t_admittedqueryvalues") @Getter @Setter public class AdmittedQueryValues { diff --git a/src/main/java/it/enea/xlab/GECORegistration/entity/data/LocalQueryParameter.java b/src/main/java/it/enea/xlab/GECORegistration/entity/data/LocalQueryParameter.java index 8efa385e67fa28f7bac125f0a52d30b665d7c729..88ed447cf33c6ab3d51887a9fa9dddbc9c356634 100644 --- a/src/main/java/it/enea/xlab/GECORegistration/entity/data/LocalQueryParameter.java +++ b/src/main/java/it/enea/xlab/GECORegistration/entity/data/LocalQueryParameter.java @@ -3,6 +3,7 @@ package it.enea.xlab.GECORegistration.entity.data; import java.util.List; +import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @@ -17,15 +18,16 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @Entity (name = "localqueryparameter") -@Table (name= "localqueryparameters") +@Table (name= "cruise.localqueryparameters") public class LocalQueryParameter { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="localqueryparameterid") private Long paramId; - @JsonIgnore - private Long queryid; + //@JsonIgnore + //private Long queryid; private String description; @@ -54,13 +56,13 @@ public class LocalQueryParameter { this.paramId = paramId; } - public Long getQueryid() { - return queryid; - } - - public void setQueryid(Long queryid) { - this.queryid = queryid; - } +// public Long getQueryid() { +// return queryid; +// } +// +// public void setQueryid(Long queryid) { +// this.queryid = queryid; +// } public String getDescription() { return description; diff --git a/src/main/java/it/enea/xlab/GECORegistration/entity/data/ParametricQuery.java b/src/main/java/it/enea/xlab/GECORegistration/entity/data/ParametricQuery.java index 78b82d225dfcd10dbc97e90896c98037585614bc..cf594774a02ea827293a85ffd5ee95ec8d5aed38 100644 --- a/src/main/java/it/enea/xlab/GECORegistration/entity/data/ParametricQuery.java +++ b/src/main/java/it/enea/xlab/GECORegistration/entity/data/ParametricQuery.java @@ -28,7 +28,7 @@ import lombok.Setter; @Entity (name = "parametricquery") -@Table (name = "parametricquery") +@Table (name = "cruise.parametricquery") @Getter @Setter public class ParametricQuery { @@ -48,7 +48,7 @@ public class ParametricQuery { @ManyToMany @JoinTable( - name = "queries_parameters", + name = "cruise.queries_parameters", joinColumns = @JoinColumn (name = "queryid"), inverseJoinColumns = @JoinColumn(name = "paramid")) @@ -60,7 +60,7 @@ public class ParametricQuery { @ManyToMany @JoinTable( - name = "queries_admittedqueryvalues", + name = "cruise.queries_admittedqueryvalues", joinColumns = @JoinColumn (name = "queryid"), inverseJoinColumns = @JoinColumn(name = "admittedqueryvalueid")) private List admittedqueryvalues; diff --git a/src/main/java/it/enea/xlab/GECORegistration/identityManager/IdpClientManagerCached.java b/src/main/java/it/enea/xlab/GECORegistration/identityManager/IdpClientManagerCached.java index 4fd2a32e5270eeee0e74d4ee4f97da6073ff4ece..47add64de1e2929b5c2fa7999bc857ddd9c8fffc 100644 --- a/src/main/java/it/enea/xlab/GECORegistration/identityManager/IdpClientManagerCached.java +++ b/src/main/java/it/enea/xlab/GECORegistration/identityManager/IdpClientManagerCached.java @@ -1,18 +1,22 @@ package it.enea.xlab.GECORegistration.identityManager; import java.util.List; -import java.util.Map; -import org.springframework.stereotype.Service; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; import it.enea.scp.idp.sdk.model.UserDto; import it.enea.xlab.GECORegistration.entity.user.User; +import lombok.extern.log4j.Log4j2; //@Service +@Log4j2 public class IdpClientManagerCached extends IdpClientManager implements IIdpClientManager { - private Map usersList; + + @Autowired + IdpClientManager idpClientManager; @Override public String getTokenFromUsernameAndPassword(String username, String password) { @@ -21,10 +25,12 @@ public class IdpClientManagerCached extends IdpClientManager implements IIdpClie } @Override + //@Cacheable(value="users", key="#username") public User login(String username, String password) { + log.info("logging"); + return super.login(username, password); // TODO Auto-generated method stub - return null; - } + } @Override public boolean logout(String token) { @@ -63,9 +69,11 @@ public class IdpClientManagerCached extends IdpClientManager implements IIdpClie } @Override + @Cacheable(value="users",key="#token") public UserDto getUserFromToken(String token) { - // TODO Auto-generated method stub - return null; + log.info("getting user with token: " + token); + return super.getUserFromToken(token); + } @Override diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties index 0ea5fb523dd86f29f4e805d044da9780368cbef8..cd62c5c8ceae1beeee02995284bc6c37b71765fd 100644 --- a/src/main/resources/application-test.properties +++ b/src/main/resources/application-test.properties @@ -19,23 +19,37 @@ spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy ## PostgreSQL #Test - -spring.user-datasource-idp.jdbcUrl=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser -spring.user-datasource-idp.url=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser -spring.user-datasource-idp.username=selfuser -spring.user-datasource-idp.password=selfuser +spring.user-datasource-idp.jdbcUrl=jdbc:postgresql://datacollector.bologna.enea.it:5432/selfuser +spring.user-datasource-idp.hikari.url=jdbc:postgresql://datacollector.bologna.enea.it:5432/selfuser +spring.user-datasource-idp.username=dagosta +spring.user-datasource-idp.password=D@go037A spring.user-datasource-idp.driver-class-name=org.postgresql.Driver spring.user-datasource-idp.maximumPoolSize=2 spring.user-datasource-idp.minimumIdle=1 -spring.data-datasource-idp.jdbcUrl=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser -spring.data-datasource-idp.hikari.url=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser -spring.data-datasource-idp.username=selfuser -spring.data-datasource-idp.password=selfuser +#spring.user-datasource-idp.jdbcUrl=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser +#spring.user-datasource-idp.url=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser +#spring.user-datasource-idp.username=selfuser +#spring.user-datasource-idp.password=selfuser +#spring.user-datasource-idp.driver-class-name=org.postgresql.Driver +#spring.user-datasource-idp.maximumPoolSize=2 +#spring.user-datasource-idp.minimumIdle=1 + +#spring.data-datasource-idp.jdbcUrl=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser +#spring.data-datasource-idp.hikari.url=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser +#spring.data-datasource-idp.username=selfuser +#spring.data-datasource-idp.password=selfuser +#spring.data-datasource-idp.driver-class-name=org.postgresql.Driver +#spring.data-datasource-idp.maximumPoolSize=2 +#spring.data-datasource-idp.minimumIdle=1 +spring.data-datasource-idp.jdbcUrl=jdbc:postgresql://datacollector.bologna.enea.it:5432/selfuser +spring.data-datasource-idp.hikari.url=jdbc:postgresql://datacollector.bologna.enea.it:5432/selfuser +spring.data-datasource-idp.username=cruise +spring.data-datasource-idp.password=crU1s&& spring.data-datasource-idp.driver-class-name=org.postgresql.Driver spring.data-datasource-idp.maximumPoolSize=2 spring.data-datasource-idp.minimumIdle=1 - #spring.jpa.show-sql=true logging.level.org.hibernate.SQL=INFO #logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 4eb4604ddc57e47a2ab1366af55a5082d274a3b3..e326a393927af9c5ac3dd0a5ff2b14a595b95f31 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -20,18 +20,32 @@ spring.data-datasource-idp.hikari.maximumPoolSize=5 spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy ## PostgreSQL -spring.user-datasource-idp.jdbcUrl=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser -spring.user-datasource-idp.username=selfuser -spring.user-datasource-idp.password=selfuser -spring.user-datasource-idp.max-active=1 +spring.user-datasource-idp.jdbcUrl=jdbc:postgresql://datacollector.bologna.enea.it:5432/selfuser +spring.user-datasource-idp.hikari.url=jdbc:postgresql://datacollector.bologna.enea.it:5432/selfuser +spring.user-datasource-idp.username=dagosta +spring.user-datasource-idp.password=D@go037A spring.user-datasource-idp.driver-class-name=org.postgresql.Driver +spring.user-datasource-idp.maximumPoolSize=2 +#spring.user-datasource-idp.minimumIdle=1 +#spring.user-datasource-idp.jdbcUrl=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser +#spring.user-datasource-idp.username=selfuser +#spring.user-datasource-idp.password=selfuser +#spring.user-datasource-idp.max-active=1 +#spring.user-datasource-idp.driver-class-name=org.postgresql.Driver -spring.data-datasource-idp.jdbcUrl=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser -spring.data-datasource-idp.username=selfuser -spring.data-datasource-idp.password=selfuser -spring.data-datasource-idp.max-active=1 +#spring.data-datasource-idp.jdbcUrl=jdbc:postgresql://winter.bologna.enea.it:5432/selfuser +#spring.data-datasource-idp.username=selfuser +#spring.data-datasource-idp.password=selfuser +#spring.data-datasource-idp.max-active=1 +#spring.data-datasource-idp.driver-class-name=org.postgresql.Driver + +spring.data-datasource-idp.jdbcUrl=jdbc:postgresql://datacollector.bologna.enea.it:5432/selfuser +spring.data-datasource-idp.hikari.url=jdbc:postgresql://datacollector.bologna.enea.it:5432/selfuser +spring.data-datasource-idp.username=cruise +spring.data-datasource-idp.password=crU1s&& spring.data-datasource-idp.driver-class-name=org.postgresql.Driver +spring.data-datasource-idp.maximumPoolSize=1 #spring.jpa.show-sql=true #logging.level.org.hibernate.SQL=DEBUG diff --git a/src/test/java/it/enea/xlab/GECORegistration/GecoRegistrationSpringApplicationTests.java b/src/test/java/it/enea/xlab/GECORegistration/GecoRegistrationSpringApplicationTests.java index ace4bad206e72a2d4a8caca67ca402f912fddafd..00c97589af3052efc6879a8dfde5c9dfd741bc2e 100644 --- a/src/test/java/it/enea/xlab/GECORegistration/GecoRegistrationSpringApplicationTests.java +++ b/src/test/java/it/enea/xlab/GECORegistration/GecoRegistrationSpringApplicationTests.java @@ -28,6 +28,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultHandlers. import it.enea.xlab.GECORegistration.controller.UserController; import it.enea.xlab.GECORegistration.entity.user.User; import it.enea.xlab.GECORegistration.identityManager.IEncryptionManager; +import it.enea.xlab.GECORegistration.identityManager.IIdpClientManager; import it.enea.xlab.GECORegistration.identityManager.IdpClientManager; import it.enea.scp.idp.sdk.model.UserDto; @@ -66,7 +67,7 @@ class GecoRegistrationSpringApplicationTests { private MockMvc mvc; @Autowired - IdpClientManager idpClientManager; + IIdpClientManager idpClientManager; @Autowired IEncryptionManager encryptionManager; @@ -282,6 +283,21 @@ class GecoRegistrationSpringApplicationTests { .andDo(handler) .andDo(print()); + + mvc.perform( + post("/user/getUserIdFromToken") + .contentType(MediaType.APPLICATION_JSON) + .header("Authorization", token)) + .andExpect(status().isOk()) + .andDo(print()); + + mvc.perform( + post("/user/isTokenValid") + .contentType(MediaType.APPLICATION_JSON) + .header("Authorization", token)) + .andExpect(status().isOk()) + .andDo(print()); + mvc.perform( post("/data/getListOfFunctions") .contentType(MediaType.APPLICATION_JSON) @@ -311,7 +327,7 @@ class GecoRegistrationSpringApplicationTests { // .andDo(print()); String content ="{" - + "\"communityid\": 4,\n" + + "\"communityid\": 2,\n" + " \"queryid\":2,\n" + "\" endDate\": \"2021-09-22 23:59:59\",\n" + "\" startDate\":\"2021-09-22 00:00:00\"\n" @@ -329,7 +345,7 @@ class GecoRegistrationSpringApplicationTests { //.andExpect(jsonPath("$.result", greaterThan(2))) .andDo(print()); - content ="{\"communityid\": 4,\n" + content ="{\"communityid\": 2,\n" + " \"queryid\":1,\n" + "\" maxValue\": \"3000\",\n" + "\" minValue\":\"0\"\n" @@ -345,7 +361,7 @@ class GecoRegistrationSpringApplicationTests { .andExpect(status().isOk()) .andDo(print()); - content ="{\"communityid\": 4,\n" + content ="{\"communityid\": 2,\n" + " \"queryid\":5,\n" + "\" endDate\": \"2021-09-22 23:59:59\",\n" + "\" startDate\":\"2021-09-21 00:00:00\"\n" @@ -360,7 +376,7 @@ class GecoRegistrationSpringApplicationTests { .andExpect(status().isOk()) .andDo(print()); - content ="{\"communityid\": 4,\n" + content ="{\"communityid\": 2,\n" + " \"queryid\":2,\n" + "\" endDate\": \"2021-09-22 23:59:59\",\n" + "\" startDate\":\"2021-09-21 00:00:00\"\n" @@ -376,7 +392,7 @@ class GecoRegistrationSpringApplicationTests { .andExpect(status().isOk()) .andDo(print()); - content ="{\"communityid\": 4,\n" + content ="{\"communityid\": 2,\n" + " \"queryid\":6\n" + "}"; @@ -389,15 +405,6 @@ class GecoRegistrationSpringApplicationTests { .andExpect(status().isOk()) .andDo(print()); - - - // mvc.perform( - // post("/user/getDevices") - // .contentType(MediaType.APPLICATION_JSON) - // .param("token", token)) - // .andExpect(status().isOk()) - // .andDo(print()); - content ="{\"queryid\":4\n" + "}";