Resolved conflict
This commit is contained in:
@@ -1,43 +1,48 @@
|
|||||||
package net.gepafin.tendermanagement.config.jwt;
|
package net.gepafin.tendermanagement.config.jwt;
|
||||||
|
|
||||||
import jakarta.servlet.FilterChain;
|
|
||||||
import jakarta.servlet.ServletException;
|
|
||||||
import jakarta.servlet.ServletRequest;
|
|
||||||
import jakarta.servlet.ServletResponse;
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
|
||||||
import org.springframework.security.core.Authentication;
|
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
import org.springframework.web.filter.GenericFilterBean;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class JWTFilter extends GenericFilterBean {
|
import org.springframework.security.core.Authentication;
|
||||||
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
import org.springframework.web.filter.OncePerRequestFilter;
|
||||||
|
|
||||||
private final TokenProvider tokenProvider;
|
import jakarta.servlet.FilterChain;
|
||||||
|
import jakarta.servlet.ServletException;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
public JWTFilter(TokenProvider tokenProvider) {
|
public class JWTFilter extends OncePerRequestFilter {
|
||||||
this.tokenProvider = tokenProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
private final TokenProvider tokenProvider;
|
||||||
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
|
|
||||||
throws IOException, ServletException {
|
|
||||||
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
|
|
||||||
String token = resolveToken(httpServletRequest);
|
|
||||||
|
|
||||||
if (StringUtils.hasText(token) && tokenProvider.validateToken(token)) {
|
public JWTFilter(TokenProvider tokenProvider) {
|
||||||
Authentication authentication = tokenProvider.getAuthentication(token);
|
this.tokenProvider = tokenProvider;
|
||||||
if (authentication != null) {
|
}
|
||||||
SecurityContextHolder.getContext().setAuthentication(authentication);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
filterChain.doFilter(servletRequest, servletResponse);
|
protected void doFilterInternal(HttpServletRequest servletRequest, HttpServletResponse servletResponse,
|
||||||
}
|
FilterChain filterChain) throws ServletException, IOException {
|
||||||
|
|
||||||
private String resolveToken(HttpServletRequest request) {
|
try {
|
||||||
String bearerToken = request.getHeader("Authorization");
|
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
|
||||||
return StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ") ? bearerToken.substring(7) : null;
|
String token = resolveToken(httpServletRequest);
|
||||||
}
|
|
||||||
|
if (StringUtils.hasText(token) && tokenProvider.validateToken(token)) {
|
||||||
|
Authentication authentication = tokenProvider.getAuthentication(token);
|
||||||
|
if (authentication != null) {
|
||||||
|
SecurityContextHolder.getContext().setAuthentication(authentication);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
filterChain.doFilter(servletRequest, servletResponse);
|
||||||
|
} catch (Exception e) {
|
||||||
|
servletResponse.setStatus(HttpServletResponse.SC_FORBIDDEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private String resolveToken(HttpServletRequest request) {
|
||||||
|
String bearerToken = request.getHeader("Authorization");
|
||||||
|
return StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ") ? bearerToken.substring(7) : null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,39 @@
|
|||||||
package net.gepafin.tendermanagement.config.jwt;
|
package net.gepafin.tendermanagement.config.jwt;
|
||||||
|
|
||||||
|
import static io.micrometer.common.util.StringUtils.isEmpty;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import javax.crypto.SecretKey;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
import org.apache.commons.lang3.time.DateUtils;
|
||||||
|
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.authentication.UsernamePasswordAuthenticationToken;
|
||||||
|
import org.springframework.security.core.Authentication;
|
||||||
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||||
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
|
import org.springframework.security.core.userdetails.User;
|
||||||
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
import io.jsonwebtoken.Claims;
|
import io.jsonwebtoken.Claims;
|
||||||
import io.jsonwebtoken.Jwts;
|
import io.jsonwebtoken.Jwts;
|
||||||
import io.jsonwebtoken.SignatureAlgorithm;
|
import io.jsonwebtoken.SignatureAlgorithm;
|
||||||
@@ -14,30 +48,6 @@ import net.gepafin.tendermanagement.repositories.UserRepository;
|
|||||||
import net.gepafin.tendermanagement.util.Utils;
|
import net.gepafin.tendermanagement.util.Utils;
|
||||||
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
||||||
import net.gepafin.tendermanagement.web.rest.api.errors.UnauthorizedAccessException;
|
import net.gepafin.tendermanagement.web.rest.api.errors.UnauthorizedAccessException;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
|
||||||
import org.apache.commons.lang3.time.DateUtils;
|
|
||||||
import org.apache.http.HttpResponse;
|
|
||||||
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.authentication.UsernamePasswordAuthenticationToken;
|
|
||||||
import org.springframework.security.core.Authentication;
|
|
||||||
import org.springframework.security.core.GrantedAuthority;
|
|
||||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
|
||||||
import org.springframework.security.core.userdetails.User;
|
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
|
|
||||||
import javax.crypto.SecretKey;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
|
|
||||||
import static io.micrometer.common.util.StringUtils.isEmpty;
|
|
||||||
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@@ -48,7 +58,7 @@ public class TokenProvider {
|
|||||||
private String secretKey;
|
private String secretKey;
|
||||||
|
|
||||||
@Value("${security.authentication.jwt.token-validity-in-seconds}")
|
@Value("${security.authentication.jwt.token-validity-in-seconds}")
|
||||||
private long tokenValidityInSeconds;
|
private int tokenValidityInSeconds;
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserRepository userRepository;
|
private UserRepository userRepository;
|
||||||
|
|
||||||
@@ -60,7 +70,6 @@ public class TokenProvider {
|
|||||||
private static final String MERCHANTID="merchantId";
|
private static final String MERCHANTID="merchantId";
|
||||||
|
|
||||||
static final String AUTH_SECRET = "X-Api-Secret";
|
static final String AUTH_SECRET = "X-Api-Secret";
|
||||||
private final Set<String> invalidatedTokens = new HashSet<>();
|
|
||||||
private static final String USER_ID = "userId";
|
private static final String USER_ID = "userId";
|
||||||
|
|
||||||
public UserEntity validateUser(Map<String, Object> userInfo) {
|
public UserEntity validateUser(Map<String, Object> userInfo) {
|
||||||
@@ -96,12 +105,12 @@ public class TokenProvider {
|
|||||||
Date validity;
|
Date validity;
|
||||||
|
|
||||||
if (Boolean.TRUE.equals(rememberMe)) {
|
if (Boolean.TRUE.equals(rememberMe)) {
|
||||||
now = DateUtils.addMonths(new Date(), 2).getTime();
|
now = DateUtils.addDays(new Date(), 2).getTime();
|
||||||
validity = new Date(now);
|
validity = new Date(now);
|
||||||
log.info("Creating token with extended validity for 2 months.");
|
log.info("Creating token with extended validity for 2 days.");
|
||||||
} else {
|
} else {
|
||||||
now = (new Date()).getTime();
|
now = DateUtils.addSeconds(new Date(), this.tokenValidityInSeconds).getTime();
|
||||||
validity = new Date(now + (this.tokenValidityInSeconds * 1000));
|
validity = new Date(now);
|
||||||
log.info("Creating token with standard validity of {} seconds.", this.tokenValidityInSeconds);
|
log.info("Creating token with standard validity of {} seconds.", this.tokenValidityInSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,32 +157,15 @@ public class TokenProvider {
|
|||||||
return authorities;
|
return authorities;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean validateToken(String authToken) {
|
public boolean validateToken(String authToken) {
|
||||||
try {
|
|
||||||
if (isTokenInvalid(authToken)) {
|
Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(authToken);
|
||||||
log.warn("Token is invalidated.");
|
log.info("Token is valid.");
|
||||||
return false;
|
return true;
|
||||||
}
|
|
||||||
Jwts.parserBuilder()
|
}
|
||||||
.setSigningKey(key)
|
|
||||||
.build()
|
|
||||||
.parseClaimsJws(authToken);
|
|
||||||
log.info("Token is valid.");
|
|
||||||
return true;
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("Token validation failed: {}", e.getMessage());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void invalidateToken(String token) {
|
|
||||||
invalidatedTokens.add(token);
|
|
||||||
log.info("Token invalidated: {}", token);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isTokenInvalid(String token) {
|
|
||||||
return invalidatedTokens.contains(token);
|
|
||||||
}
|
|
||||||
public Map<String, Object> getUserInfoAndUserIdFromToken(HttpServletRequest request) {
|
public Map<String, Object> getUserInfoAndUserIdFromToken(HttpServletRequest request) {
|
||||||
Map<String, Object> userInfo = new HashMap<>();
|
Map<String, Object> userInfo = new HashMap<>();
|
||||||
String authSecretHeader=request.getHeader(AUTH_SECRET);
|
String authSecretHeader=request.getHeader(AUTH_SECRET);
|
||||||
|
|||||||
@@ -1,19 +1,15 @@
|
|||||||
package net.gepafin.tendermanagement.dao;
|
package net.gepafin.tendermanagement.dao;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
import net.gepafin.tendermanagement.entities.*;
|
import net.gepafin.tendermanagement.entities.*;
|
||||||
import net.gepafin.tendermanagement.enums.EmailEntityTypeEnum;
|
|
||||||
import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
|
import net.gepafin.tendermanagement.enums.RecipientTypeEnum;
|
||||||
import net.gepafin.tendermanagement.enums.StatusTypeEnum;
|
|
||||||
import net.gepafin.tendermanagement.entities.*;
|
|
||||||
import net.gepafin.tendermanagement.model.request.EmailConfig;
|
import net.gepafin.tendermanagement.model.request.EmailConfig;
|
||||||
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
|
import net.gepafin.tendermanagement.model.request.EmailLogRequest;
|
||||||
|
import net.gepafin.tendermanagement.model.response.AmendmentFormFieldResponse;
|
||||||
import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse;
|
import net.gepafin.tendermanagement.model.response.SystemEmailTemplateResponse;
|
||||||
import net.gepafin.tendermanagement.repositories.EmailLogRepository;
|
import net.gepafin.tendermanagement.repositories.*;
|
||||||
import net.gepafin.tendermanagement.repositories.HubRepository;
|
|
||||||
import net.gepafin.tendermanagement.service.*;
|
import net.gepafin.tendermanagement.service.*;
|
||||||
import net.gepafin.tendermanagement.service.impl.EmailService;
|
import net.gepafin.tendermanagement.service.impl.EmailService;
|
||||||
import net.gepafin.tendermanagement.service.impl.EmailServiceFactory;
|
import net.gepafin.tendermanagement.service.impl.EmailServiceFactory;
|
||||||
@@ -22,11 +18,14 @@ import net.gepafin.tendermanagement.util.Utils;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import static net.gepafin.tendermanagement.dao.ApplicationAmendmentRequestDao.filterByName;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class EmailNotificationDao {
|
public class EmailNotificationDao {
|
||||||
|
|
||||||
@@ -59,87 +58,161 @@ public class EmailNotificationDao {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private CompanyService companyService;
|
private CompanyService companyService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ApplicationFormRepository applicationFormRepository;
|
||||||
|
|
||||||
private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType,
|
@Autowired
|
||||||
Map<String, String> bodyPlaceholders, List<String> additionalRecipients,Long amendmentId) {
|
private ApplicationFormFieldRepository applicationFormFieldRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ApplicationEvaluationRepository applicationEvaluationRepository;
|
||||||
|
|
||||||
|
@Value("${rinaldo_email}")
|
||||||
|
private String rinaldoEmail;
|
||||||
|
|
||||||
|
private void sendEmail(ApplicationEntity applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum templateType, Map<String, String> bodyPlaceholders,
|
||||||
|
List<String> additionalRecipients, Long amendmentId) {
|
||||||
|
|
||||||
HubEntity hubEntity = hubService.valdateHub(applicationEntity.getHubId());
|
HubEntity hubEntity = hubService.valdateHub(applicationEntity.getHubId());
|
||||||
String service = determineService(applicationEntity.getHubId());
|
// String service = determineService(applicationEntity.getHubId());
|
||||||
String legalMail = service.equals("Gepafin S.p.a.") ? "bandi.gepafin@legalmail.it" : "bandi.sviluppumbria@legalmail.it";
|
// String legalMail = service.equals("Gepafin S.p.a.") ? "bandi.gepafin@legalmail.it" : "bandi.sviluppumbria@legalmail.it";
|
||||||
|
|
||||||
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(templateType, hubEntity, null);
|
SystemEmailTemplateResponse systemEmailTemplateResponse = systemEmailTemplatesService.retrieveTemplateByTypeAndCall(templateType, hubEntity, null);
|
||||||
Map<String, String> subjectPlaceholders = new HashMap<>();
|
Map<String, String> subjectPlaceholders = new HashMap<>();
|
||||||
CompanyEntity company=companyService.validateCompany(applicationEntity.getCompanyId());
|
CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId());
|
||||||
subjectPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
|
subjectPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
|
||||||
subjectPlaceholders.put("{{company_name}}", company.getCompanyName());
|
subjectPlaceholders.put("{{company_name}}", company.getCompanyName());
|
||||||
bodyPlaceholders.put("{{legal_mail}}", legalMail);
|
// bodyPlaceholders.put("{{legal_mail}}", legalMail);
|
||||||
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
|
String subject = Utils.replacePlaceholders(systemEmailTemplateResponse.getSubject(), subjectPlaceholders);
|
||||||
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
|
String body = Utils.replacePlaceholders(systemEmailTemplateResponse.getHtmlContent(), bodyPlaceholders);
|
||||||
|
|
||||||
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
|
UserEntity userEntity = userService.validateUser(applicationEntity.getUserId());
|
||||||
List<String> recipientEmails = getRecipientEmails(applicationEntity, userEntity, additionalRecipients);
|
sendEmails(applicationEntity, userEntity, additionalRecipients,amendmentId,systemEmailTemplateResponse,subject,body);
|
||||||
EmailLogRequest emailLogRequest=emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId(),Utils.listToCommaSeparatedString(recipientEmails),userEntity.getId(),applicationEntity.getId(),amendmentId ,applicationEntity.getCall().getId());
|
|
||||||
sendMail(applicationEntity.getHubId(), subject, body, recipientEmails,emailLogRequest);
|
|
||||||
}
|
}
|
||||||
private List<String> getRecipientEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List<String> additionalRecipients) {
|
private void sendEmails(ApplicationEntity applicationEntity, UserEntity userEntity, List<String> additionalRecipients,Long amendmentId,SystemEmailTemplateResponse systemEmailTemplateResponse,String subject,String body) {
|
||||||
List<String> recipientEmails = new ArrayList<>();
|
|
||||||
CompanyEntity company=companyService.validateCompany(applicationEntity.getCompanyId());
|
|
||||||
String companyEmail = company.getEmail();
|
|
||||||
String contactEmail = company.getContactEmail();
|
|
||||||
|
|
||||||
if (companyEmail != null && !companyEmail.isEmpty()) {
|
Optional<ApplicationEvaluationEntity> applicationEvaluationEntity = applicationEvaluationRepository.findByApplicationIdAndIsDeletedFalse(applicationEntity.getId());
|
||||||
recipientEmails.add(companyEmail);
|
CompanyEntity company = companyService.validateCompany(applicationEntity.getCompanyId());
|
||||||
}
|
String companyEmail = company.getEmail();
|
||||||
if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) {
|
String contactEmail = company.getContactEmail();
|
||||||
recipientEmails.add(contactEmail);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (userEntity.getBeneficiary().getEmail() != null) {
|
if (companyEmail != null && !companyEmail.isEmpty()) {
|
||||||
recipientEmails.add(userEntity.getBeneficiary().getEmail());
|
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.COMPANY,company.getId() ,
|
||||||
}
|
companyEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
|
||||||
if (additionalRecipients != null) {
|
sendMail(applicationEntity.getHubId(), subject, body, List.of(companyEmail), emailLogRequest);
|
||||||
recipientEmails.addAll(additionalRecipients);
|
}
|
||||||
}
|
if (contactEmail != null && !contactEmail.isEmpty() && !contactEmail.equals(companyEmail)) {
|
||||||
|
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.COMPANY,company.getId(),
|
||||||
|
contactEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
|
||||||
|
sendMail(applicationEntity.getHubId(), subject, body, List.of(contactEmail), emailLogRequest);
|
||||||
|
}
|
||||||
|
|
||||||
return recipientEmails;
|
if (userEntity.getBeneficiary().getEmail() != null) {
|
||||||
|
String beneficiaryEmail = userEntity.getBeneficiary().getEmail();
|
||||||
|
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.BENEFICIARY,userEntity.getBeneficiary().getId() ,
|
||||||
|
beneficiaryEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
|
||||||
|
sendMail(applicationEntity.getHubId(), subject, body, List.of(beneficiaryEmail), emailLogRequest);
|
||||||
|
}
|
||||||
|
if(userEntity.getHub().getEmail() != null){
|
||||||
|
String hubEmails = userEntity.getHub().getEmail();
|
||||||
|
String[] hubEmailArray = hubEmails.split(",");
|
||||||
|
for (String hubEmail : hubEmailArray) {
|
||||||
|
hubEmail = hubEmail.trim();
|
||||||
|
if (!hubEmail.isEmpty()) {
|
||||||
|
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.PROPERTIES,null,
|
||||||
|
hubEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
|
||||||
|
sendMail(applicationEntity.getHubId(), subject, body, List.of(hubEmail), emailLogRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (rinaldoEmail != null) {
|
||||||
|
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.PROPERTIES,null ,
|
||||||
|
rinaldoEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
|
||||||
|
sendMail(applicationEntity.getHubId(), subject, body, List.of(rinaldoEmail), emailLogRequest);
|
||||||
|
}
|
||||||
|
if (applicationEvaluationEntity.isPresent()) {
|
||||||
|
Long preInstructorId = applicationEvaluationEntity.get().getUserId(); // Assuming UserEntity has an email field
|
||||||
|
UserEntity instructorUser = userService.validateUser(preInstructorId);
|
||||||
|
String preInstructorEmail = instructorUser.getEmail();
|
||||||
|
if (preInstructorEmail != null && !preInstructorEmail.isEmpty()) {
|
||||||
|
EmailLogRequest emailLogRequest = emailLogDao.createEmailLogRequest(systemEmailTemplateResponse.getEmailScenario(), RecipientTypeEnum.INSTRUCTOR, instructorUser.getId(),
|
||||||
|
preInstructorEmail, userEntity.getId(), applicationEntity.getId(), amendmentId, applicationEntity.getCall().getId());
|
||||||
|
sendMail(applicationEntity.getHubId(), subject, body, List.of(preInstructorEmail), emailLogRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
// private String determineService(Long hubId) {
|
||||||
|
//
|
||||||
|
// HubEntity hub = hubRepository.findById(hubId).orElseThrow(() -> new IllegalArgumentException("Invalid Hub ID: " + hubId));
|
||||||
|
// return hub.getEmailServiceType().equalsIgnoreCase("MAILGUN_SERVICE") ? "Sviluppumbria" : "Gepafin S.p.a.";
|
||||||
|
// }
|
||||||
|
|
||||||
|
public void sendMailToNotifyBeneficiaryRegardingNewAmendment(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity) {
|
||||||
|
|
||||||
private String determineService(Long hubId) {
|
ApplicationEntity applicationEntity = applicationService.validateApplication(applicationAmendmentRequestEntity.getApplicationId());
|
||||||
|
|
||||||
HubEntity hub = hubRepository.findById(hubId).orElseThrow(() -> new IllegalArgumentException("Invalid Hub ID: " + hubId));
|
|
||||||
return hub.getEmailServiceType().equalsIgnoreCase("MAILGUN_SERVICE") ? "Gepafin S.p.a." : "Sviluppumbria";
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sendMailToNotifyBeneficiaryRegardingNewAmendment(ApplicationAmendmentRequestEntity applicationAmendmentRequest) {
|
|
||||||
|
|
||||||
ApplicationEntity applicationEntity = applicationService.validateApplication(applicationAmendmentRequest.getApplicationId());
|
|
||||||
Map<String, String> bodyPlaceholders = new HashMap<>();
|
Map<String, String> bodyPlaceholders = new HashMap<>();
|
||||||
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
|
bodyPlaceholders.put("{{call_name}}", applicationEntity.getCall().getName());
|
||||||
bodyPlaceholders.put("{{protocol_number}}", applicationAmendmentRequest.getProtocol().getProtocolNumber().toString());
|
bodyPlaceholders.put("{{protocol_number}}", applicationAmendmentRequestEntity.getProtocol().getProtocolNumber().toString());
|
||||||
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatLocalDateTime(applicationAmendmentRequest.getProtocol().getCreatedDate(), GepafinConstant.DD_MM_YYYY));
|
bodyPlaceholders.put("{{protocol_date}}", DateTimeUtil.formatLocalDateTime(applicationAmendmentRequestEntity.getProtocol().getCreatedDate(), GepafinConstant.DD_MM_YYYY));
|
||||||
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationAmendmentRequest.getProtocol().getTime(), GepafinConstant.HH_MM_SS));
|
bodyPlaceholders.put("{{protocol_time}}", DateTimeUtil.parseLocalTimeToString(applicationAmendmentRequestEntity.getProtocol().getTime(), GepafinConstant.HH_MM_SS));
|
||||||
String formFieldsJson = applicationAmendmentRequest.getFormFields();
|
bodyPlaceholders.put("{{response_days}}", applicationAmendmentRequestEntity.getResponseDays().toString());
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
List<Map<String, Object>> formFields = objectMapper.readValue(formFieldsJson, new TypeReference<List<Map<String, Object>>>() {
|
// Retrieve forms and initialize required collections
|
||||||
});
|
List<ApplicationFormEntity> forms = applicationFormRepository.findByApplicationId(applicationEntity.getId());
|
||||||
//•
|
List<AmendmentFormFieldResponse> allFormFields = new ArrayList<>();
|
||||||
StringBuilder bulletPoints = new StringBuilder();
|
StringBuilder bulletPoints = new StringBuilder();
|
||||||
for (Map<String, Object> field : formFields) {
|
|
||||||
String label = (String) field.get("label");
|
// Extract data from forms
|
||||||
boolean selected = (boolean) field.get("selected");
|
for (ApplicationFormEntity form : forms) {
|
||||||
if (!selected) {
|
String content = form.getForm().getContent();
|
||||||
bulletPoints.append("• ").append(label).append("\n");
|
List<Map<String, Object>> result = filterByName(content, "fileupload");
|
||||||
}
|
allFormFields.addAll(getIdAndLabelFromResult(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Process allFormFields and generate bullet points
|
||||||
|
for (AmendmentFormFieldResponse field : allFormFields) {
|
||||||
|
// Build bullet points
|
||||||
|
// bulletPoints.append(field.getLabel());
|
||||||
|
bulletPoints.append("<li>").append(field.getLabel()).append("</li>");
|
||||||
|
|
||||||
|
}
|
||||||
|
// Add the generated bullet points to placeholders
|
||||||
bodyPlaceholders.put("{{form_dataInput}}", bulletPoints.toString());
|
bodyPlaceholders.put("{{form_dataInput}}", bulletPoints.toString());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Failed to parse form fields JSON: ", e);
|
log.error("Failed to process form fields: ", e);
|
||||||
}
|
}
|
||||||
bodyPlaceholders.put("{{note}}", applicationAmendmentRequest.getNote());
|
|
||||||
sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null,applicationAmendmentRequest.getId());
|
|
||||||
|
bodyPlaceholders.put("{{note}}", applicationAmendmentRequestEntity.getNote());
|
||||||
|
sendEmail(applicationEntity, SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum.DOCUMENTATION_INTEGRATION_REQUEST, bodyPlaceholders, null,
|
||||||
|
applicationAmendmentRequestEntity.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AmendmentFormFieldResponse> getIdAndLabelFromResult(List<Map<String, Object>> result) {
|
||||||
|
List<AmendmentFormFieldResponse> formFieldResponses = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Map<String, Object> item : result) {
|
||||||
|
AmendmentFormFieldResponse formFieldResponse = new AmendmentFormFieldResponse();
|
||||||
|
formFieldResponse.setFieldId((String) item.get("id"));
|
||||||
|
|
||||||
|
// Extract "label" value from the "settings" array
|
||||||
|
List<Map<String, Object>> settings = (List<Map<String, Object>>) item.get("settings");
|
||||||
|
String label = settings.stream()
|
||||||
|
.filter(setting -> "label".equals(setting.get("name")))
|
||||||
|
.map(setting -> (String) setting.get("value"))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(""); // Default to empty string if not found
|
||||||
|
|
||||||
|
if (label == null || label.trim().isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
formFieldResponse.setLabel(label); // Set the label as fieldValue
|
||||||
|
formFieldResponses.add(formFieldResponse);
|
||||||
|
}
|
||||||
|
|
||||||
|
return formFieldResponses;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendApplicationFailureNotificationEmail(ApplicationAmendmentRequestEntity amendmentRequest) {
|
public void sendApplicationFailureNotificationEmail(ApplicationAmendmentRequestEntity amendmentRequest) {
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ public enum RecipientTypeEnum {
|
|||||||
BENEFICIARY ("BENEFICIARY"),
|
BENEFICIARY ("BENEFICIARY"),
|
||||||
USER("USER"),
|
USER("USER"),
|
||||||
COMPANY("COMPANY"),
|
COMPANY("COMPANY"),
|
||||||
PROPERTIES("PROPERTIES");
|
PROPERTIES("PROPERTIES"),
|
||||||
|
INSTRUCTOR("INSTRUCTOR");
|
||||||
|
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
|
|||||||
@@ -203,8 +203,6 @@ public class AuthenticationService {
|
|||||||
public void logout(HttpServletRequest request, HttpServletResponse response) {
|
public void logout(HttpServletRequest request, HttpServletResponse response) {
|
||||||
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
|
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
|
||||||
if (auth != null) {
|
if (auth != null) {
|
||||||
String token = tokenProvider.extractTokenFromRequest(request);
|
|
||||||
tokenProvider.invalidateToken(token);
|
|
||||||
new SecurityContextLogoutHandler().logout(request, response, auth);
|
new SecurityContextLogoutHandler().logout(request, response, auth);
|
||||||
}
|
}
|
||||||
SecurityContextHolder.getContext().setAuthentication(null);
|
SecurityContextHolder.getContext().setAuthentication(null);
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ aws.s3.url = https://mementoresources.s3.eu-west-1.amazonaws.com/
|
|||||||
#aws.s3.url.folder.signed.document=gepafin/signed-document
|
#aws.s3.url.folder.signed.document=gepafin/signed-document
|
||||||
# JWT configuration
|
# JWT configuration
|
||||||
# Ensure these values match your expectations
|
# Ensure these values match your expectations
|
||||||
security.authentication.jwt.secret=my-secret-token-to-change-in-prod-environment-your-super-secure-randomly-generated-key
|
security.authentication.jwt.secret=Z3/zjSD96Hdvh/AMyaMLJLWSVF00AOmxxEk4Kv8E+bM3bUW/QXOu45OSgRD6H16RvQ/pWZznDQP3l2ZkPlu9Sg==
|
||||||
security.authentication.jwt.token-validity-in-seconds=86400
|
security.authentication.jwt.token-validity-in-seconds=7200
|
||||||
|
|
||||||
# Default system base URLs
|
# Default system base URLs
|
||||||
base-url=https://api-dev-gepafin.memento.credit
|
base-url=https://api-dev-gepafin.memento.credit
|
||||||
|
|||||||
@@ -1968,4 +1968,15 @@
|
|||||||
</column>
|
</column>
|
||||||
</addColumn>
|
</addColumn>
|
||||||
</changeSet>
|
</changeSet>
|
||||||
|
<changeSet id="03-12-2024_1" author="Piyush">
|
||||||
|
<sqlFile dbms="postgresql"
|
||||||
|
path="db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_03_12_2024_1.sql"/>
|
||||||
|
</changeSet>
|
||||||
|
|
||||||
|
<changeSet id="04-12-2024_1" author="Nisha Kashyap">
|
||||||
|
<sqlFile dbms="postgresql"
|
||||||
|
path="db/dump/update_system_email_template_for_updating_amendment_mail_notification_mail_04_12_2024_1.sql"/>
|
||||||
|
</changeSet>
|
||||||
|
|
||||||
|
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
UPDATE gepafin_schema.system_email_template
|
||||||
|
SET html_content = '<html>
|
||||||
|
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
|
||||||
|
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
|
||||||
|
<p><strong>RICHIESTA INTEGRAZIONE DOCUMENTALE</strong></p>
|
||||||
|
<p>Buongiorno,</p>
|
||||||
|
<p>In riferimento alla domanda di concessione di Finanziamento agevolato a valere sul Fondo prestiti
|
||||||
|
<strong>{{call_name}}</strong> di cui al <strong>Protocollo n. {{protocol_number}} del
|
||||||
|
{{protocol_date}} e {{protocol_time}}</strong>, alla luce dell''attività istruttoria svolta,
|
||||||
|
segnaliamo quanto segue:</p>
|
||||||
|
<ul>
|
||||||
|
<li>{{form_dataInput}}</li>
|
||||||
|
</ul>
|
||||||
|
<p>{{note}}</p>
|
||||||
|
<p>Vi invitiamo a fornire quanto sopra richiesto integrando la documentazione sia caricandola all''interno dello sportello
|
||||||
|
online <a href="{{platform_link}}">{{platform_link}}</a> che inviandola a mezzo PEC all''indirizzo
|
||||||
|
{{legal_mail}} entro e <strong>non oltre 10 giorni</strong> dal ricevimento della presente comunicazione,
|
||||||
|
precisando che, in caso di mancata ricezione nei termini indicati, saremo costretti a non prendere in considerazione la Vostra richiesta di finanziamento.</p>
|
||||||
|
<p>Vi informiamo che per la ricezione della PEC farà fede la ricevuta di avvenuta consegna che attesterà il buon esito
|
||||||
|
dell''invio. La documentazione trasmessa e le informazioni fornite saranno processate dall''istruttore assegnatario della pratica.</p>
|
||||||
|
<p>Distinti Saluti,</p>
|
||||||
|
<p><strong>{{email_signature}}</strong></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>'
|
||||||
|
WHERE "type" = 'DOCUMENTATION_INTEGRATION_REQUEST' AND "system" = true;
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
UPDATE gepafin_schema.system_email_template
|
||||||
|
SET html_content = '<html>
|
||||||
|
<body style="font-family: Arial, sans-serif; color: #000; line-height: 1.6;">
|
||||||
|
<div style="padding: 20px; border: 1px solid #ddd; border-radius: 8px; max-width: 600px; margin: auto;">
|
||||||
|
<p><strong>RICHIESTA INTEGRAZIONE DOCUMENTALE</strong></p>
|
||||||
|
<p>Buongiorno,</p>
|
||||||
|
<p>In riferimento alla domanda di concessione di Finanziamento agevolato a valere sul Fondo prestiti
|
||||||
|
<strong>{{call_name}}</strong> di cui al <strong>Protocollo n. {{protocol_number}} del
|
||||||
|
{{protocol_date}} e {{protocol_time}}</strong>, alla luce dell''attività istruttoria svolta,
|
||||||
|
segnaliamo quanto segue:</p>
|
||||||
|
<ul>
|
||||||
|
<li>{{form_dataInput}}</li>
|
||||||
|
</ul>
|
||||||
|
<p>{{note}}</p>
|
||||||
|
<p>Vi invitiamo a fornire quanto sopra richiesto integrando la documentazione sia caricandola all''interno dello sportello
|
||||||
|
online <a href="{{platform_link}}">{{platform_link}}</a> che inviandola a mezzo PEC all''indirizzo
|
||||||
|
bandi.gepafin@legalmail.it entro e <strong>non oltre {{response_days}} giorni</strong> dal ricevimento della presente comunicazione,
|
||||||
|
precisando che, in caso di mancata ricezione nei termini indicati, saremo costretti a non prendere in considerazione la Vostra richiesta di finanziamento.</p>
|
||||||
|
<p>Vi informiamo che per la ricezione della PEC farà fede la ricevuta di avvenuta consegna che attesterà il buon esito
|
||||||
|
dell''invio. La documentazione trasmessa e le informazioni fornite saranno processate dall''istruttore assegnatario della pratica.</p>
|
||||||
|
<p>Distinti Saluti,</p>
|
||||||
|
<p><strong>{{email_signature}}</strong></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>'
|
||||||
|
WHERE "type" = 'DOCUMENTATION_INTEGRATION_REQUEST' AND "system" = true;
|
||||||
Reference in New Issue
Block a user