From 998c2ba01f729d4a91f1dfd7b19663a05fa57a72 Mon Sep 17 00:00:00 2001 From: harish Date: Sun, 20 Oct 2024 02:37:53 +0530 Subject: [PATCH] updated code --- .../tendermanagement/config/SamlConfig.java | 51 +++++++++++------- .../config/SamlFailureHandler.java | 52 +++++++++++++++---- .../config/SamlSuccessHandler.java | 38 ++++++++++---- .../tendermanagement/dao/ApplicationDao.java | 14 ++++- .../gepafin/tendermanagement/dao/HubDao.java | 6 ++- .../gepafin/tendermanagement/dao/UserDao.java | 8 +-- .../entities/ProtocolEntity.java | 3 ++ .../entities/SamlResponseEntity.java | 15 ++++++ .../enums/SamlResponseStatusEnum.java | 21 ++++++++ .../repositories/HubRepository.java | 5 ++ .../repositories/ProtocolRepository.java | 5 +- .../repositories/SamlResponseRepository.java | 4 ++ .../repositories/UserRepository.java | 6 +-- .../tendermanagement/service/HubService.java | 3 +- .../service/impl/AuthenticationService.java | 2 +- .../service/impl/HubServiceImpl.java | 6 +++ .../api/impl/CustomUserDetailsService.java | 2 +- 17 files changed, 187 insertions(+), 54 deletions(-) create mode 100644 src/main/java/net/gepafin/tendermanagement/enums/SamlResponseStatusEnum.java diff --git a/src/main/java/net/gepafin/tendermanagement/config/SamlConfig.java b/src/main/java/net/gepafin/tendermanagement/config/SamlConfig.java index 050c4167..c69b7316 100644 --- a/src/main/java/net/gepafin/tendermanagement/config/SamlConfig.java +++ b/src/main/java/net/gepafin/tendermanagement/config/SamlConfig.java @@ -29,6 +29,7 @@ import org.opensaml.xmlsec.signature.support.SignatureConstants; import org.opensaml.xmlsec.signature.support.Signer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -45,6 +46,9 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.entities.SamlResponseEntity; +import net.gepafin.tendermanagement.enums.SamlResponseStatusEnum; +import net.gepafin.tendermanagement.repositories.SamlResponseRepository; @Configuration public class SamlConfig { @@ -59,6 +63,9 @@ public class SamlConfig { @Value("${active.profile.folder}") String activeProfileFolder; + + @Autowired + private SamlResponseRepository samlResponseRepository; @Bean public RelyingPartyRegistrationRepository relyingPartyRegistrationRepository() { @@ -135,18 +142,24 @@ public class SamlConfig { authenticationRequestResolver.setAuthnRequestCustomizer((context) -> { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); - String hubId = (String) request.getAttribute("hubId"); + String hubUuid = (String) request.getAttribute("hubId"); - logger.info("Hub id " + hubId); + logger.info("Hub id " + hubUuid); + String inResponseTo = "_" + UUID.randomUUID().toString(); // Continue with normal AuthnRequest configuration AuthnRequest authnRequest = context.getAuthnRequest(); - authnRequest.setID("_" + UUID.randomUUID().toString()+":"+hubId); + authnRequest.setID(inResponseTo); authnRequest.setVersion(SAMLVersion.VERSION_20); authnRequest.setProtocolBinding(SAMLConstants.SAML2_POST_BINDING_URI); authnRequest.setRequestedAuthnContext(buildRequestedAuthnContext()); - + + SamlResponseEntity samlResponse = new SamlResponseEntity(); + samlResponse.setHubUuid(hubUuid); + samlResponse.setInResponseTo(inResponseTo); + samlResponse.setStatus(SamlResponseStatusEnum.INITIATED.getValue()); + samlResponseRepository.save(samlResponse); // Log the SAML AuthnRequest after setting context String samlRequest = SamlRequestLogger.convertSAMLObjectToString(authnRequest); logger.info("SAML AuthnRequest after setting context: " + samlRequest); @@ -156,21 +169,21 @@ public class SamlConfig { } -private RequestedAuthnContext buildRequestedAuthnContext() { - AuthnContextClassRefBuilder authnContextClassRefBuilder = new AuthnContextClassRefBuilder(); - AuthnContextClassRef authnContextClassRef = authnContextClassRefBuilder.buildObject( - SAMLConstants.SAML20_NS, AuthnContextClassRef.DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20_PREFIX - ); - // Set the SPID Level 2 authentication context - authnContextClassRef.setURI("urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword"); - - RequestedAuthnContextBuilder requestedAuthnContextBuilder = new RequestedAuthnContextBuilder(); - RequestedAuthnContext requestedAuthnContext = requestedAuthnContextBuilder.buildObject(); - requestedAuthnContext.setComparison(AuthnContextComparisonTypeEnumeration.EXACT); - requestedAuthnContext.getAuthnContextClassRefs().add(authnContextClassRef); - - return requestedAuthnContext; -} + private RequestedAuthnContext buildRequestedAuthnContext() { + AuthnContextClassRefBuilder authnContextClassRefBuilder = new AuthnContextClassRefBuilder(); + AuthnContextClassRef authnContextClassRef = authnContextClassRefBuilder.buildObject( + SAMLConstants.SAML20_NS, AuthnContextClassRef.DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20_PREFIX + ); + // Set the SPID Level 2 authentication context + authnContextClassRef.setURI("urn:oasis:names:tc:SAML:2.0:ac:classes:SecureRemotePassword"); + + RequestedAuthnContextBuilder requestedAuthnContextBuilder = new RequestedAuthnContextBuilder(); + RequestedAuthnContext requestedAuthnContext = requestedAuthnContextBuilder.buildObject(); + requestedAuthnContext.setComparison(AuthnContextComparisonTypeEnumeration.EXACT); + requestedAuthnContext.getAuthnContextClassRefs().add(authnContextClassRef); + + return requestedAuthnContext; + } public PrivateKey readPrivateKey() throws Exception { // Path to your private key PEM file diff --git a/src/main/java/net/gepafin/tendermanagement/config/SamlFailureHandler.java b/src/main/java/net/gepafin/tendermanagement/config/SamlFailureHandler.java index 171b7e12..d2337ee9 100644 --- a/src/main/java/net/gepafin/tendermanagement/config/SamlFailureHandler.java +++ b/src/main/java/net/gepafin/tendermanagement/config/SamlFailureHandler.java @@ -1,9 +1,13 @@ package net.gepafin.tendermanagement.config; import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.AuthenticationFailureHandler; @@ -11,6 +15,12 @@ import org.springframework.stereotype.Component; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import net.gepafin.tendermanagement.constants.GepafinConstant; +import net.gepafin.tendermanagement.entities.SamlResponseEntity; +import net.gepafin.tendermanagement.enums.SamlResponseStatusEnum; +import net.gepafin.tendermanagement.repositories.SamlResponseRepository; +import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; +import net.gepafin.tendermanagement.web.rest.api.errors.Status; @Component public class SamlFailureHandler implements AuthenticationFailureHandler { @@ -20,16 +30,40 @@ public class SamlFailureHandler implements AuthenticationFailureHandler { @Value("${fe.base.url}") private String feBaseUrl; + @Autowired + private SamlResponseRepository samlResponseRepository; + @Override - public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, - AuthenticationException exception) throws IOException { - try { - logger.error("SAML login failed: " + exception.getMessage()); - + public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, + AuthenticationException exception) throws IOException { + try { + logger.error("SAML login failed: " + exception.getMessage()); + String inResponseTo = extractInResponseTo(feBaseUrl); + if (Boolean.FALSE.equals(StringUtils.isEmpty(inResponseTo))) { + SamlResponseEntity samlResponseLogEntity = samlResponseRepository + .findByInResponseToAndStatus(inResponseTo, SamlResponseStatusEnum.INITIATED.getValue()) + .orElseThrow(() -> new CustomValidationException(Status.BAD_REQUEST, + Translator.toLocale(GepafinConstant.INVALID_REQUEST))); + samlResponseLogEntity.setStatus(SamlResponseStatusEnum.FAILED.getValue()); + samlResponseRepository.save(samlResponseLogEntity); + } response.sendRedirect(feBaseUrl + "/login"); - } catch (Exception e) { - logger.error("Error processing SAML failure handler", e); - } - } + } catch (Exception e) { + logger.error("Error processing SAML failure handler", e); + } + } + + public static String extractInResponseTo(String message) { + String regex = "InResponseTo attribute \\[([a-zA-Z0-9\\-]+)\\]"; + + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(message); + + if (matcher.find()) { + return matcher.group(1); + } else { + return null; + } + } } diff --git a/src/main/java/net/gepafin/tendermanagement/config/SamlSuccessHandler.java b/src/main/java/net/gepafin/tendermanagement/config/SamlSuccessHandler.java index d9eb870c..fb151c11 100644 --- a/src/main/java/net/gepafin/tendermanagement/config/SamlSuccessHandler.java +++ b/src/main/java/net/gepafin/tendermanagement/config/SamlSuccessHandler.java @@ -2,13 +2,13 @@ package net.gepafin.tendermanagement.config; import java.io.ByteArrayInputStream; import java.io.IOException; -import java.util.Base64; import java.util.List; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -26,10 +26,13 @@ import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import net.gepafin.tendermanagement.constants.GepafinConstant; +import net.gepafin.tendermanagement.entities.HubEntity; import net.gepafin.tendermanagement.entities.SamlResponseEntity; import net.gepafin.tendermanagement.entities.UserEntity; +import net.gepafin.tendermanagement.enums.SamlResponseStatusEnum; import net.gepafin.tendermanagement.repositories.SamlResponseRepository; import net.gepafin.tendermanagement.repositories.UserRepository; +import net.gepafin.tendermanagement.service.HubService; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; @@ -47,6 +50,9 @@ public class SamlSuccessHandler implements AuthenticationSuccessHandler { @Value("${fe.base.url}") private String feBaseUrl; + + @Autowired + private HubService hubService; @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, @@ -59,16 +65,6 @@ public class SamlSuccessHandler implements AuthenticationSuccessHandler { Map> userAttributes = principal.getAttributes(); String token = Utils.generateSecureToken(); logger.info("SAML User Attributes: " + userAttributes); - - SamlResponseEntity samlResponseLogEntity = new SamlResponseEntity(); - samlResponseLogEntity.setAuthenticationObject(authentication.toString()); - - ObjectMapper objectMapper = new ObjectMapper(); - String userAttributesJson = objectMapper.writeValueAsString(userAttributes); - samlResponseLogEntity.setAuthenticationObject(userAttributesJson); - samlResponseLogEntity.setToken(token); - samlResponseLogRepository.save(samlResponseLogEntity); - // Extracting raw SAML response String samlResponse = samlAuth.getSaml2Response(); @@ -89,8 +85,28 @@ public class SamlSuccessHandler implements AuthenticationSuccessHandler { logger.info("SAML Response ID: " + responseId); logger.info("InResponseTo: " + inResponseTo); logger.info("IssueInstant: " + issueInstant); + + SamlResponseEntity samlResponseLogEntity = samlResponseLogRepository + .findByInResponseToAndStatus(inResponseTo, SamlResponseStatusEnum.INITIATED.getValue()) + .orElseThrow(() -> new CustomValidationException(Status.BAD_REQUEST, + Translator.toLocale(GepafinConstant.INVALID_REQUEST))); + ObjectMapper objectMapper = new ObjectMapper(); + String userAttributesJson = objectMapper.writeValueAsString(userAttributes); + + samlResponseLogEntity.setAuthenticationObject(userAttributesJson); + samlResponseLogEntity.setToken(token); + samlResponseLogEntity.setStatus(SamlResponseStatusEnum.SUCCESS.getValue()); + samlResponseLogEntity.setInResponseTo(inResponseTo); + samlResponseLogEntity.setSamlId(responseId); + samlResponseLogEntity.setIssueInstant(issueInstant); + samlResponseLogRepository.save(samlResponseLogEntity); + + HubEntity hub = hubService.getHubByUuid(samlResponseLogEntity.getHubUuid()); String redirectUrl = feBaseUrl; + if (Boolean.FALSE.equals(StringUtils.isEmpty(hub.getDomainName()))) { + redirectUrl = hub.getDomainName(); + } logger.info("SAML login successful for user: " + principal.getName()); String cf = userAttributes.get("CodiceFiscale").get(0).toString(); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 83c93371..1442e505 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -119,6 +119,9 @@ public class ApplicationDao { @Value("${aws.s3.url.folder.signed.document}") private String signedDocumentS3Folder; + + @Value("${default.hub.uuid}") + private String defaultHubUuid; public ApplicationResponseBean createApplication(ApplicationRequestBean applicationRequestBean, UserEntity userEntity, Long formId, Long applicationId) { @@ -602,8 +605,7 @@ public class ApplicationDao { if (totalSteps.intValue() != completedSteps) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_IS_INCOMPLETE_MSG)); } - Long maxProtocolNumber=protocolRepository.findMaxProtocolNumber(); - Long protocolNumber = (maxProtocolNumber != null) ? maxProtocolNumber + 1 : 1; + Long protocolNumber = getProtocolNumber(userEntity.getHub()); ProtocolEntity protocolEntity=createProtocolEntity(applicationEntity,protocolNumber); applicationEntity.setProtocol(protocolEntity); applicationEntity.setStatus(ApplicationStatusTypeEnum.SUBMIT.getValue()); @@ -618,6 +620,14 @@ public class ApplicationDao { return getApplicationResponse(applicationEntity); } + private Long getProtocolNumber(HubEntity hubEntity) { + Long maxProtocolNumber = protocolRepository.findMaxProtocolNumberAndHubId(hubEntity.getId()); + Long startNumber = 10000001L; + if(Boolean.FALSE.equals(defaultHubUuid.equals(hubEntity.getUniqueUuid()))) { + startNumber = 20000001L; + } + return (maxProtocolNumber != null) ? maxProtocolNumber + 1 : startNumber; + } public Integer calculateProgress(Long totalSteps, Long completedSteps) { if (FieldValidator.isNullOrZero(totalSteps)) { throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.TOTAL_STEPS_NOT_BE_ZERO)); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/HubDao.java b/src/main/java/net/gepafin/tendermanagement/dao/HubDao.java index 3304b481..28c999ad 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/HubDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/HubDao.java @@ -14,7 +14,6 @@ import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.List; -import java.util.UUID; @Component @@ -89,4 +88,9 @@ public class HubDao { responseBean.setUpdatedDate(hubEntity.getUpdatedDate()); return responseBean; } + + public HubEntity getHubByUuid(String hubUuid) { + return hubRepository.findByUniqueUuid(hubUuid).orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, + Translator.toLocale(GepafinConstant.HUB_NOT_FOUND))); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java index d690f673..cc9a959b 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/UserDao.java @@ -114,7 +114,7 @@ public class UserDao { Translator.toLocale(GepafinConstant.VALIDATE_EMAIL)); } log.info("Creating user with email: {}", userReq.getEmail()); - if (userRepository.existsByEmailIgnoreCaseAndhubUniqueUuid(userReq.getEmail(), userReq.getHubUuid())) { + if (userRepository.existsByEmailIgnoreCaseAndHubUniqueUuid(userReq.getEmail(), userReq.getHubUuid())) { log.error("User creation failed: Email {} already exists", userReq.getEmail()); throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.EMAIL_ALREADY_EXISTS)); @@ -301,7 +301,7 @@ public class UserDao { public String initiatePasswordReset(InitiatePasswordResetReq resetReq) { UserEntity user = userRepository - .findByEmailIgnoreCaseAndhubUniqueUuid(resetReq.getEmail(), resetReq.getHubUuid()) + .findByEmailIgnoreCaseAndHubUniqueUuid(resetReq.getEmail(), resetReq.getHubUuid()) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG))); @@ -314,7 +314,7 @@ public class UserDao { public Boolean resetPassword(ResetPasswordReq resetPasswordReq) { UserEntity user = userRepository - .findByEmailIgnoreCaseAndhubUniqueUuid(resetPasswordReq.getEmail(), resetPasswordReq.getHubUuid()) + .findByEmailIgnoreCaseAndHubUniqueUuid(resetPasswordReq.getEmail(), resetPasswordReq.getHubUuid()) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG))); @@ -338,7 +338,7 @@ public class UserDao { public Boolean changePassword(UserEntity userEntity, ChangePasswordRequest request) { UserEntity user = userRepository - .findByEmailIgnoreCaseAndhubUniqueUuid(request.getEmail(), userEntity.getHub().getUniqueUuid()) + .findByEmailIgnoreCaseAndHubUniqueUuid(request.getEmail(), userEntity.getHub().getUniqueUuid()) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG))); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ProtocolEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/ProtocolEntity.java index 0924c922..ad57c1ee 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/ProtocolEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/ProtocolEntity.java @@ -24,5 +24,8 @@ public class ProtocolEntity extends BaseEntity { @Column(name="APPLICATION_ID") private Long applicationId; + + @Column(name="HUB_ID") + private Long hubId; } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/SamlResponseEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/SamlResponseEntity.java index 732edfd9..05535e97 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/SamlResponseEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/SamlResponseEntity.java @@ -13,6 +13,21 @@ public class SamlResponseEntity extends BaseEntity{ @Column(name = "AUTHENTICATION_OBJECT") private String authenticationObject; + @Column(name = "IN_RESPONSE_TO") + private String inResponseTo; + + @Column(name = "ISSUE_INSTANT") + private String issueInstant; + + @Column(name = "SAML_ID") + private String samlId; + + @Column(name = "HUB_UUID") + private String hubUuid; + + @Column(name = "STATUS") + private String status; + @Column(name = "TOKEN") private String token; diff --git a/src/main/java/net/gepafin/tendermanagement/enums/SamlResponseStatusEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/SamlResponseStatusEnum.java new file mode 100644 index 00000000..27e58a4b --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/SamlResponseStatusEnum.java @@ -0,0 +1,21 @@ +package net.gepafin.tendermanagement.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum SamlResponseStatusEnum { + + SUCCESS("SUCCESS"), + FAILED("FAILED"), + INITIATED("INITIATED"); + + private String value; + + SamlResponseStatusEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } +} diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/HubRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/HubRepository.java index 36c3cf06..cc54295a 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/HubRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/HubRepository.java @@ -1,10 +1,15 @@ package net.gepafin.tendermanagement.repositories; import net.gepafin.tendermanagement.entities.HubEntity; + +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface HubRepository extends JpaRepository { + + Optional findByUniqueUuid(String hubUuid); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ProtocolRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ProtocolRepository.java index b82fc311..419d69b8 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ProtocolRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ProtocolRepository.java @@ -3,11 +3,12 @@ package net.gepafin.tendermanagement.repositories; import net.gepafin.tendermanagement.entities.ProtocolEntity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository public interface ProtocolRepository extends JpaRepository { - @Query("SELECT MAX(p.protocolNumber) FROM ProtocolEntity p") - Long findMaxProtocolNumber(); + @Query("SELECT MAX(p.protocolNumber) FROM ProtocolEntity p where p.hubId = :hubId") + Long findMaxProtocolNumberAndHubId(@Param("hubId") Long hubId); } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/SamlResponseRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/SamlResponseRepository.java index 9183f339..3194ef1a 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/SamlResponseRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/SamlResponseRepository.java @@ -1,5 +1,7 @@ package net.gepafin.tendermanagement.repositories; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -10,4 +12,6 @@ public interface SamlResponseRepository extends JpaRepository findByInResponseToAndStatus(String inResponseTo, String status); + } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/UserRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/UserRepository.java index caccc5ec..63e44a8b 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/UserRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/UserRepository.java @@ -1,7 +1,6 @@ package net.gepafin.tendermanagement.repositories; import net.gepafin.tendermanagement.entities.UserEntity; -import net.gepafin.tendermanagement.model.response.UserResponseBean; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -20,12 +19,13 @@ public interface UserRepository extends JpaRepository { Optional findByBeneficiaryCodiceFiscale(String codiceFiscale); boolean existsByBeneficiaryCodiceFiscale(String codiceFiscale); + UserEntity findByBeneficiaryId(Long beneficiaryId); Long countByStatusAndRoleEntityRoleType(String status, String roleName); List findByRoleEntityId(Long roleId); - Optional findByEmailIgnoreCaseAndhubUniqueUuid(String email, String hubId); + Optional findByEmailIgnoreCaseAndHubUniqueUuid(String email, String hubId); - boolean existsByEmailIgnoreCaseAndhubUniqueUuid(String email, String hubUuid); + boolean existsByEmailIgnoreCaseAndHubUniqueUuid(String email, String hubUuid); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/HubService.java b/src/main/java/net/gepafin/tendermanagement/service/HubService.java index d04142a5..61f203ea 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/HubService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/HubService.java @@ -1,9 +1,9 @@ package net.gepafin.tendermanagement.service; +import net.gepafin.tendermanagement.entities.HubEntity; import net.gepafin.tendermanagement.model.request.HubReq; import net.gepafin.tendermanagement.model.response.HubResponseBean; -import net.gepafin.tendermanagement.model.util.Response; import java.util.List; @@ -13,4 +13,5 @@ public interface HubService { HubResponseBean getHubById(Long hubId); List getAllHubs(); void deleteHub(Long hubId); + HubEntity getHubByUuid(String hubUuid); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java index 009a5296..95eb6763 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/AuthenticationService.java @@ -81,7 +81,7 @@ public class AuthenticationService { Authentication authentication = this.authenticationManager.authenticate(authenticationToken); SecurityContextHolder.getContext().setAuthentication(authentication); log.info("Authentication successful for email: {}", loginReq.getEmail()); - user = userRepository.findByEmailIgnoreCaseAndhubUniqueUuid(loginReq.getEmail(), loginReq.getHubUuid()) + user = userRepository.findByEmailIgnoreCaseAndHubUniqueUuid(loginReq.getEmail(), loginReq.getHubUuid()) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG))); loginAttemptEntity.setUserId(user.getId()); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/HubServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/HubServiceImpl.java index 795cf6fc..9301db7e 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/HubServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/HubServiceImpl.java @@ -1,6 +1,7 @@ package net.gepafin.tendermanagement.service.impl; import net.gepafin.tendermanagement.dao.HubDao; +import net.gepafin.tendermanagement.entities.HubEntity; import net.gepafin.tendermanagement.model.request.HubReq; import net.gepafin.tendermanagement.model.response.HubResponseBean; import net.gepafin.tendermanagement.service.HubService; @@ -45,4 +46,9 @@ public class HubServiceImpl implements HubService { public void deleteHub(Long hubId) { hubDao.deleteHub(hubId); } + + @Override + public HubEntity getHubByUuid(String hubUuid) { + return hubDao.getHubByUuid(hubUuid); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CustomUserDetailsService.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CustomUserDetailsService.java index a11157ac..d26ab560 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CustomUserDetailsService.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CustomUserDetailsService.java @@ -35,7 +35,7 @@ public class CustomUserDetailsService implements UserDetailsService { String email = loginParts[0]; String hubId = loginParts[1]; - UserEntity user = userRepository.findByEmailIgnoreCaseAndhubUniqueUuid(email, hubId) + UserEntity user = userRepository.findByEmailIgnoreCaseAndHubUniqueUuid(email, hubId) .orElseThrow( () -> new UsernameNotFoundException("User " + email + " was not found in the database")); return createSpringSecurityUser(user);