Merge branch 'develop' of https://github.com/Kitzanos/GEPAFIN-BE into develop

This commit is contained in:
nisha
2024-10-01 17:31:23 +05:30
11 changed files with 103 additions and 13 deletions

View File

@@ -49,6 +49,12 @@ public class SamlConfig {
@Value("${base-url}")
String baseUrl;
@Value("${spid.ipd.base.url}")
String ipdBaseUrl;
@Value("${active.profile.folder}")
String activeProfileFolder;
@Bean
public RelyingPartyRegistrationRepository relyingPartyRegistrationRepository() {
@@ -66,8 +72,8 @@ public class SamlConfig {
}
})
.assertionConsumerServiceLocation(acsUrl)
.assertingPartyDetails(details -> details.entityId("https://federatest.umbriadigitale.it/gw/metadata")
.singleSignOnServiceLocation("https://federatest.umbriadigitale.it/gw/SSOProxy/SAML2")
.assertingPartyDetails(details -> details.entityId(ipdBaseUrl + "/gw/metadata")
.singleSignOnServiceLocation(ipdBaseUrl + "/gw/SSOProxy/SAML2")
.singleSignOnServiceBinding(Saml2MessageBinding.POST)
.wantAuthnRequestsSigned(true)
.verificationX509Credentials(credentials -> {
@@ -133,8 +139,8 @@ public Saml2AuthenticationRequestResolver authenticationRequestResolver(RelyingP
authnRequest.setRequestedAuthnContext(buildRequestedAuthnContext());
// Log the SAML AuthnRequest after setting context
// String samlRequest = SamlRequestLogger.convertSAMLObjectToString(authnRequest);
logger.info("SAML Authentication Request.");
String samlRequest = SamlRequestLogger.convertSAMLObjectToString(authnRequest);
logger.info("SAML AuthnRequest after setting context: " + samlRequest);
});
return authenticationRequestResolver;
@@ -158,7 +164,7 @@ private RequestedAuthnContext buildRequestedAuthnContext() {
public PrivateKey readPrivateKey() throws Exception {
// Path to your private key PEM file
try (PemReader pemReader = new PemReader(new InputStreamReader(readKey("dev/saml/private-key.pem")))) {
try (PemReader pemReader = new PemReader(new InputStreamReader(readKey(activeProfileFolder + "/saml/private-key.pem")))) {
// Read the PEM content
byte[] pemContent = pemReader.readPemObject().getContent();
// Decode the PEM content
@@ -170,7 +176,7 @@ private RequestedAuthnContext buildRequestedAuthnContext() {
}
public X509Certificate readCertificate() throws Exception {
// Path to your certificate PEM fileFile
try (InputStream inStream = readKey("dev/saml/public-cert.pem")) {
try (InputStream inStream = readKey(activeProfileFolder + "/saml/public-cert.pem")) {
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
return (X509Certificate) certFactory.generateCertificate(inStream);
}
@@ -178,7 +184,7 @@ private RequestedAuthnContext buildRequestedAuthnContext() {
public X509Certificate readIdpCertificate() throws Exception {
// Path to your IDP public certificate PEM file
try (InputStream inStream = readKey("dev/saml/idp-certificate.pem")) {
try (InputStream inStream = readKey(activeProfileFolder + "/saml/idp-certificate.pem")) {
CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
return (X509Certificate) certFactory.generateCertificate(inStream);
}

View File

@@ -45,6 +45,7 @@ public class SamlSuccessHandler implements AuthenticationSuccessHandler {
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException {
try {
logger.info("SAML login in Authentication Success Handler");
Saml2Authentication samlAuth = (Saml2Authentication) authentication;
Saml2AuthenticatedPrincipal principal = (Saml2AuthenticatedPrincipal) samlAuth.getPrincipal();

View File

@@ -10,12 +10,14 @@ import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.RoleStatusEnum;
import net.gepafin.tendermanagement.enums.UserStatusEnum;
import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.response.CompanyResponse;
import net.gepafin.tendermanagement.model.response.RoleResponseBean;
import net.gepafin.tendermanagement.model.response.UserSamlResponse;
import net.gepafin.tendermanagement.model.response.UserResponseBean;
import net.gepafin.tendermanagement.model.util.JWTToken;
import net.gepafin.tendermanagement.repositories.BeneficiaryRepository;
import net.gepafin.tendermanagement.repositories.UserRepository;
import net.gepafin.tendermanagement.service.CompanyService;
import net.gepafin.tendermanagement.service.impl.AuthenticationService;
import net.gepafin.tendermanagement.util.Utils;
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
@@ -27,18 +29,22 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import java.util.List;
import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
@Repository
@Component
public class UserDao {
private final Logger log = LoggerFactory.getLogger(UserDao.class);
@Autowired
private UserRepository userRepository;
@Autowired
private CompanyDao companyDao;
@Autowired
private AuthenticationService authService;
@@ -77,8 +83,9 @@ public class UserDao {
beneficiaryEntity.setLastName(userReq.getLastName());
beneficiaryEntity.setOrganization(userReq.getOrganization());
beneficiaryEntity.setPhoneNumber(userReq.getPhoneNumber());
beneficiaryEntity =beneficiaryRepository.save(beneficiaryEntity);
}
return beneficiaryRepository.save(beneficiaryEntity);
return beneficiaryEntity;
}
private void validateUserRequest(String tempToken, UserReq userReq) {
@@ -188,6 +195,8 @@ public class UserDao {
RoleResponseBean roleResponseBean = roleDao.convertRoleEntityToRoleResponse(userEntity.getRoleEntity());
userResponseBean.setRole(roleResponseBean);
userResponseBean.setLastLogin(userEntity.getLastLogin());
List<CompanyResponse> companyResponseBeans = companyDao.getCompanyByUserId(userEntity.getId());
userResponseBean.setCompanies(companyResponseBeans);
if (userEntity.getBeneficiary() == null) {
userResponseBean.setFirstName(userEntity.getFirstName());
userResponseBean.setLastName(userEntity.getLastName());

View File

@@ -6,6 +6,7 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
import java.util.List;
@Getter
@Setter
@@ -43,4 +44,6 @@ public class LoginResponse {
private LocalDateTime createdDate;
private LocalDateTime updatedDate;
private List<CompanyResponse> companies;
}

View File

@@ -6,6 +6,7 @@ import net.gepafin.tendermanagement.enums.UserStatusEnum;
import net.gepafin.tendermanagement.model.BaseBean;
import java.time.LocalDateTime;
import java.util.List;
@Getter
@Setter
@@ -37,4 +38,5 @@ public class UserResponseBean extends BaseBean {
private LocalDateTime dateOfBirth;
private List<CompanyResponse> companies;
}

View File

@@ -5,11 +5,13 @@ import jakarta.servlet.http.HttpServletResponse;
import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.config.jwt.TokenProvider;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.dao.CompanyDao;
import net.gepafin.tendermanagement.dao.RoleDao;
import net.gepafin.tendermanagement.entities.SamlResponseEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.UserStatusEnum;
import net.gepafin.tendermanagement.model.request.LoginReq;
import net.gepafin.tendermanagement.model.response.CompanyResponse;
import net.gepafin.tendermanagement.model.response.LoginResponse;
import net.gepafin.tendermanagement.model.response.RoleResponseBean;
import net.gepafin.tendermanagement.model.response.UserSamlResponse;
@@ -42,13 +44,15 @@ public class AuthenticationService {
private final TokenProvider tokenProvider;
private final AuthenticationManager authenticationManager;
@Autowired
private CompanyDao companyDao;
@Autowired
private UserRepository userRepository;
@Autowired
private RoleDao roleDao;
@Autowired
private SamlResponseRepository samlResponseLogRepository;
@@ -90,10 +94,12 @@ public class AuthenticationService {
return jwtToken;
}
private static LoginResponse getLoginResponse(UserEntity user, RoleResponseBean roleResponseBean) {
private LoginResponse getLoginResponse(UserEntity user, RoleResponseBean roleResponseBean) {
LoginResponse loginResponse = new LoginResponse();
loginResponse.setEmail(user.getEmail());
loginResponse.setId(user.getId());
List<CompanyResponse> companyResponseBeans = companyDao.getCompanyByUserId(user.getId());
loginResponse.setCompanies(companyResponseBeans);
loginResponse.setRole(roleResponseBean);
loginResponse.setStatus(user.getStatus());
loginResponse.setLastLogin(user.getLastLogin());