diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d449d82e7c9e46b43cb0564fd5fc2c7b9f4e4ac4..c9ef1bcca9471cd45a3ec0a5535da318b2335784 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -432,6 +432,7 @@ deploy:adapter: - morphemic-rc1.5 - morphemic-rc2.0 - proactive-dev + - fix-cloud-id image: $DOCKER_DIND_IMAGE services: - $DOCKER_DIND_SERVICE diff --git a/jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/UserController.java b/jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/UserController.java index a8bc8a02593673efa5c69fdae302cb993197497e..8246a725be457c8e7ae131872e25946f3feed64b 100644 --- a/jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/UserController.java +++ b/jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/UserController.java @@ -6,6 +6,7 @@ import eu.paasage.upperware.security.authapi.SecurityConstants; import eu.paasage.upperware.security.server.controller.request.ChangePasswordRequest; import eu.paasage.upperware.security.server.controller.request.NewUserRequest; import eu.paasage.upperware.security.server.controller.response.ExceptionResponse; +import eu.paasage.upperware.security.server.controller.response.UserDataResponse; import eu.paasage.upperware.security.server.controller.response.UserResponse; import eu.paasage.upperware.security.server.data.repository.RefreshToken; import eu.paasage.upperware.security.server.data.repository.User; @@ -105,6 +106,13 @@ public class UserController { return userService.getUsersList(); } + @GetMapping("/auth/{username}") + @ResponseStatus(HttpStatus.OK) + public UserDataResponse getUserData(@PathVariable("username") String username) { + log.info("GET request for user data for user: {}", username); + return userService.getUserDataResponse(username); + } + @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) { String defaultMessage = ex.getBindingResult().getAllErrors().get(0).getDefaultMessage(); diff --git a/jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/request/NewUserRequest.java b/jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/request/NewUserRequest.java index 59305c88abf91d5680500c8aa501d3efc8804502..eaad0459e806fa27da136b654b7b0cb21e1b4fa1 100644 --- a/jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/request/NewUserRequest.java +++ b/jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/request/NewUserRequest.java @@ -20,6 +20,10 @@ public class NewUserRequest { @ValidPassword() private String password; + private String fullName; + + private String mail; + private String passwordConfirmation; private UserRole userRole; diff --git a/jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/response/UserDataResponse.java b/jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/response/UserDataResponse.java new file mode 100644 index 0000000000000000000000000000000000000000..423ae67ce394026c0167ed7de7cf74c810fd8424 --- /dev/null +++ b/jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/response/UserDataResponse.java @@ -0,0 +1,19 @@ +package eu.paasage.upperware.security.server.controller.response; + +import eu.paasage.upperware.security.server.data.repository.UserRole; +import lombok.*; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserDataResponse { + private String username; + + private String fullName; + + private String mail; + + private UserRole userRole; +} diff --git a/jwt-server/src/main/java/eu/paasage/upperware/security/server/data/repository/User.java b/jwt-server/src/main/java/eu/paasage/upperware/security/server/data/repository/User.java index b16e9b4f9a193b5f4c92ae3ac4d41cf4ef207921..380cb4c0a6ed015b8cc7b1452a45a625dee6cb87 100644 --- a/jwt-server/src/main/java/eu/paasage/upperware/security/server/data/repository/User.java +++ b/jwt-server/src/main/java/eu/paasage/upperware/security/server/data/repository/User.java @@ -24,6 +24,12 @@ public class User { @Attribute(name = "sn") private String username; + @Attribute(name = "displayName") + private String fullName; + + @Attribute(name = "mail") + private String mail; + @JsonIgnore @Attribute(name = "userPassword") private String password; @@ -34,8 +40,10 @@ public class User { @Transient private boolean lockedAccount; - public User(String username, String password, UserRole userRole, boolean lockedAccount) { + public User(String username, String fullName, String mail, String password, UserRole userRole, boolean lockedAccount) { this.username = username; + this.fullName = fullName; + this.mail = mail; this.password = password; this.userRole = userRole; this.lockedAccount = lockedAccount; diff --git a/jwt-server/src/main/java/eu/paasage/upperware/security/server/data/service/UserService.java b/jwt-server/src/main/java/eu/paasage/upperware/security/server/data/service/UserService.java index b80b6d469752ff6a29a91fe0cb6131b1b56e4082..5b53c33a855dffb508673feea4a2159b43c3b4c2 100644 --- a/jwt-server/src/main/java/eu/paasage/upperware/security/server/data/service/UserService.java +++ b/jwt-server/src/main/java/eu/paasage/upperware/security/server/data/service/UserService.java @@ -4,6 +4,7 @@ import eu.paasage.upperware.security.authapi.SecurityConstants; import eu.paasage.upperware.security.authapi.token.JWTService; import eu.paasage.upperware.security.server.controller.request.ChangePasswordRequest; import eu.paasage.upperware.security.server.controller.request.NewUserRequest; +import eu.paasage.upperware.security.server.controller.response.UserDataResponse; import eu.paasage.upperware.security.server.controller.response.UserResponse; import eu.paasage.upperware.security.server.data.repository.User; import eu.paasage.upperware.security.server.data.repository.UserLdapRepository; @@ -64,15 +65,18 @@ public class UserService { public UserResponse create(NewUserRequest userRequest) { - User newUser = new User(userRequest.getUsername(), digestSHA(userRequest.getPassword()), userRequest.getUserRole(), false); + User newUser = new User(userRequest.getUsername(), userRequest.getFullName(), userRequest.getMail(), digestSHA(userRequest.getPassword()), userRequest.getUserRole(), false); String userDN = createUserDN(newUser.getUsername(), newUser.getUserRole()); DirContextAdapter context = new DirContextAdapter(userDN); context.setAttributeValues("objectclass", new String[] {"person"}); + context.setAttributeValues("objectclass", new String[] {"InetOrgPerson"}); context.setAttributeValue("cn", newUser.getUsername()); context.setAttributeValue("sn", newUser.getUsername()); + context.setAttributeValue("fullName", newUser.getFullName()); + context.setAttributeValue("mail", newUser.getMail()); context.setAttributeValue("userPassword", newUser.getPassword()); context.setAttributeValue("pwdPolicySubentry", "cn=ppolicy,dc=example,dc=org"); @@ -187,4 +191,15 @@ public class UserService { .userRole(findUserRole(user.getId())) .build(); } + + public UserDataResponse getUserDataResponse(String username) { + User user = userLdapRepository.findByUsername(username) + .orElseThrow(UserNotFoundException::new); + return UserDataResponse.builder() + .username(username) + .fullName(user.getFullName()) + .mail(user.getMail()) + .userRole(findUserRole(user.getId())) + .build(); + } }