Skip to content

Commit

Permalink
[SELC-5310] feat: Added logic to detect availability of external emai…
Browse files Browse the repository at this point in the history
…l service
  • Loading branch information
pierpaolodidato89 authored Jul 19, 2024
1 parent 24a0524 commit 28454cc
Show file tree
Hide file tree
Showing 8 changed files with 77 additions and 55 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package it.pagopa.selfcare.onboarding.service;

import com.microsoft.applicationinsights.TelemetryClient;
import com.microsoft.applicationinsights.TelemetryConfiguration;
import com.microsoft.azure.functions.ExecutionContext;
import it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType;
import it.pagopa.selfcare.onboarding.common.InstitutionType;
Expand All @@ -19,6 +21,7 @@
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.WebApplicationException;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.Response;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.microprofile.config.inject.ConfigProperty;
Expand All @@ -33,14 +36,12 @@

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;

import static it.pagopa.selfcare.onboarding.common.PartyRole.MANAGER;
import static it.pagopa.selfcare.onboarding.common.WorkflowType.CONFIRMATION_AGGREGATE;
import static it.pagopa.selfcare.onboarding.service.NotificationEventServiceDefault.*;
import static it.pagopa.selfcare.onboarding.service.OnboardingService.USERS_FIELD_LIST;
import static jakarta.ws.rs.core.Response.Status.Family.SUCCESSFUL;

Expand Down Expand Up @@ -69,34 +70,49 @@ public class CompletionServiceDefault implements CompletionService {
@Inject
org.openapi.quarkus.party_registry_proxy_json.api.InstitutionApi institutionRegistryProxyApi;

@Inject
InstitutionMapper institutionMapper;

@Inject
OnboardingRepository onboardingRepository;

@Inject
TokenRepository tokenRepository;

@Inject
UserMapper userMapper;

@Inject
ProductMapper productMapper;

@Inject
NotificationService notificationService;
@Inject
ProductService productService;

@Inject
OnboardingMapper onboardingMapper;

@ConfigProperty(name = "onboarding-functions.persist-users.send-mail")
private boolean hasToSendEmail;

@ConfigProperty(name = "onboarding-functions.force-institution-persist")
private boolean forceInstitutionCreation;
private static final String EVENT_SEND_COMPLETION_FN_FAILURE = "EventsSendCompletionEmail_failures";

private final InstitutionMapper institutionMapper;
private final OnboardingRepository onboardingRepository;
private final TokenRepository tokenRepository;
private final UserMapper userMapper;
private final ProductMapper productMapper;
private final NotificationService notificationService;
private final ProductService productService;
private final OnboardingMapper onboardingMapper;
private final TelemetryClient telemetryClient;
private final boolean hasToSendEmail;
private final boolean isEmailServiceAvailable;
private final boolean forceInstitutionCreation;

public CompletionServiceDefault(ProductService productService,
NotificationService notificationService,
OnboardingMapper onboardingMapper,
UserMapper userMapper,
ProductMapper productMapper,
InstitutionMapper institutionMapper,
OnboardingRepository onboardingRepository,
TokenRepository tokenRepository,
@ConfigProperty(name = "onboarding-functions.email.service.available") boolean isEmailServiceAvailable,
@ConfigProperty(name = "onboarding-functions.persist-users.send-mail") boolean hasToSendEmail,
@ConfigProperty(name = "onboarding-functions.force-institution-persist")boolean forceInstitutionCreation,
@Context @ConfigProperty(name = "onboarding-functions.appinsights.connection-string") String appInsightsConnectionString) {
this.institutionMapper = institutionMapper;
this.onboardingRepository = onboardingRepository;
this.tokenRepository = tokenRepository;
TelemetryConfiguration telemetryConfiguration = TelemetryConfiguration.createDefault();
telemetryConfiguration.setConnectionString(appInsightsConnectionString);
this.productService = productService;
this.notificationService = notificationService;
this.onboardingMapper = onboardingMapper;
this.userMapper = userMapper;
this.productMapper = productMapper;
this.isEmailServiceAvailable = isEmailServiceAvailable;
this.hasToSendEmail = hasToSendEmail;
this.forceInstitutionCreation = forceInstitutionCreation;
this.telemetryClient = new TelemetryClient(telemetryConfiguration);
this.telemetryClient.getContext().getOperation().setName(OPERATION_NAME);
}

@Override
public String createInstitutionAndPersistInstitutionId(Onboarding onboarding) {
Expand Down Expand Up @@ -139,7 +155,7 @@ private InstitutionsResponse getInstitutions(Institution institution) {
/**
* Function that creates institution based on institution type and Origin,
* Origin indicates which is the indexes where data come from, for ex. IPA comes from index of Pubbliche Amministrazioni
* Look at https://pagopa.atlassian.net/wiki/spaces/SCP/pages/708804909/Glossario for more information about institution type and indexes
* Look at <a href="https://pagopa.atlassian.net/wiki/spaces/SCP/pages/708804909/Glossario">...</a> for more information about institution type and indexes
*/
private InstitutionResponse createInstitution(Institution institution) {

Expand Down Expand Up @@ -218,9 +234,13 @@ public void sendCompletedEmail(OnboardingWorkflow onboardingWorkflow) {

Product product = productService.getProductIsValid(onboarding.getProductId());

notificationService.sendCompletedEmail(onboarding.getInstitution().getDescription(),
destinationMails, product, onboarding.getInstitution().getInstitutionType(),
onboardingWorkflow);
if (isEmailServiceAvailable) {
notificationService.sendCompletedEmail(onboarding.getInstitution().getDescription(),
destinationMails, product, onboarding.getInstitution().getInstitutionType(),
onboardingWorkflow);
} else {
telemetryClient.trackEvent(EVENT_ONBOARDING_FN_NAME, onboardingEventMap(onboarding), Map.of(EVENT_SEND_COMPLETION_FN_FAILURE, 1D));
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public class NotificationEventServiceDefault implements NotificationEventService
public static final String EVENT_ONBOARDING_FN_NAME = "ONBOARDING-FN";
public static final String EVENT_ONBOARDING_INSTTITUTION_FN_FAILURE = "EventsOnboardingInstitution_failures";
public static final String EVENT_ONBOARDING_INSTTITUTION_FN_SUCCESS = "EventsOnboardingInstitution_success";
private static final String OPERATION_NAME = "ONBOARDING-FN";
public static final String OPERATION_NAME = "ONBOARDING-FN";
private final TelemetryClient telemetryClient;
@RestClient
@Inject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ onboarding-functions.purge.all-to = 120
#property to invoke or not the user microservice
onboarding-functions.persist-users.send-mail = ${USER_MS_SEND_MAIL:true}
onboarding-functions.appinsights.connection-string=${APPLICATIONINSIGHTS_CONNECTION_STRING:InstrumentationKey=00000000-0000-0000-0000-000000000000}

#property to define the availability of external email service
onboarding-functions.email.service.available = ${EMAIL_SERVICE_AVAILABLE:true}
#property to force the institution creation when a new onboarding to pnpg is performed only in pnpg environment
onboarding-functions.force-institution-persist= ${FORCE_INSTITUTION_PERSIST:false}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ app_settings = {
"SAP_ALLOWED_INSTITUTION_TYPE" = "PA,GSP,SA,AS,SCP"
"SAP_ALLOWED_ORIGINS" = "IPA,SELC"
"MINUTES_THRESHOLD_FOR_UPDATE_NOTIFICATION" = "5"
"EMAIL_SERVICE_AVAILABLE" = "FALSE"
"JWT_TOKEN_ISSUER" = "SPID"
"JWT_TOKEN_PRIVATE_KEY" = "@Microsoft.KeyVault(SecretUri=https://selc-d-pnpg-kv.vault.azure.net/secrets/jwt-private-key/)"
"JWT_TOKEN_KID" = "@Microsoft.KeyVault(SecretUri=https://selc-d-pnpg-kv.vault.azure.net/secrets/jwt-kid/)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ app_settings = {
"FD_TOKEN_GRANT_TYPE" = "@Microsoft.KeyVault(SecretUri=https://selc-d-kv.vault.azure.net/secrets/prod-fd-grant-type/)"
"FD_TOKEN_CLIENT_ID" = "@Microsoft.KeyVault(SecretUri=https://selc-d-kv.vault.azure.net/secrets/prod-fd-client-id/)"
"FD_TOKEN_CLIENT_SECRET" = "@Microsoft.KeyVault(SecretUri=https://selc-d-kv.vault.azure.net/secrets/prod-fd-client-secret/)"
"EMAIL_SERVICE_AVAILABLE" = "true"
"JWT_TOKEN_ISSUER" = "SPID"
"JWT_TOKEN_PRIVATE_KEY" = "@Microsoft.KeyVault(SecretUri=https://selc-d-kv.vault.azure.net/secrets/jwt-private-key/)"
"JWT_TOKEN_KID" = "@Microsoft.KeyVault(SecretUri=https://selc-d-kv.vault.azure.net/secrets/jwt-kid/)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,8 @@ app_settings = {
"MAIL_ONBOARDING_URL" = "https://imprese.notifichedigitali.it/onboarding/",
"USER_MS_SEND_MAIL" = "false",
"FORCE_INSTITUTION_PERSIST" = "true",
"EMAIL_SERVICE_AVAILABLE" = "true"
"JWT_TOKEN_ISSUER" = "SPID"
"JWT_TOKEN_PRIVATE_KEY" = "@Microsoft.KeyVault(SecretUri=https://selc-p-pnpg-kv.vault.azure.net/secrets/jwt-private-key/)"
"JWT_TOKEN_KID" = "@Microsoft.KeyVault(SecretUri=https://selc-p-pnpg-kv.vault.azure.net/secrets/jwt-kid/)"


}
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,8 @@ app_settings = {
"ARUBA_SIGN_SERVICE_BASE_URL" = "https://asbr-pagopa.arubapec.it/ArubaSignService/ArubaSignService"
"ARUBA_SIGN_SERVICE_REQUEST_TIMEOUT_MS" = "60000"
"ARUBA_SIGN_SERVICE_CONNECT_TIMEOUT_MS" = "60000"
"EMAIL_SERVICE_AVAILABLE" = "true"
"JWT_TOKEN_ISSUER" = "SPID"
"JWT_TOKEN_PRIVATE_KEY" = "@Microsoft.KeyVault(SecretUri=https://selc-p-kv.vault.azure.net/secrets/jwt-private-key/)"
"JWT_TOKEN_KID" = "@Microsoft.KeyVault(SecretUri=https://selc-p-kv.vault.azure.net/secrets/jwt-kid/)"

}
28 changes: 14 additions & 14 deletions infra/functions/onboarding-functions/env/uat/terraform.tfvars
Original file line number Diff line number Diff line change
Expand Up @@ -100,18 +100,18 @@ app_settings = {


##ARUBA SIGNATURE
"PAGOPA_SIGNATURE_SOURCE" = "disabled",
"ARUBA_SIGN_SERVICE_IDENTITY_TYPE_OTP_AUTH" = "faPagoPa",
"ARUBA_SIGN_SERVICE_IDENTITY_OTP_PWD" = "dsign",
"ARUBA_SIGN_SERVICE_IDENTITY_USER" = "@Microsoft.KeyVault(SecretUri=https://selc-u-kv.vault.azure.net/secrets/aruba-sign-service-user/)",
"ARUBA_SIGN_SERVICE_IDENTITY_DELEGATED_USER" = "@Microsoft.KeyVault(SecretUri=https://selc-u-kv.vault.azure.net/secrets/aruba-sign-service-delegated-user/)",
"ARUBA_SIGN_SERVICE_IDENTITY_DELEGATED_PASSWORD" = "@Microsoft.KeyVault(SecretUri=https://selc-u-kv.vault.azure.net/secrets/aruba-sign-service-delegated-psw/)",
"ARUBA_SIGN_SERVICE_IDENTITY_DELEGATED_DOMAIN" = "faPagoPa",
"ARUBA_SIGN_SERVICE_BASE_URL" = "https://asbr-pagopa.arubapec.it/ArubaSignService/ArubaSignService"
"ARUBA_SIGN_SERVICE_REQUEST_TIMEOUT_MS" = "60000"
"ARUBA_SIGN_SERVICE_CONNECT_TIMEOUT_MS" = "60000"
"JWT_TOKEN_ISSUER" = "SPID"
"JWT_TOKEN_PRIVATE_KEY" = "@Microsoft.KeyVault(SecretUri=https://selc-u-kv.vault.azure.net/secrets/jwt-private-key/)"
"JWT_TOKEN_KID" = "@Microsoft.KeyVault(SecretUri=https://selc-u-kv.vault.azure.net/secrets/jwt-kid/)"

"PAGOPA_SIGNATURE_SOURCE" = "disabled",
"ARUBA_SIGN_SERVICE_IDENTITY_TYPE_OTP_AUTH" = "faPagoPa",
"ARUBA_SIGN_SERVICE_IDENTITY_OTP_PWD" = "dsign",
"ARUBA_SIGN_SERVICE_IDENTITY_USER" = "@Microsoft.KeyVault(SecretUri=https://selc-u-kv.vault.azure.net/secrets/aruba-sign-service-user/)",
"ARUBA_SIGN_SERVICE_IDENTITY_DELEGATED_USER" = "@Microsoft.KeyVault(SecretUri=https://selc-u-kv.vault.azure.net/secrets/aruba-sign-service-delegated-user/)",
"ARUBA_SIGN_SERVICE_IDENTITY_DELEGATED_PASSWORD" = "@Microsoft.KeyVault(SecretUri=https://selc-u-kv.vault.azure.net/secrets/aruba-sign-service-delegated-psw/)",
"ARUBA_SIGN_SERVICE_IDENTITY_DELEGATED_DOMAIN" = "faPagoPa",
"ARUBA_SIGN_SERVICE_BASE_URL" = "https://asbr-pagopa.arubapec.it/ArubaSignService/ArubaSignService"
"ARUBA_SIGN_SERVICE_REQUEST_TIMEOUT_MS" = "60000"
"ARUBA_SIGN_SERVICE_CONNECT_TIMEOUT_MS" = "60000",
"EMAIL_SERVICE_AVAILABLE" = "true",
"JWT_TOKEN_ISSUER" = "SPID"
"JWT_TOKEN_PRIVATE_KEY" = "@Microsoft.KeyVault(SecretUri=https://selc-u-kv.vault.azure.net/secrets/jwt-private-key/)"
"JWT_TOKEN_KID" = "@Microsoft.KeyVault(SecretUri=https://selc-u-kv.vault.azure.net/secrets/jwt-kid/)"
}

0 comments on commit 28454cc

Please sign in to comment.