diff --git a/src/main/java/eu/dnetlib/repo/manager/service/EmailUtils.java b/src/main/java/eu/dnetlib/repo/manager/service/EmailUtils.java index 43b4ca3..accec82 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/EmailUtils.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/EmailUtils.java @@ -24,6 +24,10 @@ public interface EmailUtils { void sendUserRegistrationEmail(Repository repository, Authentication authentication) throws Exception; + void sendAdminRegisterInterfaceEmail(Repository repository, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception; + + void sendUserRegisterInterfaceEmail(Repository repository, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception; + /****SUCCESSFUL REGISTRATION RESULTS EMAILS****/ void sendUserRegistrationResultsSuccessEmail(String issuerEmail, String jobId,RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception; @@ -53,9 +57,13 @@ public interface EmailUtils { void sendAdminGeneralFailure(String issuer,String jobId,RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception; - void sendAdminUpdateRepositoryEmail(Repository repository, Authentication authentication) throws Exception; + void sendAdminUpdateRepositoryInfoEmail(Repository repository, Authentication authentication) throws Exception; - void sendUserUpdateRepositoryEmail(Repository repository, Authentication authentication) throws Exception; + void sendUserUpdateRepositoryInfoEmail(Repository repository, Authentication authentication) throws Exception; + + void sendAdminUpdateInterfaceEmail(Repository repository, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception; + + void sendUserUpdateInterfaceEmail(Repository repository, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception; void sendSubmitJobForValidationEmail(Authentication authentication, JobForValidation jobForValidation) throws Exception; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/EmailUtilsImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/EmailUtilsImpl.java index 951f142..0355d7f 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/EmailUtilsImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/EmailUtilsImpl.java @@ -8,6 +8,7 @@ import eu.dnetlib.repo.manager.config.CascadingPropertyLoader; import eu.dnetlib.repo.manager.domain.ValidationServiceException; import eu.dnetlib.utils.MailLibrary; import org.apache.log4j.Logger; +import org.mitre.openid.connect.model.OIDCAuthenticationToken; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; @@ -205,15 +206,15 @@ public class EmailUtilsImpl implements EmailUtils { @Override public void sendAdminRegistrationEmail(Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider registration request started for " + + String subject = "OpenAIRE content provider registration for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; String message = "Dear administrator" + ",\n" + "\n" + "We received a request to register the " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]" + " to the OpenAIRE compliant list of content providers. " + - "A validation process against the OpenAIRE guidelines compatibility " + - "has been started. You will be informed in another message once the process is finished." + + "\n\n" + + "User Contact: " + authentication.getName() + " (" + ((OIDCAuthenticationToken) authentication).getUserInfo().getEmail() + ")" + "\n\n" + "Please do not reply to this message\n" + "This message has been generated automatically.\n\n" + @@ -231,7 +232,7 @@ public class EmailUtilsImpl implements EmailUtils { @Override public void sendUserRegistrationEmail(Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider registration request started for " + + String subject = "OpenAIRE content provider registration for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; // String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" + @@ -239,8 +240,6 @@ public class EmailUtilsImpl implements EmailUtils { "\n" + "We received a request to register the " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]" + " to the OpenAIRE compliant list of content providers. " + - "A validation process against the OpenAIRE guidelines compatibility " + - "has been started. You will be informed in another message once the process is finished." + "\n\n" + "Please do not reply to this message\n" + "This message has been generated automatically.\n\n" + @@ -256,10 +255,71 @@ public class EmailUtilsImpl implements EmailUtils { } } + @Override + public void sendAdminRegisterInterfaceEmail(Repository repository, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception { + try { + String subject = "OpenAIRE new interface registration request started for " + + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; + + String message = "Dear administrator" + ",\n" + + "\n" + + "We received a request to add the following interface: \n\n" + + "Base URL: " + repositoryInterface.getBaseUrl() + "\n" + + "Set: " + repositoryInterface.getAccessSet() + "\n" + + "Guidelines: " + repositoryInterface.getDesiredCompatibilityLevel() + "\n\n" + + "to " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n" + + "A validation process for this interface against the OpenAIRE guidelines compatibility " + + "has been started. You will be informed in another message once the process is finished." + + "\n\n" + + "User Contact: " + authentication.getName() + " (" + ((OIDCAuthenticationToken) authentication).getUserInfo().getEmail() + ")" + + "\n\n" + + "Please do not reply to this message\n" + + "This message has been generated automatically.\n\n" + + "Regards,\n" + + "the OpenAIRE technical team\n"; + + this.sendMail(this.provideAdminEmail, subject, message, false, null); + + } catch (Exception e) { + LOGGER.error("Error while sending registration of interface notification email to the administrator", e); + throw e; + } + } + + @Override + public void sendUserRegisterInterfaceEmail(Repository repository, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception { + try { + String subject = "OpenAIRE new interface registration request started for " + + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; + +// String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" + + String message = "Dear "+SecurityContextHolder.getContext().getAuthentication().getName()+",\n" + + "\n" + + "We received a request to add the following interface: \n\n" + + "Base URL: " + repositoryInterface.getBaseUrl() + "\n" + + "Set: " + repositoryInterface.getAccessSet() + "\n" + + "Guidelines: " + repositoryInterface.getDesiredCompatibilityLevel() + "\n\n" + + "to " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n" + + "A validation process for this interface against the OpenAIRE guidelines compatibility " + + "has been started. You will be informed in another message once the process is finished." + + "\n\n" + + "Please do not reply to this message\n" + + "This message has been generated automatically.\n\n" + + "Regards,\n" + + "the OpenAIRE technical team\n"; + + this.sendMail(repository.getRegisteredBy(), subject, message, false, null); + + } catch (Exception e) { + LOGGER.error("Error while sending registration of interface notification email to user: " + repository.getRegisteredBy(), e); + throw e; + } + } + @Override public void sendUserRegistrationResultsSuccessEmail(String issuerEmail, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider registration request - results (success) for " + + String subject = "OpenAIRE new interface registration request - results (success) for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; // String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" + @@ -292,7 +352,7 @@ public class EmailUtilsImpl implements EmailUtils { @Override public void sendAdminRegistrationResultsSuccessEmail(String issuerEmail, String jobId,RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider registration request - results (success) for " + + String subject = "OpenAIRE new interface registration request - results (success) for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; String message = "Dear admin ,\n" + @@ -325,7 +385,7 @@ public class EmailUtilsImpl implements EmailUtils { @Override public void sendUserRegistrationResultsFailureEmail(String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider registration request - results (failure) for " + + String subject = "OpenAIRE new interface registration request - results (failure) for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; // String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" + String message = "Dear user,\n" + @@ -357,7 +417,7 @@ public class EmailUtilsImpl implements EmailUtils { @Override public void sendAdminRegistrationResultsFailureEmail(String issuerEmail, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider registration request - results (failure) for " + + String subject = "OpenAIRE new interface registration request - results (failure) for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; String message = "Dear admin,\n" + @@ -390,7 +450,7 @@ public class EmailUtilsImpl implements EmailUtils { @Override public void sendUserUpdateResultsSuccessEmail(String issuer, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider registration request - results (success) for " + + String subject = "OpenAIRE interface update request - results (success) for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; // String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" + @@ -421,7 +481,7 @@ public class EmailUtilsImpl implements EmailUtils { @Override public void sendAdminUpdateResultsSuccessEmail(String issuerEmail, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider registration request - results (success) for " + + String subject = "OpenAIRE interface update request - results (success) for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; String message = "Dear admin,\n" + @@ -452,7 +512,7 @@ public class EmailUtilsImpl implements EmailUtils { @Override public void sendUserUpdateResultsFailureEmail(String issuer, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider update request - results (failure) for " + + String subject = "OpenAIRE interface update request - results (failure) for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; // String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" + @@ -485,7 +545,7 @@ public class EmailUtilsImpl implements EmailUtils { @Override public void sendAdminUpdateResultsFailureEmail(String issuerEmail, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider update request - results (failure) for " + + String subject = "OpenAIRE interface update request - results (failure) for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; String message = "Dear admin,\n" + @@ -545,7 +605,7 @@ public class EmailUtilsImpl implements EmailUtils { String message = "Dear admin,\n" + "\n" + - "the validation request you have submitted has finished. You can retrieve the results by following this url: "+ valBaseUrl+"" + jobId+" .\n\n" + + "a validation request has finished. You can retrieve the results by following this url: "+ valBaseUrl+"" + jobId+" .\n\n" + "\n\nUser Contact:"+ issuer +""+ "Please do not reply to this message.\n" + "This message has been generated automatically.\n" + @@ -582,15 +642,14 @@ public class EmailUtilsImpl implements EmailUtils { } @Override - public void sendAdminUpdateRepositoryEmail(Repository repository, Authentication authentication) throws Exception { + public void sendAdminUpdateRepositoryInfoEmail(Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider update request started for " + + String subject = "OpenAIRE content provider update information for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; String message = "Dear administrator" + ",\n" + "\n" + - "We received a request to update the " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]." + - "A new iteration process of the validation against the OpenAIRE guidelines compatibility has been started.\n\n" + + "We received a request to update the basic information for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n\n" + "Please do not reply to this message\n" + "This message has been generated automatically.\n\n" + "Regards,\n" + @@ -605,15 +664,72 @@ public class EmailUtilsImpl implements EmailUtils { } @Override - public void sendUserUpdateRepositoryEmail(Repository repository, Authentication authentication) throws Exception { + public void sendUserUpdateRepositoryInfoEmail(Repository repository, Authentication authentication) throws Exception { try { - String subject = "OpenAIRE content provider update request started for " + + String subject = "OpenAIRE content provider update information for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; // String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" + String message = "Dear user,\n" + "\n" + - "We received a request to update the " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]." + + "We received a request to update the basic information for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n\n" + + "Please do not reply to this message\n" + + "This message has been generated automatically.\n\n" + + "If you have any questions, write to 'helpdesk@openaire.eu'. \n\n" + + "Regards,\n" + + "the OpenAIRE technical team\n"; + + this.sendMail(repository.getRegisteredBy(), subject, message, false, null); + + } catch (Exception e) { + LOGGER.error("Error while sending registration notification email to user: " + repository.getRegisteredBy(), e); + throw e; + } + } + + @Override + public void sendAdminUpdateInterfaceEmail(Repository repository, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception { + try { + String subject = "OpenAIRE interface update request started for " + + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; + + String message = "Dear administrator" + ",\n" + + "\n" + + "We received a request to update the following interface: \n\n" + + "Base URL: " + repositoryInterface.getBaseUrl() + "\n" + + "Set: " + repositoryInterface.getAccessSet() + "\n" + + "Guidelines: " + repositoryInterface.getDesiredCompatibilityLevel() + "\n\n" + + "for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n" + + "A new iteration process of the validation against the OpenAIRE guidelines compatibility has been started.\n\n" + + "User Contact: " + authentication.getName() + " (" + ((OIDCAuthenticationToken) authentication).getUserInfo().getEmail() + ")" + + "\n\n" + + "Please do not reply to this message\n" + + "This message has been generated automatically.\n\n" + + "Regards,\n" + + "the OpenAIRE technical team\n"; + + this.sendMail(this.provideAdminEmail, subject, message, false, null); + + } catch (Exception e) { + LOGGER.error("Error while sending registration notification email to the administrator", e); + throw e; + } + } + + @Override + public void sendUserUpdateInterfaceEmail(Repository repository, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception { + try { + String subject = "OpenAIRE interface update request started for " + + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]"; + + // String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" + + String message = "Dear user,\n" + + "\n" + + "We received a request to update the following interface: \n\n" + + "Base URL: " + repositoryInterface.getBaseUrl() + "\n" + + "Set: " + repositoryInterface.getAccessSet() + "\n" + + "Guidelines: " + repositoryInterface.getDesiredCompatibilityLevel() + "\n\n" + + "for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n" + "A new iteration process of the validation against the OpenAIRE guidelines compatibility has been started.\n\n" + "Please do not reply to this message\n" + "This message has been generated automatically.\n\n" + diff --git a/src/main/java/eu/dnetlib/repo/manager/service/RepositoryService.java b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryService.java index 20aeaa8..b989039 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/RepositoryService.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryService.java @@ -48,7 +48,7 @@ public interface RepositoryService { RepositoryInterface addRepositoryInterface(String datatype, String repoId, String registeredBy, - RepositoryInterface iFace) throws JSONException, ResourceNotFoundException, ValidatorServiceException; + RepositoryInterface iFace) throws Exception; List getDnetCountries(); diff --git a/src/main/java/eu/dnetlib/repo/manager/service/RepositoryServiceImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryServiceImpl.java index e1835d5..cf77ab3 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/RepositoryServiceImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/RepositoryServiceImpl.java @@ -500,8 +500,8 @@ public class RepositoryServiceImpl implements RepositoryService { , ResponseEntity.class); if (responseEntity.getStatusCode().equals(HttpStatus.OK)) { - emailUtils.sendUserUpdateRepositoryEmail(repository, authentication); - emailUtils.sendAdminUpdateRepositoryEmail(repository, authentication); + emailUtils.sendUserUpdateRepositoryInfoEmail(repository, authentication); + emailUtils.sendAdminUpdateRepositoryInfoEmail(repository, authentication); } else LOGGER.debug(responseEntity.getBody().toString()); @@ -552,7 +552,7 @@ public class RepositoryServiceImpl implements RepositoryService { public RepositoryInterface addRepositoryInterface(String datatype, String repoId, String registeredBy, - RepositoryInterface repositoryInterface) throws JSONException, ResourceNotFoundException, ValidatorServiceException { + RepositoryInterface repositoryInterface) throws Exception { try { Repository e = this.getRepositoryById(repoId); repositoryInterface = createRepositoryInterface(e,repositoryInterface,datatype); @@ -564,10 +564,20 @@ public class RepositoryServiceImpl implements RepositoryService { .encode(); HttpEntity httpEntity = new HttpEntity <> (json_interface,httpHeaders); - restTemplate.postForObject(uriComponents.toUri(),httpEntity,String.class); - submitInterfaceValidation(e, registeredBy, repositoryInterface, false); - return repositoryInterface; + + ResponseEntity responseEntity = restTemplate.postForObject(uriComponents.toUri(),httpEntity,ResponseEntity.class); + + if(responseEntity.getStatusCode().equals(HttpStatus.OK)) { + emailUtils.sendAdminRegisterInterfaceEmail(e, repositoryInterface, SecurityContextHolder.getContext().getAuthentication()); + emailUtils.sendUserRegisterInterfaceEmail(e, repositoryInterface, SecurityContextHolder.getContext().getAuthentication()); + + submitInterfaceValidation(e, registeredBy, repositoryInterface, false); + return repositoryInterface; + } else { + LOGGER.debug(responseEntity.getBody().toString()); + throw new Exception("Registering" + baseAddress + " returned " + responseEntity.getStatusCode()); + } } catch (JSONException | ValidatorServiceException e) { LOGGER.debug("Exception on addRepositoryInterface" , e); @@ -584,7 +594,12 @@ public class RepositoryServiceImpl implements RepositoryService { this.updateBaseUrl(repoId,repositoryInterface.getId(),repositoryInterface.getBaseUrl()); this.updateCompliance(repoId,repositoryInterface.getId(),repositoryInterface.getCompliance()); this.updateValidationSet(repoId,repositoryInterface.getId(),repositoryInterface.getAccessSet()); + + Repository e = this.getRepositoryById(repoId); + emailUtils.sendAdminUpdateInterfaceEmail(e, repositoryInterface, SecurityContextHolder.getContext().getAuthentication()); + emailUtils.sendUserUpdateInterfaceEmail(e, repositoryInterface, SecurityContextHolder.getContext().getAuthentication()); submitInterfaceValidation(getRepositoryById(repoId),registeredBy,repositoryInterface,true); + return repositoryInterface; }