Aconnect Change Password Issue: now on first login password will update successfully

aconnect/BS-ChangePasswordIssue
Wasiullah Khan Jadoon 3 weeks ago
parent 83002950b1
commit 65a7238473

@ -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());
}

@ -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;

@ -9,6 +9,7 @@ import java.util.Optional;
@Repository
public interface UserRepository extends JpaRepository<User, String> {
Optional<User> findByUserId(String userId);
Optional<User> findByUserIdAndIsActiveTrue(String userId);
boolean existsByUserId(String userId);
boolean existsByEmail(String email);

@ -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<String, Object> 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<String, Object> 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<Object> 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<String, Object> 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<String, Object> 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<Object> ciihiveResponse =
webClientConfig.patch(url, requestBody, headers);
if (!ciihiveResponse.getStatusCode().is2xxSuccessful()) {
throw new RuntimeException("Failed to update password in ciihive: " + ciihiveResponse.getBody());
}
}
// Update local DB

Loading…
Cancel
Save