From b293bbfef806967cc2c542ec08fc25a2eb1a91c5 Mon Sep 17 00:00:00 2001 From: Jan Marchel Date: Wed, 17 Nov 2021 10:11:13 +0100 Subject: [PATCH 1/7] cutting unnecessary prefix from hardware id --- .../adapter/planexecutor/colosseum/NodeTaskExecutor.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java b/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java index 559800a51..25aa1da05 100644 --- a/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java +++ b/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java @@ -59,11 +59,16 @@ public class NodeTaskExecutor extends RunnableTaskExecutor { nodeJSON.put("taskName", taskBody.getTaskName()); nodeJSON.put("nodeName", taskBody.getNodeName()); JSONObject nodeCandidateInformationJSON = new JSONObject(); + if(taskBody.getNodeCandidate().getCloud().getApi().getProviderName().equals("openstack")){ + nodeCandidateInformationJSON.put("hardwareProviderId", checkEmptiness(taskBody.getNodeCandidate().getHardware().getProviderId().substring(4), "hardwareProviderId")); + }else{ + nodeCandidateInformationJSON.put("hardwareProviderId", checkEmptiness(taskBody.getNodeCandidate().getHardware().getProviderId(), "hardwareProviderId")); + } + nodeCandidateInformationJSON.put("hardwareProviderId", checkEmptiness(taskBody.getNodeCandidate().getHardware().getProviderId(), "hardwareProviderId")); nodeCandidateInformationJSON.put("ID", checkEmptiness(taskBody.getNodeCandidate().getId(), "ID")); nodeCandidateInformationJSON.put("cloudID", checkEmptiness(taskBody.getNodeCandidate().getCloud().getId(), "cloudID")); nodeCandidateInformationJSON.put("locationName", checkEmptiness(taskBody.getNodeCandidate().getLocation().getName(), "locationName")); nodeCandidateInformationJSON.put("imageProviderId", checkEmptiness(taskBody.getNodeCandidate().getImage().getProviderId(), "imageProviderId")); - nodeCandidateInformationJSON.put("hardwareProviderId", checkEmptiness(taskBody.getNodeCandidate().getHardware().getProviderId(), "hardwareProviderId")); nodeJSON.put("nodeCandidateInformation", nodeCandidateInformationJSON); nodesJSONArray.put(nodeJSON); log.info("NodeTaskExecutor->addIAASNode: [application id: {}] ProActive node(s) (JSONArray): \n{}", applicationId, nodesJSONArray); -- GitLab From 1e30a89f1dec0c455fceb7f49080468adbc04ecf Mon Sep 17 00:00:00 2001 From: Jan Marchel Date: Fri, 19 Nov 2021 09:19:23 +0100 Subject: [PATCH 2/7] Adding new cloud type- BYON --- .../eu/passage/upperware/commons/model/internal/CloudType.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/melodic-commons/src/main/java/eu/passage/upperware/commons/model/internal/CloudType.java b/melodic-commons/src/main/java/eu/passage/upperware/commons/model/internal/CloudType.java index 06dc85b9b..e427760ca 100644 --- a/melodic-commons/src/main/java/eu/passage/upperware/commons/model/internal/CloudType.java +++ b/melodic-commons/src/main/java/eu/passage/upperware/commons/model/internal/CloudType.java @@ -3,5 +3,6 @@ package eu.passage.upperware.commons.model.internal; public enum CloudType { PRIVATE, PUBLIC, - SIMULATION; + SIMULATION, + BYON; } -- GitLab From 5a57ea64be3e7ab88a1a6893ee82c795d4d3ee1b Mon Sep 17 00:00:00 2001 From: ipatini Date: Wed, 24 Nov 2021 11:19:51 +0200 Subject: [PATCH 3/7] EMS: Control Service: Added EMS server exit endpoint. Modified run.* to support restart --- event-management/bin/run.bat | 9 +++++++ event-management/bin/run.sh | 16 +++++++++---- .../control/ControlServiceApplication.java | 24 ++++++++++++------- .../control/ControlServiceController.java | 22 +++++++++++++---- .../control/ControlServiceCoordinator.java | 7 +++++- 5 files changed, 59 insertions(+), 19 deletions(-) diff --git a/event-management/bin/run.bat b/event-management/bin/run.bat index 705597fad..d156520fa 100644 --- a/event-management/bin/run.bat +++ b/event-management/bin/run.bat @@ -62,12 +62,21 @@ rem set JAVA_OPTS=-Djavax.net.debug=all echo MELODIC_CONFIG_DIR=%MELODIC_CONFIG_DIR% echo Starting EMS server... +IF NOT DEFINED RESTART_EXIT_CODE set RESTART_EXIT_CODE=99 +:_restart_ems + rem Use when Esper is packaged in control-service.jar rem java %JAVA_OPTS% -Djasypt.encryptor.password=%JASYPT_PASSWORD% -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -jar %JARS_DIR%\control-service.jar --logging.config=file:%LOG_CONFIG_FILE% rem Use when Esper is NOT packaged in control-service.jar java %JAVA_OPTS% -Djasypt.encryptor.password=%JASYPT_PASSWORD% -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -cp %JARS_DIR%\control-service.jar -Dloader.path=%JARS_DIR%\esper-7.1.0.jar org.springframework.boot.loader.PropertiesLauncher -nolog --logging.config=file:%LOG_CONFIG_FILE% %* +if errorlevel %RESTART_EXIT_CODE% ( + echo Restarting EMS server... + goto :_restart_ems +) +echo EMS server exited + rem e.g. --spring.config.location=%MELODIC_CONFIG_DIR%\ rem e.g. --spring.config.name=application.properties diff --git a/event-management/bin/run.sh b/event-management/bin/run.sh index bf17867e3..7aef86f03 100755 --- a/event-management/bin/run.sh +++ b/event-management/bin/run.sh @@ -66,11 +66,19 @@ fi echo "MELODIC_CONFIG_DIR=${MELODIC_CONFIG_DIR}" echo "Starting EMS server..." -# Use when Esper is packaged in control-service.jar -# java $JAVA_OPTS -Djasypt.encryptor.password=$JASYPT_PASSWORD -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -jar $JARS_DIR/control-service/target/control-service.jar --logging.config=file:$LOG_CONFIG_FILE +if [[ -z $RESTART_EXIT_CODE ]]; then RESTART_EXIT_CODE=99; export RESTART_EXIT_CODE; fi +retCode=$RESTART_EXIT_CODE +while :; do + # Use when Esper is packaged in control-service.jar + # java $JAVA_OPTS -Djasypt.encryptor.password=$JASYPT_PASSWORD -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -jar $JARS_DIR/control-service/target/control-service.jar --logging.config=file:$LOG_CONFIG_FILE -# Use when Esper is NOT packaged in control-service.jar -java $JAVA_OPTS -Djasypt.encryptor.password=$JASYPT_PASSWORD -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -cp ${JARS_DIR}/control-service.jar -Dloader.path=${JARS_DIR}/esper-7.1.0.jar org.springframework.boot.loader.PropertiesLauncher --logging.config=file:$LOG_CONFIG_FILE $* + # Use when Esper is NOT packaged in control-service.jar + java $JAVA_OPTS -Djasypt.encryptor.password=$JASYPT_PASSWORD -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -cp ${JARS_DIR}/control-service.jar -Dloader.path=${JARS_DIR}/esper-7.1.0.jar org.springframework.boot.loader.PropertiesLauncher --logging.config=file:$LOG_CONFIG_FILE $* + + retCode=$? + if [[ $retCode -eq $RESTART_EXIT_CODE ]]; then echo "Restarting EMS server..."; else break; fi +done +echo "EMS server exited" # Extra parameters # e.g. --spring.config.location=$MELODIC_CONFIG_DIR diff --git a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceApplication.java b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceApplication.java index 3913e1cde..923581db5 100644 --- a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceApplication.java +++ b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceApplication.java @@ -91,22 +91,28 @@ public class ControlServiceApplication implements ApplicationContextAware { synchronized static void exitApp(int exitCode, long gracePeriod) { if (exitTimer==null) { - // Close SpringBoot application - log.info("ControlServiceApplication.exitApp(): Closing application context..."); - ExitCodeGenerator exitCodeGenerator = () -> exitCode; - SpringApplication.exit(applicationContext, exitCodeGenerator); - - // Wait for 'gracePeriod' seconds before force JVM to exit + // Wait for 'gracePeriod' seconds before forcing JVM to exit log.info("ControlServiceApplication.exitApp(): Wait for {}sec before exit", gracePeriod); - exitTimer = new Timer("exit-app-grace-period-timer", true); + exitTimer = new Timer("exit-timer", true); exitTimer.schedule(new TimerTask() { @Override public void run() { - log.info("ControlServiceApplication.exitApp(): Exiting..."); + log.info("ControlServiceApplication.exitApp(): exit-timer: Exiting with code: {}", exitCode); System.exit(exitCode); - log.info("ControlServiceApplication.exitApp(): Bye"); + log.info("ControlServiceApplication.exitApp(): exit-timer: Bye"); } }, gracePeriod * 1000); + + // Close SpringBoot application + log.info("ControlServiceApplication.exitApp(): Closing application context..."); + ExitCodeGenerator exitCodeGenerator = () -> { + log.info("ControlServiceApplication.exitApp(): exitCodeGenerator: Exit code: {}", exitCode); + return exitCode; + }; + SpringApplication.exit(applicationContext, exitCodeGenerator); + log.info("ControlServiceApplication.exitApp(): Exiting with code: {}", exitCode); + System.exit(exitCode); + } else { log.warn("ControlServiceApplication.exitApp(): Exit timer has already started: {}", exitTimer); } diff --git a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceController.java b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceController.java index 87d88092a..9d0b932d7 100644 --- a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceController.java +++ b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceController.java @@ -433,15 +433,27 @@ public class ControlServiceController { // EMS status and information query methods // ------------------------------------------------------------------------------------------------------------ - @RequestMapping(value = { "/ems/shutdown", "/ems/shutdown/{exitApp}" }, method = {GET, POST}) - public String emsShutdown(@PathVariable Optional exitApp) { - boolean _exitApp = exitApp.orElse(false); - log.info("ControlServiceController.emsShutdown(): exitApp={}", _exitApp); + @RequestMapping(value = "/ems/shutdown", method = {GET, POST}) + public String emsShutdown() { + log.info("ControlServiceController.emsShutdown(): "); coordinator.emsShutdown(); - if (_exitApp) coordinator.emsExit(); return "OK"; } + @RequestMapping(value = { "/ems/exit", "/ems/exit/{exitCode}" }, method = {GET, POST}) + public String emsExit(@PathVariable Optional exitCode) { + if (properties.isExitAllowed()) { + int _exitCode = exitCode.orElse(properties.getExitCode()); + log.info("ControlServiceController.emsExit(): exitCode={}", _exitCode); + coordinator.emsShutdown(); + coordinator.emsExit(_exitCode); + return "OK"; + } else { + log.info("ControlServiceController.emsExit(): Exiting EMS is not allowed"); + return "NOT ALLOWED"; + } + } + @RequestMapping(value = "/ems/status", method = {GET, POST}, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public String emsStatus() { diff --git a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceCoordinator.java b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceCoordinator.java index 3fa702d22..9f528cdda 100644 --- a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceCoordinator.java +++ b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceCoordinator.java @@ -685,10 +685,15 @@ public class ControlServiceCoordinator { @Async synchronized void emsExit() { + emsExit(properties.getExitCode()); + } + + @Async + synchronized void emsExit(int exitCode) { if (properties.isExitAllowed()) { // Signal SpringBootApp to exit log.info("ControlServiceCoordinator.emsExit(): Signaling exit..."); - ControlServiceApplication.exitApp(properties.getExitCode(), properties.getExitGracePeriod()); + ControlServiceApplication.exitApp(exitCode, properties.getExitGracePeriod()); log.info("ControlServiceCoordinator.emsExit(): Signaling exit... done"); } else { log.warn("ControlServiceCoordinator.emsExit(): Exit is not allowed"); -- GitLab From 3e792223afa4f4836340ad9668e4bda6aaf7f70e Mon Sep 17 00:00:00 2001 From: Jan Marchel Date: Fri, 26 Nov 2021 11:26:13 +0100 Subject: [PATCH 4/7] cleaning byon nodes from sal --- .../proactive/ProactiveClientServiceGUI.java | 2 ++ .../proactive/ProactiveClientServiceGUIImpl.java | 5 +++++ .../guibackend/controller/byon/ByonController.java | 8 ++++++++ .../upperware/guibackend/service/byon/ByonService.java | 10 ++++++++++ 4 files changed, 25 insertions(+) diff --git a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUI.java b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUI.java index b0d71ce8a..180b8c27e 100644 --- a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUI.java +++ b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUI.java @@ -26,4 +26,6 @@ public interface ProactiveClientServiceGUI extends IProactiveClientServiceConnec List getAllNodes(); List getAllMonitors(); + + boolean deleteByonNode(String byonId); } diff --git a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUIImpl.java b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUIImpl.java index 484522982..440ea1104 100644 --- a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUIImpl.java +++ b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUIImpl.java @@ -64,4 +64,9 @@ public class ProactiveClientServiceGUIImpl extends ProactiveClientServiceConnect public List getAllMonitors() { return getPAGateway().map(PAGateway::getMonitorsList).orElse(Collections.emptyList()); } + + @Override + public boolean deleteByonNode(String byonId) { + return getPAGateway().map(paGateway -> paGateway.deleteByonNode(byonId)).orElse(false); + } } diff --git a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/controller/byon/ByonController.java b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/controller/byon/ByonController.java index 15ab5cded..3246e260f 100644 --- a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/controller/byon/ByonController.java +++ b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/controller/byon/ByonController.java @@ -95,4 +95,12 @@ public class ByonController { log.info("GET request for byon enums"); return byonService.getByonEnums(); } + + @PutMapping("/cleanByon") + @ResponseStatus(HttpStatus.NO_CONTENT) + public void cleanByonNodes() { + log.info("Put request for byon nodes purging"); + byonService.cleanByon(); + log.info("Put request for byon nodes purging finished"); + } } diff --git a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/service/byon/ByonService.java b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/service/byon/ByonService.java index 9ef14da97..111587778 100644 --- a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/service/byon/ByonService.java +++ b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/service/byon/ByonService.java @@ -199,4 +199,14 @@ public class ByonService { return byonNodes; } + + public void cleanByon() { + log.info("[ByonService]: cleanByon starting"); + List byonNodeList = getAllByonNodesList(); + for(ByonNode byonNode : byonNodeList) { + String byonId = byonNode.getId(); + log.info("[ByonService]: deletingByon for id: {}", byonId); + proactiveClientServiceGUI.deleteByonNode(byonId); + } + } } -- GitLab From 90e6797c3d2846ee3d656f4bbf70db3ef1c3f5d5 Mon Sep 17 00:00:00 2001 From: Jan Marchel Date: Mon, 7 Feb 2022 17:29:21 +0100 Subject: [PATCH 5/7] fix --- .../adapter/planexecutor/colosseum/NodeTaskExecutor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java b/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java index 25aa1da05..e73969818 100644 --- a/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java +++ b/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java @@ -61,12 +61,13 @@ public class NodeTaskExecutor extends RunnableTaskExecutor { JSONObject nodeCandidateInformationJSON = new JSONObject(); if(taskBody.getNodeCandidate().getCloud().getApi().getProviderName().equals("openstack")){ nodeCandidateInformationJSON.put("hardwareProviderId", checkEmptiness(taskBody.getNodeCandidate().getHardware().getProviderId().substring(4), "hardwareProviderId")); + nodeCandidateInformationJSON.put("cloudID", checkEmptiness(taskBody.getNodeCandidate().getCloud().getId(), "cloudID")); }else{ nodeCandidateInformationJSON.put("hardwareProviderId", checkEmptiness(taskBody.getNodeCandidate().getHardware().getProviderId(), "hardwareProviderId")); + nodeCandidateInformationJSON.put("cloudID", checkEmptiness(StringUtils.substring(taskBody.getNodeCandidate().getCloud().getId(), 0,7),"cloudID")); } nodeCandidateInformationJSON.put("hardwareProviderId", checkEmptiness(taskBody.getNodeCandidate().getHardware().getProviderId(), "hardwareProviderId")); nodeCandidateInformationJSON.put("ID", checkEmptiness(taskBody.getNodeCandidate().getId(), "ID")); - nodeCandidateInformationJSON.put("cloudID", checkEmptiness(taskBody.getNodeCandidate().getCloud().getId(), "cloudID")); nodeCandidateInformationJSON.put("locationName", checkEmptiness(taskBody.getNodeCandidate().getLocation().getName(), "locationName")); nodeCandidateInformationJSON.put("imageProviderId", checkEmptiness(taskBody.getNodeCandidate().getImage().getProviderId(), "imageProviderId")); nodeJSON.put("nodeCandidateInformation", nodeCandidateInformationJSON); -- GitLab From e5a100315edc4119ec85a7b77f2b3dcef251e0ca Mon Sep 17 00:00:00 2001 From: Jan Marchel Date: Mon, 7 Feb 2022 16:56:10 +0000 Subject: [PATCH 6/7] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ee51fea28..8fa400ba5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -416,6 +416,7 @@ deploy:adapter: - rc3.1 - morphemic-rc1.5 - proactive-dev + - fix-cloud-id image: $DOCKER_DIND_IMAGE services: - $DOCKER_DIND_SERVICE -- GitLab From e414df8f0cf51de42353898df4b696ad767a329c Mon Sep 17 00:00:00 2001 From: Jan Marchel Date: Mon, 21 Feb 2022 10:27:34 +0100 Subject: [PATCH 7/7] user data changes --- .../server/controller/UserController.java | 8 ++++++++ .../controller/request/NewUserRequest.java | 4 ++++ .../controller/response/UserDataResponse.java | 19 +++++++++++++++++++ .../security/server/data/repository/User.java | 10 +++++++++- .../server/data/service/UserService.java | 17 ++++++++++++++++- 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 jwt-server/src/main/java/eu/paasage/upperware/security/server/controller/response/UserDataResponse.java 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 a8bc8a025..8246a725b 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 59305c88a..eaad0459e 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 000000000..423ae67ce --- /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 b16e9b4f9..380cb4c0a 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 b80b6d469..5b53c33a8 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(); + } } -- GitLab