From da14c7c84600022939aaf77b2e54046ff77c8079 Mon Sep 17 00:00:00 2001 From: Wasiullah Khan Jadoon Date: Tue, 16 Dec 2025 14:58:55 +0500 Subject: [PATCH] Signup APi --- .../configuration/constant/ERRCode.java | 5 +- .../constant/TokenBypassURI.java | 1 + .../exception/UserAlreadyExistsException.java | 26 +++++++++ econnect/pom.xml | 26 +++++++-- .../security/constant/SecurityURI.java | 1 + .../controller/AuthenticationController.java | 7 +++ .../aconnect/security/dto/SignupRequest.java | 15 ++++++ .../aconnect/security/dto/SignupResponse.java | 14 +++++ .../service/AuthenticationService.java | 30 +++++++++++ .../main/resources/application-dev.properties | 33 ------------ .../resources/application-live.properties | 29 ---------- .../resources/application-test.properties | 29 ---------- .../main/resources/application-uat.properties | 30 +---------- .../src/main/resources/application.properties | 53 +------------------ 14 files changed, 124 insertions(+), 175 deletions(-) create mode 100644 common/src/main/java/com/mfsys/common/configuration/exception/UserAlreadyExistsException.java create mode 100644 econnect/src/main/java/com/mfsys/aconnect/security/dto/SignupRequest.java create mode 100644 econnect/src/main/java/com/mfsys/aconnect/security/dto/SignupResponse.java diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/ERRCode.java b/common/src/main/java/com/mfsys/common/configuration/constant/ERRCode.java index 423ae36..7e5d520 100644 --- a/common/src/main/java/com/mfsys/common/configuration/constant/ERRCode.java +++ b/common/src/main/java/com/mfsys/common/configuration/constant/ERRCode.java @@ -2,7 +2,10 @@ package com.mfsys.common.configuration.constant; import com.mfsys.common.configuration.exception.ErrorMessage; -public enum ERRCode implements ErrorMessage {; +public enum ERRCode implements ErrorMessage { + USER_ALREADY_EXISTS("ERR_001", "User already exists"), + + ; private String code; private String description; diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java b/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java index f1a61e1..d4c3b21 100644 --- a/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java +++ b/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java @@ -7,6 +7,7 @@ import java.util.List; public interface TokenBypassURI { List URIs = new ArrayList(Arrays.asList( "/aconnect/signin", + "/aconnect/authentication/signup", "/aconnect/transactions/accounttogl", "/aconnect/account/miscDetails", "/deposit/account/miscDetails", diff --git a/common/src/main/java/com/mfsys/common/configuration/exception/UserAlreadyExistsException.java b/common/src/main/java/com/mfsys/common/configuration/exception/UserAlreadyExistsException.java new file mode 100644 index 0000000..fa20ad8 --- /dev/null +++ b/common/src/main/java/com/mfsys/common/configuration/exception/UserAlreadyExistsException.java @@ -0,0 +1,26 @@ +package com.mfsys.common.configuration.exception; + +import com.mfsys.common.configuration.constant.ERRCode; + + +public class UserAlreadyExistsException extends ApplicationException{ + + private static final String POR_ORGA_CODE = "DEFAULT"; + + + public UserAlreadyExistsException() { + super(POR_ORGA_CODE,ERRCode.USER_ALREADY_EXISTS); + } + + public UserAlreadyExistsException(Throwable cause) { + super(POR_ORGA_CODE,ERRCode.USER_ALREADY_EXISTS, cause); + } + + public UserAlreadyExistsException(String message) { + super(POR_ORGA_CODE,ERRCode.USER_ALREADY_EXISTS, message); + } + + public UserAlreadyExistsException(String message, Throwable cause) { + super(POR_ORGA_CODE,ERRCode.USER_ALREADY_EXISTS, message, cause); + } +} \ No newline at end of file diff --git a/econnect/pom.xml b/econnect/pom.xml index 13b9db9..040e844 100644 --- a/econnect/pom.xml +++ b/econnect/pom.xml @@ -152,6 +152,17 @@ + + + org.springframework.boot + spring-boot-maven-plugin + + + ${spring.profiles.active} + + + + @@ -161,9 +172,6 @@ dev - - true - dev @@ -183,6 +191,18 @@ + + + test + + test + + + aconnect-test + + + + live diff --git a/econnect/src/main/java/com/mfsys/aconnect/security/constant/SecurityURI.java b/econnect/src/main/java/com/mfsys/aconnect/security/constant/SecurityURI.java index 9e8debd..a3fc299 100644 --- a/econnect/src/main/java/com/mfsys/aconnect/security/constant/SecurityURI.java +++ b/econnect/src/main/java/com/mfsys/aconnect/security/constant/SecurityURI.java @@ -3,4 +3,5 @@ package com.mfsys.aconnect.security.constant; public interface SecurityURI { String AUTHENTICATION = "/authentication"; String LOGIN = "/login"; + String SIGNUP = "/signup"; } diff --git a/econnect/src/main/java/com/mfsys/aconnect/security/controller/AuthenticationController.java b/econnect/src/main/java/com/mfsys/aconnect/security/controller/AuthenticationController.java index 3fd64e5..582e41f 100644 --- a/econnect/src/main/java/com/mfsys/aconnect/security/controller/AuthenticationController.java +++ b/econnect/src/main/java/com/mfsys/aconnect/security/controller/AuthenticationController.java @@ -3,6 +3,8 @@ package com.mfsys.aconnect.security.controller; import com.mfsys.aconnect.security.constant.SecurityURI; import com.mfsys.aconnect.security.dto.LoginRequest; import com.mfsys.aconnect.security.dto.LoginResponse; +import com.mfsys.aconnect.security.dto.SignupRequest; +import com.mfsys.aconnect.security.dto.SignupResponse; import com.mfsys.aconnect.security.service.AuthenticationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -32,4 +34,9 @@ public class AuthenticationController { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } } + @PostMapping(SecurityURI.SIGNUP) + public ResponseEntity signup(@RequestBody SignupRequest request){ + SignupResponse response = authenticationService.signup(request); + return ResponseEntity.ok(response); + } } diff --git a/econnect/src/main/java/com/mfsys/aconnect/security/dto/SignupRequest.java b/econnect/src/main/java/com/mfsys/aconnect/security/dto/SignupRequest.java new file mode 100644 index 0000000..f63fe60 --- /dev/null +++ b/econnect/src/main/java/com/mfsys/aconnect/security/dto/SignupRequest.java @@ -0,0 +1,15 @@ +package com.mfsys.aconnect.security.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SignupRequest { + private String username; + private String password; + private String email; + private String fullName; +} diff --git a/econnect/src/main/java/com/mfsys/aconnect/security/dto/SignupResponse.java b/econnect/src/main/java/com/mfsys/aconnect/security/dto/SignupResponse.java new file mode 100644 index 0000000..a1f4df3 --- /dev/null +++ b/econnect/src/main/java/com/mfsys/aconnect/security/dto/SignupResponse.java @@ -0,0 +1,14 @@ +package com.mfsys.aconnect.security.dto; + +import com.mfsys.aconnect.usermanagement.model.User; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SignupResponse { + private boolean success; + private String message; +} diff --git a/econnect/src/main/java/com/mfsys/aconnect/security/service/AuthenticationService.java b/econnect/src/main/java/com/mfsys/aconnect/security/service/AuthenticationService.java index b90ec02..9dc8fd6 100644 --- a/econnect/src/main/java/com/mfsys/aconnect/security/service/AuthenticationService.java +++ b/econnect/src/main/java/com/mfsys/aconnect/security/service/AuthenticationService.java @@ -1,5 +1,8 @@ package com.mfsys.aconnect.security.service; +import com.mfsys.aconnect.security.dto.SignupRequest; +import com.mfsys.aconnect.security.dto.SignupResponse; +import com.mfsys.common.configuration.exception.UserAlreadyExistsException; import com.mfsys.common.configuration.service.JwtService; import com.mfsys.common.configuration.service.PasswordEncryptionService; import com.mfsys.aconnect.security.dto.LoginRequest; @@ -15,11 +18,13 @@ public class AuthenticationService { private final UserRepository userRepository; private final JwtService jwtService; + private final PasswordEncryptionService passwordEncryptionService; @Autowired public AuthenticationService (UserRepository userRepository, PasswordEncryptionService passwordEncryptionService, JwtService jwtService) { this.userRepository = userRepository; + this.passwordEncryptionService = passwordEncryptionService; this.jwtService = jwtService; } @@ -39,4 +44,29 @@ public class AuthenticationService { return new LoginResponse(user, false, user.getIsFirstLogin(), token); } + + private boolean userAlreadyExists(String userId) { + return userRepository.findByUserIdAndIsActiveTrue(userId).isPresent(); + } + @Transactional + public SignupResponse signup(SignupRequest request){ + + SignupResponse response = new SignupResponse(); + + if(userAlreadyExists(request.getUsername())){ + throw new UserAlreadyExistsException(); + + } + User user = new User(); + user.setUserId(request.getUsername()); + user.setPassword(passwordEncryptionService.hashPassword(request.getPassword())); + user.setEmail(request.getEmail()); + user.setUserFullname(request.getFullName()); + user.setIsActive(true); + user.setIsFirstLogin(true); + + userRepository.save(user); + + return new SignupResponse(true, "Signup successful"); + } } diff --git a/econnect/src/main/resources/application-dev.properties b/econnect/src/main/resources/application-dev.properties index 02b1c3f..781ef19 100644 --- a/econnect/src/main/resources/application-dev.properties +++ b/econnect/src/main/resources/application-dev.properties @@ -1,37 +1,4 @@ -spring.application.name = aconnect -app.base.uri=aconnect -app.db.dbname = aconnect -app.db.dbuser=${CMB_SQL_DB_USER} -app.db.dbpassword=${CMB_SQL_DB_PASSWORD} -app.db.url=${CMB_SQL_DB_MACHINE_IP} -app.server.timezone=${APP_SERVER_TIMEZONE} -spring.datasource.username = ${app.db.dbuser} -spring.datasource.password = ${app.db.dbpassword} -spring.datasource.url = jdbc:mysql://${app.db.url}/${app.db.dbname}?createDatabaseIfNotExist=true&serverTimezone=${app.server.timezone}&useLegacyDatetimeCode=false&useUnicode=yes&characterEncoding=UTF-8&characterSetResults=UTF-8 - -spring.jpa.properties.hibernate.connection.characterEncoding=utf-8 -spring.jpa.properties.hibernate.connection.CharSet=utf-8 -spring.jpa.properties.hibernate.connection.useUnicode=true -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect -spring.jpa.hibernate.ddl-auto=update - -jwt.secret = mySecretKey123456789012345678901234567890 -jwt.expiration = 86400000 -jwt.refresh-expiration= 604800000 - -# Default security URI for dev (fallback for unknown users) -#app.security.uri=http://localhost:9090/security/auth/user -#app.deposit.uri=http://localhost:9095/deposit -## User-specific security URLs for dev environment -#app.security.user.01.uri=http://localhost:9090/security/auth/user -# -#app.security.user.naeem.uri=http://localhost:9091/security/auth/user -#app.security.user.03.uri=http://dev-server-03:9090/security/auth/user -#app.security.user.admin.uri=http://localhost:9092/security/auth/user -#app.security.user.test.uri=http://test-dev-server:9090/security/auth/user - app.deposit.uri=${CMB_DEPOSIT_SERVER_URL} app.generalledger.uri=${CMB_GL_SERVER_URL} app.organization.uri=${CMB_ORGA_CODE} app.security.uri=${CMB_SECURITY_SERVER_URL}/security/auth/user - diff --git a/econnect/src/main/resources/application-live.properties b/econnect/src/main/resources/application-live.properties index 7768e2b..781ef19 100644 --- a/econnect/src/main/resources/application-live.properties +++ b/econnect/src/main/resources/application-live.properties @@ -1,32 +1,3 @@ -spring.application.name = aconnect -app.base.uri=aconnect -app.db.dbname = aconnect -app.db.dbuser=${CMB_SQL_DB_USER} -app.db.dbpassword=${CMB_SQL_DB_PASSWORD} -app.db.url=${CMB_SQL_DB_MACHINE_IP} -app.server.timezone=${APP_SERVER_TIMEZONE} -spring.datasource.username = ${app.db.dbuser} -spring.datasource.password = ${app.db.dbpassword} -spring.datasource.url = jdbc:mysql://${app.db.url}/${app.db.dbname}?createDatabaseIfNotExist=true&serverTimezone=${app.server.timezone}&useLegacyDatetimeCode=false&useUnicode=yes&characterEncoding=UTF-8&characterSetResults=UTF-8 - -spring.jpa.properties.hibernate.connection.characterEncoding=utf-8 -spring.jpa.properties.hibernate.connection.CharSet=utf-8 -spring.jpa.properties.hibernate.connection.useUnicode=true -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect -spring.jpa.hibernate.ddl-auto=update - -jwt.secret = mySecretKey123456789012345678901234567890 -jwt.expiration = 86400000 -jwt.refresh-expiration= 604800000 - - -# User-specific security URLs for live environment -#app.security.user.01.uri=https://live-client1-company.com/security/auth/user -#app.security.user.mubashar.uri=https://live-client2-company.com/security/auth/user -#app.security.user.03.uri=https://live-client3-company.com/security/auth/user -#app.security.user.admin.uri=https://live-admin-company.com/security/auth/user -#app.security.user.manager.uri=https://live-manager-company.com/security/auth/user - app.deposit.uri=${CMB_DEPOSIT_SERVER_URL} app.generalledger.uri=${CMB_GL_SERVER_URL} app.organization.uri=${CMB_ORGA_CODE} diff --git a/econnect/src/main/resources/application-test.properties b/econnect/src/main/resources/application-test.properties index 4682fe1..781ef19 100644 --- a/econnect/src/main/resources/application-test.properties +++ b/econnect/src/main/resources/application-test.properties @@ -1,33 +1,4 @@ -spring.application.name = aconnect -app.base.uri=aconnect -app.db.dbname = aconnect -app.db.dbuser=${CMB_SQL_DB_USER} -app.db.dbpassword=${CMB_SQL_DB_PASSWORD} -app.db.url=${CMB_SQL_DB_MACHINE_IP} -app.server.timezone=${APP_SERVER_TIMEZONE} -spring.datasource.username = ${app.db.dbuser} -spring.datasource.password = ${app.db.dbpassword} -spring.datasource.url = jdbc:mysql://${app.db.url}/${app.db.dbname}?createDatabaseIfNotExist=true&serverTimezone=${app.server.timezone}&useLegacyDatetimeCode=false&useUnicode=yes&characterEncoding=UTF-8&characterSetResults=UTF-8 - -spring.jpa.properties.hibernate.connection.characterEncoding=utf-8 -spring.jpa.properties.hibernate.connection.CharSet=utf-8 -spring.jpa.properties.hibernate.connection.useUnicode=true -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect -spring.jpa.hibernate.ddl-auto=update - -jwt.secret = mySecretKey123456789012345678901234567890 -jwt.expiration = 86400000 -jwt.refresh-expiration= 604800000 - -#app.organization.uri = 0005 app.deposit.uri=${CMB_DEPOSIT_SERVER_URL} app.generalledger.uri=${CMB_GL_SERVER_URL} app.organization.uri=${CMB_ORGA_CODE} app.security.uri=${CMB_SECURITY_SERVER_URL}/security/auth/user - - -#app.security.user.naeem.organization=0005 -#app.security.user.naeem.environment=uat - -#app.security.uri=http://test-server:9090/security/auth/user -#app.security.user.hamza.uri=http://test-server:9090/security/auth/user diff --git a/econnect/src/main/resources/application-uat.properties b/econnect/src/main/resources/application-uat.properties index 636d9c7..781ef19 100644 --- a/econnect/src/main/resources/application-uat.properties +++ b/econnect/src/main/resources/application-uat.properties @@ -1,32 +1,4 @@ -spring.application.name = aconnect -app.base.uri=aconnect -app.db.dbname = aconnect -app.db.dbuser=${CMB_SQL_DB_USER} -app.db.dbpassword=${CMB_SQL_DB_PASSWORD} -app.db.url=${CMB_SQL_DB_MACHINE_IP} -app.server.timezone=${APP_SERVER_TIMEZONE} -spring.datasource.username = ${app.db.dbuser} -spring.datasource.password = ${app.db.dbpassword} -spring.datasource.url = jdbc:mysql://${app.db.url}/${app.db.dbname}?createDatabaseIfNotExist=true&serverTimezone=${app.server.timezone}&useLegacyDatetimeCode=false&useUnicode=yes&characterEncoding=UTF-8&characterSetResults=UTF-8 - -spring.jpa.properties.hibernate.connection.characterEncoding=utf-8 -spring.jpa.properties.hibernate.connection.CharSet=utf-8 -spring.jpa.properties.hibernate.connection.useUnicode=true -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect -spring.jpa.hibernate.ddl-auto=update - -jwt.secret = mySecretKey123456789012345678901234567890 -jwt.expiration = 86400000 -jwt.refresh-expiration= 604800000 - -# User-specific security URLs for uat environment -#app.security.user.01.uri=http://uat-server-01:9090/security/auth/user -#app.security.user.02.uri=http://uat-server-02:9090/security/auth/user -#app.security.user.03.uri=http://uat-server-03:9090/security/auth/user -#app.security.user.admin.uri=http://uat-admin-server:9090/security/auth/user -#app.security.user.qa.uri=http://uat-qa-server:9090/security/auth/user - app.deposit.uri=${CMB_DEPOSIT_SERVER_URL} app.generalledger.uri=${CMB_GL_SERVER_URL} app.organization.uri=${CMB_ORGA_CODE} -app.security.uri=${CMB_SECURITY_SERVER_URL}/security/auth/user \ No newline at end of file +app.security.uri=${CMB_SECURITY_SERVER_URL}/security/auth/user diff --git a/econnect/src/main/resources/application.properties b/econnect/src/main/resources/application.properties index 9e1e3fc..89680fb 100644 --- a/econnect/src/main/resources/application.properties +++ b/econnect/src/main/resources/application.properties @@ -14,59 +14,10 @@ spring.jpa.properties.hibernate.connection.CharSet=utf-8 spring.jpa.properties.hibernate.connection.useUnicode=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect spring.jpa.hibernate.ddl-auto=update +spring.profiles.active=@spring.profiles.active@ jwt.secret = mySecretKey123456789012345678901234567890 jwt.expiration = 86400000 jwt.refresh-expiration= 604800000 -# User to Environment Mapping -#app.user.01.environment=dev -#app.user.02.environment=dev -#app.user.test.environment=dev -# -#app.user.liveuser.environment=live -#app.user.produser.environment=live -#app.user.admin.environment=live -# -#app.user.uatuser.environment=uat -#app.user.qa.environment=uat - -# Environment-specific security URLs -#app.environment.dev.securityUri=http://localhost:9090/security/auth/user -#app.environment.uat.securityUri=http://uat-security-server:9090/security/auth/user -#app.environment.live.securityUri=https://live-security-server.com/security/auth/user - -# Default environment -#app.environment.default=dev - -# ${CMB_SQL_DB_USER} -# ${CMB_SQL_DB_USER} -#app.security.uri=http://localhost:9095/security/auth/user -#app.deposit.uri=http://localhost:9095 -#app.generalledger.uri=http://localhost:9093 -#app.organization.uri=0005 - - -#app.security.uri=http://localhost:9090/security/auth/user - -# ${CMB_SQL_DB_USER} -# ${CMB_SQL_DB_USER} -#app.deposit.uri=http://localhost:9095 -#app.generalledger.uri=http://localhost:9093 -#app.organization.uri=0005 - -app.deposit.uri=${CMB_DEPOSIT_SERVER_URL} -app.generalledger.uri=${CMB_GL_SERVER_URL} -app.organization.uri=${CMB_ORGA_CODE} -app.security.uri=${CMB_SECURITY_SERVER_URL}/security/auth/user - - -# Deposit URLs -#app.environment.dev.depositUri=http://localhost:9095/deposit -#app.environment.uat.depositUri=http://uat-deposit-server:9095/deposit -#app.environment.live.depositUri=https://live-deposit-server.com/deposit - -# GL URLs -#app.environment.dev.generalLedgerUri=http://localhost:9093/generalledger -#app.environment.uat.generalLedgerUri=http://uat-gl-server:9093/generalledger -#app.environment.live.generalLedgerUri=https://live-gl-server.com/generalledger +logging.level.org.springframework.core.env=DEBUG