Created beneficiary and associated with user

This commit is contained in:
rajesh
2024-09-27 16:44:39 +05:30
parent 40e5ab9e91
commit ee80959329
10 changed files with 223 additions and 77 deletions

View File

@@ -133,8 +133,8 @@ public Saml2AuthenticationRequestResolver authenticationRequestResolver(RelyingP
authnRequest.setRequestedAuthnContext(buildRequestedAuthnContext()); authnRequest.setRequestedAuthnContext(buildRequestedAuthnContext());
// Log the SAML AuthnRequest after setting context // Log the SAML AuthnRequest after setting context
String samlRequest = SamlRequestLogger.convertSAMLObjectToString(authnRequest); // String samlRequest = SamlRequestLogger.convertSAMLObjectToString(authnRequest);
logger.info("SAML AuthnRequest after setting context: " + samlRequest); logger.info("SAML Authentication Request.");
}); });
return authenticationRequestResolver; return authenticationRequestResolver;

View File

@@ -65,7 +65,7 @@ public class SamlSuccessHandler implements AuthenticationSuccessHandler {
logger.info("SAML login successful for user: " + principal.getName()); logger.info("SAML login successful for user: " + principal.getName());
String cf = userAttributes.get("CodiceFiscale").get(0).toString(); String cf = userAttributes.get("CodiceFiscale").get(0).toString();
UserEntity userEntity = userRepository.findByCodiceFiscale(cf).orElse(null); UserEntity userEntity = userRepository.findByBeneficiaryCodiceFiscale(cf).orElse(null);
if (userEntity == null) { if (userEntity == null) {
redirectUrl += "/registration?temp_token=" + token; redirectUrl += "/registration?temp_token=" + token;
} else { } else {

View File

@@ -4,6 +4,7 @@ import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.BeneficiaryEntity;
import net.gepafin.tendermanagement.entities.RoleEntity; import net.gepafin.tendermanagement.entities.RoleEntity;
import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.enums.RoleStatusEnum; import net.gepafin.tendermanagement.enums.RoleStatusEnum;
@@ -13,6 +14,7 @@ import net.gepafin.tendermanagement.model.response.RoleResponseBean;
import net.gepafin.tendermanagement.model.response.UserSamlResponse; import net.gepafin.tendermanagement.model.response.UserSamlResponse;
import net.gepafin.tendermanagement.model.response.UserResponseBean; import net.gepafin.tendermanagement.model.response.UserResponseBean;
import net.gepafin.tendermanagement.model.util.JWTToken; import net.gepafin.tendermanagement.model.util.JWTToken;
import net.gepafin.tendermanagement.repositories.BeneficiaryRepository;
import net.gepafin.tendermanagement.repositories.UserRepository; import net.gepafin.tendermanagement.repositories.UserRepository;
import net.gepafin.tendermanagement.service.impl.AuthenticationService; import net.gepafin.tendermanagement.service.impl.AuthenticationService;
import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Utils;
@@ -48,8 +50,40 @@ public class UserDao {
@Autowired @Autowired
private RoleDao roleDao; private RoleDao roleDao;
public JWTToken createUser(HttpServletRequest request, String tempToken, UserReq userReq) { @Autowired
private BeneficiaryRepository beneficiaryRepository;
public JWTToken createUser(HttpServletRequest request, String tempToken, UserReq userReq) {
validateUserRequest(tempToken, userReq);
validatePassword(userReq.getPassword(), userReq.getConfPassword(), tempToken);
RoleEntity roleEntity = getRoleEntity(userReq.getRoleId());
BeneficiaryEntity beneficiary = createBeneficiary(roleEntity, userReq);
UserEntity userEntity = convertUserRequestToUserEntity(beneficiary, roleEntity, userReq);
log.info("User created with ID: {}", userEntity.getId());
return authService.getJWTTokenBean(userEntity, Boolean.TRUE);
}
private BeneficiaryEntity createBeneficiary(RoleEntity roleEntity, UserReq userReq) {
BeneficiaryEntity beneficiaryEntity = null;
if (RoleStatusEnum.ROLE_BENEFICIARY.getValue().equals(roleEntity.getRoleType())) {
beneficiaryEntity = new BeneficiaryEntity();
beneficiaryEntity.setAddress(userReq.getAddress());
beneficiaryEntity.setCity(userReq.getCity());
beneficiaryEntity.setCodiceFiscale(userReq.getCodiceFiscale());
beneficiaryEntity.setCountry(userReq.getCountry());
beneficiaryEntity.setDateOfBirth(userReq.getDateOfBirth());
beneficiaryEntity.setEmail(userReq.getEmail());
beneficiaryEntity.setFirstName(userReq.getFirstName());
beneficiaryEntity.setLastName(userReq.getLastName());
beneficiaryEntity.setOrganization(userReq.getOrganization());
beneficiaryEntity.setPhoneNumber(userReq.getPhoneNumber());
}
return beneficiaryRepository.save(beneficiaryEntity);
}
private void validateUserRequest(String tempToken, UserReq userReq) {
if (Boolean.FALSE.equals(isValidEmail(userReq.getEmail()))) { if (Boolean.FALSE.equals(isValidEmail(userReq.getEmail()))) {
throw new CustomValidationException(Status.VALIDATION_ERROR, throw new CustomValidationException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.VALIDATE_EMAIL)); Translator.toLocale(GepafinConstant.VALIDATE_EMAIL));
@@ -61,7 +95,7 @@ public class UserDao {
Translator.toLocale(GepafinConstant.EMAIL_ALREADY_EXISTS)); Translator.toLocale(GepafinConstant.EMAIL_ALREADY_EXISTS));
} }
if (Boolean.FALSE.equals(StringUtils.isEmpty(userReq.getCodiceFiscale())) if (Boolean.FALSE.equals(StringUtils.isEmpty(userReq.getCodiceFiscale()))
&& userRepository.existsByCodiceFiscale(userReq.getCodiceFiscale())) { && userRepository.existsByBeneficiaryCodiceFiscale(userReq.getCodiceFiscale())) {
log.error("User creation failed: CodiceFiscale {} already exists", userReq.getCodiceFiscale()); log.error("User creation failed: CodiceFiscale {} already exists", userReq.getCodiceFiscale());
throw new CustomValidationException(Status.VALIDATION_ERROR, throw new CustomValidationException(Status.VALIDATION_ERROR,
Translator.toLocale(GepafinConstant.CODICE_FISCALE_EXISTS)); Translator.toLocale(GepafinConstant.CODICE_FISCALE_EXISTS));
@@ -73,12 +107,6 @@ public class UserDao {
if (tempToken != null) { if (tempToken != null) {
userReq.setRoleId(null); userReq.setRoleId(null);
} }
validatePassword(userReq.getPassword(), userReq.getConfPassword(), tempToken);
UserEntity userEntity = convertUserRequestToUserEntity(userReq);
userEntity = userRepository.save(userEntity);
log.info("User created with ID: {}", userEntity.getId());
return authService.getJWTTokenBean(userEntity, Boolean.TRUE);
} }
private void validatePassword(String password, String confirmPassword, String tempToken) { private void validatePassword(String password, String confirmPassword, String tempToken) {
@@ -124,22 +152,24 @@ public class UserDao {
return convertUserEntityToUserResponse(userEntity); return convertUserEntityToUserResponse(userEntity);
} }
private UserEntity convertUserRequestToUserEntity(UserReq userReq) { private UserEntity convertUserRequestToUserEntity(BeneficiaryEntity beneficiary, RoleEntity roleEntity, UserReq userReq) {
UserEntity userEntity = new UserEntity(); UserEntity userEntity = new UserEntity();
if(Boolean.FALSE.equals(StringUtils.isEmpty(userReq.getPassword()))) { if(Boolean.FALSE.equals(StringUtils.isEmpty(userReq.getPassword()))) {
userEntity.setPassword(passwordEncoder.encode(userReq.getPassword())); userEntity.setPassword(passwordEncoder.encode(userReq.getPassword()));
} }
userEntity.setRoleEntity(roleEntity);
userEntity.setEmail(userReq.getEmail()); userEntity.setEmail(userReq.getEmail());
userEntity.setFirstName(userReq.getFirstName());
userEntity.setStatus(UserStatusEnum.ACTIVE.getValue()); userEntity.setStatus(UserStatusEnum.ACTIVE.getValue());
userEntity.setBeneficiary(beneficiary);
if (Boolean.FALSE.equals(RoleStatusEnum.ROLE_BENEFICIARY.getValue().equals(roleEntity.getRoleType()))) {
userEntity.setFirstName(userReq.getFirstName());
userEntity.setLastName(userReq.getLastName()); userEntity.setLastName(userReq.getLastName());
userEntity.setOrganization(userReq.getOrganization()); userEntity.setOrganization(userReq.getOrganization());
userEntity.setAddress(userReq.getAddress()); userEntity.setAddress(userReq.getAddress());
userEntity.setPhoneNumber(userReq.getPhoneNumber()); userEntity.setPhoneNumber(userReq.getPhoneNumber());
userEntity.setRoleEntity(getRoleEntity(userReq.getRoleId()));
userEntity.setCodiceFiscale(userReq.getCodiceFiscale());
userEntity.setDateOfBirth(userReq.getDateOfBirth()); userEntity.setDateOfBirth(userReq.getDateOfBirth());
return userEntity; }
return userRepository.save(userEntity);
} }
private RoleEntity getRoleEntity(Long roleId) { private RoleEntity getRoleEntity(Long roleId) {
@@ -156,6 +186,11 @@ public class UserDao {
userResponseBean.setCreatedDate(userEntity.getCreatedDate()); userResponseBean.setCreatedDate(userEntity.getCreatedDate());
userResponseBean.setUpdatedDate(userEntity.getUpdatedDate()); userResponseBean.setUpdatedDate(userEntity.getUpdatedDate());
userResponseBean.setEmail(userEntity.getEmail()); userResponseBean.setEmail(userEntity.getEmail());
userResponseBean.setStatus(UserStatusEnum.valueOf(userEntity.getStatus()));
RoleResponseBean roleResponseBean = roleDao.convertRoleEntityToRoleResponse(userEntity.getRoleEntity());
userResponseBean.setRole(roleResponseBean);
userResponseBean.setLastLogin(userEntity.getLastLogin());
if (userEntity.getBeneficiary() == null) {
userResponseBean.setFirstName(userEntity.getFirstName()); userResponseBean.setFirstName(userEntity.getFirstName());
userResponseBean.setLastName(userEntity.getLastName()); userResponseBean.setLastName(userEntity.getLastName());
userResponseBean.setPhoneNumber(userEntity.getPhoneNumber()); userResponseBean.setPhoneNumber(userEntity.getPhoneNumber());
@@ -163,12 +198,18 @@ public class UserDao {
userResponseBean.setAddress(userEntity.getAddress()); userResponseBean.setAddress(userEntity.getAddress());
userResponseBean.setCity(userEntity.getCity()); userResponseBean.setCity(userEntity.getCity());
userResponseBean.setCountry(userEntity.getCountry()); userResponseBean.setCountry(userEntity.getCountry());
userResponseBean.setStatus(UserStatusEnum.valueOf(userEntity.getStatus()));
RoleResponseBean roleResponseBean = roleDao.convertRoleEntityToRoleResponse(userEntity.getRoleEntity());
userResponseBean.setRole(roleResponseBean);
userResponseBean.setLastLogin(userEntity.getLastLogin());
userResponseBean.setCodiceFiscale(userEntity.getCodiceFiscale());
userResponseBean.setDateOfBirth(userEntity.getDateOfBirth()); userResponseBean.setDateOfBirth(userEntity.getDateOfBirth());
} else {
userResponseBean.setFirstName(userEntity.getBeneficiary().getFirstName());
userResponseBean.setLastName(userEntity.getBeneficiary().getLastName());
userResponseBean.setPhoneNumber(userEntity.getBeneficiary().getPhoneNumber());
userResponseBean.setOrganization(userEntity.getBeneficiary().getOrganization());
userResponseBean.setAddress(userEntity.getBeneficiary().getAddress());
userResponseBean.setCity(userEntity.getBeneficiary().getCity());
userResponseBean.setCountry(userEntity.getBeneficiary().getCountry());
userResponseBean.setCodiceFiscale(userEntity.getBeneficiary().getCodiceFiscale());
userResponseBean.setDateOfBirth(userEntity.getBeneficiary().getDateOfBirth());
}
return userResponseBean; return userResponseBean;
} }

View File

@@ -0,0 +1,47 @@
package net.gepafin.tendermanagement.entities;
import java.time.LocalDateTime;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.validation.constraints.Email;
import lombok.Data;
@Entity
@Table(name = "beneficiary")
@Data
public class BeneficiaryEntity extends BaseEntity {
@Email
@Column(name = "EMAIL")
private String email;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "PHONE_NUMBER")
private String phoneNumber;
@Column(name = "ORGANIZATION")
private String organization;
@Column(name = "ADDRESS")
private String address;
@Column(name = "CITY")
private String city;
@Column(name = "COUNTRY")
private String country;
@Column(name = "CODICE_FISCALE")
private String codiceFiscale;
@Column(name = "DATE_OF_BIRTH")
private LocalDateTime dateOfBirth;
}

View File

@@ -59,9 +59,10 @@ public class UserEntity extends BaseEntity {
@Column(name = "RESET_PASSWORD_TOKEN", length = 255, nullable = true) @Column(name = "RESET_PASSWORD_TOKEN", length = 255, nullable = true)
private String resetPasswordToken; private String resetPasswordToken;
@Column(name = "CODICE_FISCALE")
private String codiceFiscale;
@Column(name = "DATE_OF_BIRTH") @Column(name = "DATE_OF_BIRTH")
private LocalDateTime dateOfBirth; private LocalDateTime dateOfBirth;
@OneToOne
@JoinColumn(name = "BENEFICIARY_ID")
private BeneficiaryEntity beneficiary;
} }

View File

@@ -0,0 +1,11 @@
package net.gepafin.tendermanagement.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import net.gepafin.tendermanagement.entities.BeneficiaryEntity;
@Repository
public interface BeneficiaryRepository extends JpaRepository<BeneficiaryEntity, Long> {
}

View File

@@ -2,9 +2,11 @@ package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.entities.UserEntity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional; import java.util.Optional;
@Repository
public interface UserRepository extends JpaRepository<UserEntity, Long> { public interface UserRepository extends JpaRepository<UserEntity, Long> {
Optional<UserEntity> findByEmailIgnoreCase(String email); Optional<UserEntity> findByEmailIgnoreCase(String email);
@@ -13,7 +15,7 @@ public interface UserRepository extends JpaRepository<UserEntity, Long> {
UserEntity findByEmail(String email); UserEntity findByEmail(String email);
Optional<UserEntity> findByCodiceFiscale(String cf); Optional<UserEntity> findByBeneficiaryCodiceFiscale(String codiceFiscale);
boolean existsByCodiceFiscale(String codiceFiscale); boolean existsByBeneficiaryCodiceFiscale(String codiceFiscale);
} }

View File

@@ -92,22 +92,34 @@ public class AuthenticationService {
private static LoginResponse getLoginResponse(UserEntity user, RoleResponseBean roleResponseBean) { private static LoginResponse getLoginResponse(UserEntity user, RoleResponseBean roleResponseBean) {
LoginResponse loginResponse = new LoginResponse(); LoginResponse loginResponse = new LoginResponse();
loginResponse.setId(user.getId());
loginResponse.setEmail(user.getEmail()); loginResponse.setEmail(user.getEmail());
loginResponse.setId(user.getId());
loginResponse.setRole(roleResponseBean);
loginResponse.setStatus(user.getStatus());
loginResponse.setLastLogin(user.getLastLogin());
loginResponse.setCreatedDate(user.getCreatedDate());
loginResponse.setUpdatedDate(user.getUpdatedDate());
if (user.getBeneficiary() == null) {
loginResponse.setFirstName(user.getFirstName()); loginResponse.setFirstName(user.getFirstName());
loginResponse.setLastName(user.getLastName()); loginResponse.setLastName(user.getLastName());
loginResponse.setRole(roleResponseBean);
loginResponse.setPhoneNumber(user.getPhoneNumber()); loginResponse.setPhoneNumber(user.getPhoneNumber());
loginResponse.setAddress(user.getAddress()); loginResponse.setAddress(user.getAddress());
loginResponse.setOrganization(user.getOrganization()); loginResponse.setOrganization(user.getOrganization());
loginResponse.setCountry(user.getCountry()); loginResponse.setCountry(user.getCountry());
loginResponse.setStatus(user.getStatus());
loginResponse.setCity(user.getCity()); loginResponse.setCity(user.getCity());
loginResponse.setLastLogin(user.getLastLogin());
loginResponse.setCodiceFiscale(user.getCodiceFiscale());
loginResponse.setDateOfBirth(user.getDateOfBirth()); loginResponse.setDateOfBirth(user.getDateOfBirth());
loginResponse.setCreatedDate(user.getCreatedDate()); }else {
loginResponse.setUpdatedDate(user.getUpdatedDate()); loginResponse.setFirstName(user.getBeneficiary().getFirstName());
loginResponse.setLastName(user.getBeneficiary().getLastName());
loginResponse.setPhoneNumber(user.getBeneficiary().getPhoneNumber());
loginResponse.setAddress(user.getBeneficiary().getAddress());
loginResponse.setOrganization(user.getBeneficiary().getOrganization());
loginResponse.setCountry(user.getBeneficiary().getCountry());
loginResponse.setCity(user.getBeneficiary().getCity());
loginResponse.setCodiceFiscale(user.getBeneficiary().getCodiceFiscale());
loginResponse.setDateOfBirth(user.getBeneficiary().getDateOfBirth());
}
return loginResponse; return loginResponse;
} }
public void logout(HttpServletRequest request, HttpServletResponse response) { public void logout(HttpServletRequest request, HttpServletResponse response) {
@@ -131,7 +143,7 @@ public class AuthenticationService {
Map<String, List<Object>> userAttributes = Utils Map<String, List<Object>> userAttributes = Utils
.convertStringIntoMap(samlResponseLogEntity.getAuthenticationObject()); .convertStringIntoMap(samlResponseLogEntity.getAuthenticationObject());
String cf = userAttributes.get("CodiceFiscale").get(0).toString(); String cf = userAttributes.get("CodiceFiscale").get(0).toString();
UserEntity userEntity = userRepository.findByCodiceFiscale(cf) UserEntity userEntity = userRepository.findByBeneficiaryCodiceFiscale(cf)
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG))); Translator.toLocale(GepafinConstant.USER_NOT_FOUND_MSG)));
samlResponseLogRepository.delete(samlResponseLogEntity); samlResponseLogRepository.delete(samlResponseLogEntity);
@@ -150,7 +162,7 @@ public class AuthenticationService {
Map<String, List<Object>> userAttributes = Utils Map<String, List<Object>> userAttributes = Utils
.convertStringIntoMap(samlResponseLogEntity.getAuthenticationObject()); .convertStringIntoMap(samlResponseLogEntity.getAuthenticationObject());
String cf = userAttributes.get("CodiceFiscale").get(0).toString(); String cf = userAttributes.get("CodiceFiscale").get(0).toString();
if (userRepository.findByCodiceFiscale(cf).isPresent()) { if (userRepository.existsByBeneficiaryCodiceFiscale(cf)) {
throw new ResourceNotFoundException(Status.NOT_FOUND, throw new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.USER_ALREADY_EXIST_MSG)); Translator.toLocale(GepafinConstant.USER_ALREADY_EXIST_MSG));
} }

View File

@@ -52,7 +52,7 @@ public class Validator {
public void validateRequest(HttpServletRequest request,RoleStatusEnum role) { public void validateRequest(HttpServletRequest request,RoleStatusEnum role) {
if (RoleStatusEnum.ROLE_SUPER_ADMIN.equals(role) && Boolean.FALSE.equals(checkIsSuperAdmin(request))) { if (RoleStatusEnum.ROLE_SUPER_ADMIN.equals(role) && Boolean.FALSE.equals(checkIsSuperAdmin(request))) {
throw new UnauthorizedAccessException(Status.UNAUTHORIZED, Translator.toLocale(GepafinConstant.INVALID_USER)); throw new UnauthorizedAccessException(Status.UNAUTHORIZED, Translator.toLocale(GepafinConstant.INVALID_REQUEST));
} }
} }

View File

@@ -738,4 +738,36 @@
<dropNotNullConstraint tableName="gepafin_user" columnName="password"/> <dropNotNullConstraint tableName="gepafin_user" columnName="password"/>
</changeSet> </changeSet>
<changeSet id="27-09-2024_1" author="Rajesh Khore">
<createTable tableName="beneficiary">
<column name="id" type="INTEGER" autoIncrement="true">
<constraints nullable="false" primaryKey="true"
primaryKeyName="beneficiary_pkey" />
</column>
<column name="EMAIL" type="VARCHAR(255)" />
<column name="FIRST_NAME" type="VARCHAR(255)" />
<column name="LAST_NAME" type="VARCHAR(255)" />
<column name="PHONE_NUMBER" type="VARCHAR(255)" />
<column name="ORGANIZATION" type="TEXT" />
<column name="ADDRESS" type="TEXT" />
<column name="CITY" type="TEXT" />
<column name="COUNTRY" type="TEXT" />
<column name="CODICE_FISCALE" type="varchar(255)">
<constraints nullable="true" unique="true"/>
</column>
<column name="DATE_OF_BIRTH" type="TIMESTAMP" />
<column name="created_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
<column name="updated_date" type="TIMESTAMP WITHOUT TIME ZONE"/>
</createTable>
<dropColumn tableName="gepafin_user" columnName="codice_fiscale"/>
<dropNotNullConstraint tableName="gepafin_user" columnName="first_name"/>
<dropNotNullConstraint tableName="gepafin_user" columnName="last_name"/>
<addColumn tableName="gepafin_user">
<column name="beneficiary_id" type="INTEGER">
<constraints nullable="true" foreignKeyName="fk_beneficiary_gepafin_user" references="beneficiary(id)"/>
</column>
</addColumn>
</changeSet>
</databaseChangeLog> </databaseChangeLog>