From 2c0b6bb74b53cd696a43dce46d1ae23cc67ba74b Mon Sep 17 00:00:00 2001 From: Jj! Date: Wed, 20 Feb 2019 17:37:19 -0600 Subject: [PATCH] [NOISSUE] rework wiring for autoconfiguration of mail --- .../{ => auto}/EmailConfiguration.java | 28 ++++++++++--------- .../main/resources/META-INF/spring.factories | 2 +- .../ui/service/EmailServiceImplTests.groovy | 2 +- .../unicon/shibui/pac4j/AddNewUserFilter.java | 16 ++++++----- .../net/unicon/shibui/pac4j/WebSecurity.java | 12 ++++++-- 5 files changed, 35 insertions(+), 25 deletions(-) rename backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/{ => auto}/EmailConfiguration.java (85%) 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/auto/EmailConfiguration.java similarity index 85% rename from backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/EmailConfiguration.java rename to backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/auto/EmailConfiguration.java index 6198f951a..58169bc88 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/auto/EmailConfiguration.java @@ -1,10 +1,14 @@ -package edu.internet2.tier.shibboleth.admin.ui.configuration; +package edu.internet2.tier.shibboleth.admin.ui.configuration.auto; import edu.internet2.tier.shibboleth.admin.ui.security.repository.UserRepository; import edu.internet2.tier.shibboleth.admin.ui.service.EmailService; import edu.internet2.tier.shibboleth.admin.ui.service.EmailServiceImpl; import lombok.Setter; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureOrder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -24,6 +28,8 @@ */ @Configuration @ConfigurationProperties("shibui.mail") +@AutoConfigureAfter(MailSenderAutoConfiguration.class) +@ConditionalOnBean(JavaMailSender.class) public class EmailConfiguration { private static final String EMAIL_TEMPLATE_ENCODING = "UTF-8"; @@ -43,7 +49,7 @@ public class EmailConfiguration { @Setter private String systemEmailAddress = "doNotReply@shibui.org"; - @Autowired(required = false) + @Autowired private JavaMailSender javaMailSender; @Autowired @@ -97,16 +103,12 @@ private ITemplateResolver htmlTemplateResolver() { } @Bean - public Optional emailService() { - if (this.javaMailSender != null) { - return Optional.of(new EmailServiceImpl(javaMailSender, - emailMessageSource(), - textEmailTemplateEngine(), - htmlEmailTemplateEngine(), - systemEmailAddress, - userRepository)); - } else { - return Optional.empty(); - } + public EmailService emailService() { + return new EmailServiceImpl(javaMailSender, + emailMessageSource(), + textEmailTemplateEngine(), + htmlEmailTemplateEngine(), + systemEmailAddress, + userRepository); } } diff --git a/backend/src/main/resources/META-INF/spring.factories b/backend/src/main/resources/META-INF/spring.factories index c03acd3ec..63970bb9b 100644 --- a/backend/src/main/resources/META-INF/spring.factories +++ b/backend/src/main/resources/META-INF/spring.factories @@ -1,4 +1,4 @@ org.springframework.boot.env.EnvironmentPostProcessor=\ edu.internet2.tier.shibboleth.admin.ui.configuration.postprocessors.IdpHomeValueSettingEnvironmentPostProcessor org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - edu.internet2.tier.shibboleth.admin.ui.configuration.auto.WebSecurityConfig \ No newline at end of file + edu.internet2.tier.shibboleth.admin.ui.configuration.auto.WebSecurityConfig,edu.internet2.tier.shibboleth.admin.ui.configuration.auto.EmailConfiguration \ No newline at end of file diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/EmailServiceImplTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/EmailServiceImplTests.groovy index 8960f807e..6dbfe3f34 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/EmailServiceImplTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/EmailServiceImplTests.groovy @@ -2,7 +2,7 @@ package edu.internet2.tier.shibboleth.admin.ui.service import edu.internet2.tier.shibboleth.admin.ui.configuration.CoreShibUiConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.DevConfig -import edu.internet2.tier.shibboleth.admin.ui.configuration.EmailConfiguration +import edu.internet2.tier.shibboleth.admin.ui.configuration.auto.EmailConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.InternationalizationConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.TestConfiguration diff --git a/pac4j-module/src/main/java/net/unicon/shibui/pac4j/AddNewUserFilter.java b/pac4j-module/src/main/java/net/unicon/shibui/pac4j/AddNewUserFilter.java index 6098e346a..54cb2950d 100644 --- a/pac4j-module/src/main/java/net/unicon/shibui/pac4j/AddNewUserFilter.java +++ b/pac4j-module/src/main/java/net/unicon/shibui/pac4j/AddNewUserFilter.java @@ -38,13 +38,13 @@ public class AddNewUserFilter implements Filter { private UserRepository userRepository; private RoleRepository roleRepository; - private EmailService emailService; + private Optional emailService; private Pac4jConfigurationProperties pac4jConfigurationProperties; private Pac4jConfigurationProperties.SAML2ProfileMapping saml2ProfileMapping; - public AddNewUserFilter(Pac4jConfigurationProperties pac4jConfigurationProperties, UserRepository userRepository, RoleRepository roleRepository, EmailService emailService) { + public AddNewUserFilter(Pac4jConfigurationProperties pac4jConfigurationProperties, UserRepository userRepository, RoleRepository roleRepository, Optional emailService) { this.userRepository = userRepository; this.roleRepository = roleRepository; this.emailService = emailService; @@ -85,11 +85,13 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha User user; if (!persistedUser.isPresent()) { user = buildAndPersistNewUserFromProfile(profile); - try { - emailService.sendNewUserMail(username); - } catch (MessagingException e) { - logger.warn(String.format("Unable to send new user email for user [%s]", username), e); - } + emailService.ifPresent(e -> { + try { + e.sendNewUserMail(username); + } catch (MessagingException e1) { + logger.warn(String.format("Unable to send new user email for user [%s]", username), e); + } + }); } else { user = persistedUser.get(); } diff --git a/pac4j-module/src/main/java/net/unicon/shibui/pac4j/WebSecurity.java b/pac4j-module/src/main/java/net/unicon/shibui/pac4j/WebSecurity.java index 6e08444a9..023d382e0 100644 --- a/pac4j-module/src/main/java/net/unicon/shibui/pac4j/WebSecurity.java +++ b/pac4j-module/src/main/java/net/unicon/shibui/pac4j/WebSecurity.java @@ -1,11 +1,13 @@ package net.unicon.shibui.pac4j; +import edu.internet2.tier.shibboleth.admin.ui.configuration.auto.EmailConfiguration; import edu.internet2.tier.shibboleth.admin.ui.security.repository.RoleRepository; import edu.internet2.tier.shibboleth.admin.ui.security.repository.UserRepository; import edu.internet2.tier.shibboleth.admin.ui.service.EmailService; import org.pac4j.core.config.Config; import org.pac4j.springframework.security.web.CallbackFilter; import org.pac4j.springframework.security.web.SecurityFilter; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureOrder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -17,11 +19,15 @@ import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; import org.springframework.security.web.firewall.StrictHttpFirewall; +import javax.swing.text.html.Option; +import java.util.Optional; + @Configuration @AutoConfigureOrder(-1) +@AutoConfigureAfter(EmailConfiguration.class) public class WebSecurity { @Bean("webSecurityConfig") - public WebSecurityConfigurerAdapter webSecurityConfigurerAdapter(final Config config, UserRepository userRepository, RoleRepository roleRepository, EmailService emailService, Pac4jConfigurationProperties pac4jConfigurationProperties) { + public WebSecurityConfigurerAdapter webSecurityConfigurerAdapter(final Config config, UserRepository userRepository, RoleRepository roleRepository, Optional emailService, Pac4jConfigurationProperties pac4jConfigurationProperties) { return new Pac4jWebSecurityConfigurerAdapter(config, userRepository, roleRepository, emailService, pac4jConfigurationProperties); } @@ -57,10 +63,10 @@ public static class Pac4jWebSecurityConfigurerAdapter extends WebSecurityConfigu private final Config config; private UserRepository userRepository; private RoleRepository roleRepository; - private EmailService emailService; + private Optional emailService; private Pac4jConfigurationProperties pac4jConfigurationProperties; - public Pac4jWebSecurityConfigurerAdapter(final Config config, UserRepository userRepository, RoleRepository roleRepository, EmailService emailService, Pac4jConfigurationProperties pac4jConfigurationProperties) { + public Pac4jWebSecurityConfigurerAdapter(final Config config, UserRepository userRepository, RoleRepository roleRepository, Optional emailService, Pac4jConfigurationProperties pac4jConfigurationProperties) { this.config = config; this.userRepository = userRepository; this.roleRepository = roleRepository;