From 65a72384732207582828744517dc7dbfaf423331 Mon Sep 17 00:00:00 2001 From: Wasiullah Khan Jadoon Date: Tue, 9 Jun 2026 16:07:44 +0500 Subject: [PATCH] Aconnect Change Password Issue: now on first login password will update successfully --- .../client/service/ThirdPartyUserService.java | 6 +++ .../aconnect/usermanagement/model/User.java | 3 ++ .../repository/UserRepository.java | 1 + .../usermanagement/service/UserService.java | 54 ++++++++++--------- 4 files changed, 38 insertions(+), 26 deletions(-) diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/service/ThirdPartyUserService.java b/aconnect/src/main/java/com/mfsys/aconnect/client/service/ThirdPartyUserService.java index d5c68a6..2d03c89 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/service/ThirdPartyUserService.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/service/ThirdPartyUserService.java @@ -6,9 +6,11 @@ import com.mfsys.aconnect.configuration.config.WebClientConfig; import com.mfsys.aconnect.usermanagement.dto.UserDTOs; import com.mfsys.aconnect.usermanagement.exceptions.EmailAlreadyExistException; import com.mfsys.aconnect.usermanagement.exceptions.UsernameAlreadyExistException; +import com.mfsys.aconnect.usermanagement.model.User; import com.mfsys.aconnect.usermanagement.repository.UserRepository; import com.mfsys.aconnect.usermanagement.model.Role; import com.mfsys.aconnect.usermanagement.service.UserService; +import jakarta.persistence.EntityNotFoundException; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.http.*; @@ -119,6 +121,10 @@ public class ThirdPartyUserService { userRequest.setRole(Role.USER); userService.createUser(userRequest); + User saved = userRepository.findByUserId(request.getSusUsercode()) + .orElseThrow(() -> new EntityNotFoundException("User not found: " + request.getSusUsercode())); + saved.setAconnectUser(true); + userRepository.save(saved); } catch (Exception e) { System.err.println("Failed to save third party user to Aconnect: " + e.getMessage()); } diff --git a/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/model/User.java b/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/model/User.java index fe05a5a..f889f61 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/model/User.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/model/User.java @@ -51,6 +51,9 @@ public class User { @Column(name = "is_deleted", columnDefinition = FieldNameLength.BOOLEAN_BIT) private boolean isDeleted = false; + @Column(name = "is_aconnect_user", columnDefinition = FieldNameLength.BOOLEAN_BIT) + private boolean isAconnectUser = false; + @CreationTimestamp @Column(name = "created_at", updatable = false) private LocalDateTime createdAt; diff --git a/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/repository/UserRepository.java b/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/repository/UserRepository.java index 0738696..0aaf029 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/repository/UserRepository.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/repository/UserRepository.java @@ -9,6 +9,7 @@ import java.util.Optional; @Repository public interface UserRepository extends JpaRepository { + Optional findByUserId(String userId); Optional findByUserIdAndIsActiveTrue(String userId); boolean existsByUserId(String userId); boolean existsByEmail(String email); diff --git a/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/service/UserService.java b/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/service/UserService.java index 4134606..0c15ae1 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/service/UserService.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/usermanagement/service/UserService.java @@ -63,6 +63,7 @@ public class UserService { user.setFirstLogin(false); } user.setPassword(passwordEncryptionService.hashPassword(request.getPassword())); + user.setAconnectUser(false); User savedUser = userRepository.save(user); return mapToResponseDTO(savedUser); } @@ -84,8 +85,6 @@ public class UserService { @Transactional public String firstLogin(ChangePasswordDTO request) throws JsonProcessingException { - String url = securityURI + "/security/thirdparty/user/changePassword"; - User user = userRepository.findById(request.getUserId()) .orElseThrow(() -> new EntityNotFoundException( "User not found with ID: " + request.getUserId())); @@ -97,30 +96,33 @@ public class UserService { throw new OldPasswordNotMatch(request.getPorOrgacode()); } - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - headers.set("sus_usercode", request.getUserId()); - headers.set("por_orgacode", request.getPorOrgacode()); - - // Build $set payload - Map setPayload = new HashMap<>(); - setPayload.put("SUS_USERCODE", user.getUserId()); - setPayload.put("SUS_PASSWORD", request.getNewPassword()); - setPayload.put("OLD_PASSWORD", request.getOldPassword()); - setPayload.put("POR_ORGACODE", user.getPorOrgacode()); - - // Build main payload - Map requestBody = new HashMap<>(); - requestBody.put("formId", "SH_SM_US_USER"); // your form ID - requestBody.put("porOrgacode", user.getPorOrgacode()); - requestBody.put("set", objectMapper.writeValueAsString(setPayload)); - requestBody.put("filter", buildFilter(user.getPorOrgacode(), user.getUserId())); - - ResponseEntity ciihiveResponse = - webClientConfig.patch(url, requestBody, headers); - - if (!ciihiveResponse.getStatusCode().is2xxSuccessful()) { - throw new RuntimeException("Failed to update password in ciihive: " + ciihiveResponse.getBody()); + if (user.isAconnectUser()) { + + String url = securityURI + "/security/thirdparty/user/changePassword"; + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.set("sus_usercode", request.getUserId()); + headers.set("por_orgacode", request.getPorOrgacode()); + + Map setPayload = new HashMap<>(); + setPayload.put("SUS_USERCODE", user.getUserId()); + setPayload.put("SUS_PASSWORD", request.getNewPassword()); + setPayload.put("OLD_PASSWORD", request.getOldPassword()); + setPayload.put("POR_ORGACODE", user.getPorOrgacode()); + + Map requestBody = new HashMap<>(); + requestBody.put("formId", "SH_SM_US_USER"); + requestBody.put("porOrgacode", user.getPorOrgacode()); + requestBody.put("set", objectMapper.writeValueAsString(setPayload)); + requestBody.put("filter", buildFilter(user.getPorOrgacode(), user.getUserId())); + + ResponseEntity ciihiveResponse = + webClientConfig.patch(url, requestBody, headers); + + if (!ciihiveResponse.getStatusCode().is2xxSuccessful()) { + throw new RuntimeException("Failed to update password in ciihive: " + ciihiveResponse.getBody()); + } } // Update local DB -- 2.32.0