From d01192de8edddfb5b5836960ff58e1756ddd6a02 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Fri, 11 Jan 2019 10:13:06 -0700 Subject: [PATCH] [SHIBUI-1030] Added support for Mailhog. Created service method for sending new user mail to admins. --- backend/build.gradle | 12 +++++++++++ .../src/main/docker-files/docker-compose.yml | 9 +++++++++ .../ui/configuration/EmailConfiguration.java | 7 ++++++- .../admin/ui/service/EmailService.java | 3 ++- .../admin/ui/service/EmailServiceImpl.java | 20 +++++++++++++++---- .../src/main/resources/application.properties | 9 +++++---- .../main/resources/mail/html/new-user.html | 4 ++++ .../src/main/resources/mail/html/test.html | 4 ---- .../src/main/resources/mail/text/new-user.txt | 1 + backend/src/main/resources/mail/text/test.txt | 1 - 10 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 backend/src/main/docker-files/docker-compose.yml create mode 100644 backend/src/main/resources/mail/html/new-user.html delete mode 100644 backend/src/main/resources/mail/html/test.html create mode 100644 backend/src/main/resources/mail/text/new-user.txt delete mode 100644 backend/src/main/resources/mail/text/test.txt diff --git a/backend/build.gradle b/backend/build.gradle index 66ef8d383..1170bf695 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -6,6 +6,7 @@ plugins { id 'net.researchgate.release' version '2.6.0' id 'io.franzbecker.gradle-lombok' version '1.13' id 'com.palantir.docker' version '0.20.1' + id 'com.avast.gradle.docker-compose' version '0.8.0' } apply plugin: 'io.spring.dependency-management' @@ -248,4 +249,15 @@ docker { files tasks.bootJar.outputs files 'src/main/docker-files/loader.properties' buildArgs(['JAR_FILE': "shibui-${version}.jar"]) +} + +/* + * Docker Compose (gradle-docker-compose-plugin) settings. + * Used to start and stop docker containers before running automation tests. + */ +apply plugin: 'docker-compose' +dockerCompose { + useComposeFiles = ['./src/main/docker-files/docker-compose.yml'] + captureContainersOutput = true + waitForTcpPorts = false } \ No newline at end of file diff --git a/backend/src/main/docker-files/docker-compose.yml b/backend/src/main/docker-files/docker-compose.yml new file mode 100644 index 000000000..96af88dd4 --- /dev/null +++ b/backend/src/main/docker-files/docker-compose.yml @@ -0,0 +1,9 @@ +version: "3" +services: + + redis: + image: mailhog/mailhog:latest + ports: + - 1025:1025 + - 8025:8025 + container_name: mailhog \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/EmailConfiguration.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/EmailConfiguration.java index cb3525f08..e84551685 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/EmailConfiguration.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/EmailConfiguration.java @@ -37,6 +37,11 @@ public class EmailConfiguration { @Setter private String htmlEmailTemplatePathPrefix = "/mail/html/"; + //Configured via @ConfigurationProperties (using setter method) with 'shibui.system.email.address' property and + // default value set here if that property is not explicitly set in application.properties + @Setter + private String systemEmailAddress = "doNotReply@shibui.org"; + @Autowired private ApplicationContext applicationContext; @@ -92,6 +97,6 @@ private ITemplateResolver htmlTemplateResolver() { @Bean public EmailService emailService() { - return new EmailServiceImpl(javaMailSender, emailMessageSource(), textEmailTemplateEngine(), htmlEmailTemplateEngine()); + return new EmailServiceImpl(javaMailSender, emailMessageSource(), textEmailTemplateEngine(), htmlEmailTemplateEngine(), systemEmailAddress); } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EmailService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EmailService.java index 2b76360ae..39b441e9a 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EmailService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EmailService.java @@ -7,5 +7,6 @@ * @author Bill Smith (wsmith@unicon.net) */ public interface EmailService { - void sendMail(String emailTemplate, String fromAddress, String recipient, String subject, Locale locale) throws MessagingException; + void sendMail(String emailTemplate, String fromAddress, String[] recipients, String subject, Locale locale) throws MessagingException; + void sendNewUserMail(String newUsername) throws MessagingException; } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EmailServiceImpl.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EmailServiceImpl.java index 9bdc1fc15..90fa8b33b 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EmailServiceImpl.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EmailServiceImpl.java @@ -18,6 +18,7 @@ public class EmailServiceImpl implements EmailService { private static final Logger logger = LoggerFactory.getLogger(EmailServiceImpl.class); + private final String systemEmailAddress; private JavaMailSender emailSender; private ResourceBundleMessageSource emailMessageSource; private TemplateEngine textEmailTemplateEngine; @@ -26,14 +27,16 @@ public class EmailServiceImpl implements EmailService { public EmailServiceImpl(JavaMailSender emailSender, ResourceBundleMessageSource emailMessageSource, TemplateEngine textEmailTemplateEngine, - TemplateEngine htmlEmailTemplateEngine) { + TemplateEngine htmlEmailTemplateEngine, + String systemEmailAddress) { this.emailSender = emailSender; this.emailMessageSource = emailMessageSource; this.textEmailTemplateEngine = textEmailTemplateEngine; this.htmlEmailTemplateEngine = htmlEmailTemplateEngine; + this.systemEmailAddress = systemEmailAddress; } - public void sendMail(String emailTemplate, String fromAddress, String recipient, String subject, Locale locale) throws MessagingException { + public void sendMail(String emailTemplate, String fromAddress, String[] recipients, String subject, Locale locale) throws MessagingException { Context context = new Context(locale); // TODO: set things to be replaced in the email template here @@ -41,13 +44,22 @@ public void sendMail(String emailTemplate, String fromAddress, String recipient, MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true,"UTF-8"); message.setSubject(subject); message.setFrom(fromAddress); - message.setTo(recipient); + message.setTo(recipients); String textContent = textEmailTemplateEngine.process(emailTemplate, context); String htmlContent = htmlEmailTemplateEngine.process(emailTemplate, context); message.setText(textContent, htmlContent); // TODO: Uncomment when we're ready to actually send emails - // emailSender.send(mimeMessage); + emailSender.send(mimeMessage); + } + + public void sendNewUserMail(String newUsername) throws MessagingException { + String subject = String.format("User Access Request for %s", newUsername); + sendMail("new-user", systemEmailAddress, getSystemAdmins(), subject, Locale.getDefault()); + } + + private String[] getSystemAdmins() { + return new String[]{"admin1@shibui.org", "admin2@shibui.org"}; } } diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index 113cc8e92..7eec3663d 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -66,10 +66,11 @@ shibui.nameid-filter-ui-schema-location=classpath:nameid-filter.schema.json # shibui.metadataProviders.target=file:/opt/shibboleth-idp/conf/shibui-metadata-providers.xml # shibui.metadataProviders.taskRunRate=30000 -# Email configuration +# Email configuration (local mailhog) spring.mail.host=localhost -spring.mail.port=25 +spring.mail.port=1025 spring.mail.username=username spring.mail.password=password -spring.mail.properties.mail.smtp.auth=true -spring.mail.properties.mail.smtp.starttls.enable=true \ No newline at end of file +spring.mail.properties.mail.smtp.auth=false +spring.mail.properties.mail.smtp.starttls.enable=false +shibui.system.email.address=doNotReply@shibui.org \ No newline at end of file diff --git a/backend/src/main/resources/mail/html/new-user.html b/backend/src/main/resources/mail/html/new-user.html new file mode 100644 index 000000000..83d22f22a --- /dev/null +++ b/backend/src/main/resources/mail/html/new-user.html @@ -0,0 +1,4 @@ + + New User Email + The user identified in the subject has requested access to SHIBUI. + \ No newline at end of file diff --git a/backend/src/main/resources/mail/html/test.html b/backend/src/main/resources/mail/html/test.html deleted file mode 100644 index db4472ad1..000000000 --- a/backend/src/main/resources/mail/html/test.html +++ /dev/null @@ -1,4 +0,0 @@ - - This is a test! - This is a test email template. Can't you tell? - \ No newline at end of file diff --git a/backend/src/main/resources/mail/text/new-user.txt b/backend/src/main/resources/mail/text/new-user.txt new file mode 100644 index 000000000..2cff1e571 --- /dev/null +++ b/backend/src/main/resources/mail/text/new-user.txt @@ -0,0 +1 @@ +The user identified in the subject has requested access to SHIBUI. \ No newline at end of file diff --git a/backend/src/main/resources/mail/text/test.txt b/backend/src/main/resources/mail/text/test.txt deleted file mode 100644 index 55781c52c..000000000 --- a/backend/src/main/resources/mail/text/test.txt +++ /dev/null @@ -1 +0,0 @@ -This is a test email template. Can't you tell? \ No newline at end of file