From 3bf6c2fe1f6117ae1dbe8e51f78faaa8fefe0991 Mon Sep 17 00:00:00 2001 From: Patrick Bray Date: Sat, 21 Nov 2015 18:53:10 +1100 Subject: [PATCH] Support for SendGrid ApiKey See gh-4574 --- .../sendgrid/SendGridAutoConfiguration.java | 32 +++++++++++++++++-- .../sendgrid/SendGridProperties.java | 13 ++++++++ .../SendGridAutoConfigurationTests.java | 11 +++++++ 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/sendgrid/SendGridAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/sendgrid/SendGridAutoConfiguration.java index afda757b17d..0f4bbd23003 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/sendgrid/SendGridAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/sendgrid/SendGridAutoConfiguration.java @@ -22,11 +22,13 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.AnyNestedCondition; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; /** @@ -37,7 +39,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration @ConditionalOnClass(SendGrid.class) -@ConditionalOnProperty(prefix = "spring.sendgrid", value = "username") +@Conditional(SendGridAutoConfiguration.SendGridPropertyCondition.class) @EnableConfigurationProperties(SendGridProperties.class) public class SendGridAutoConfiguration { @@ -47,15 +49,39 @@ public class SendGridAutoConfiguration { @Bean @ConditionalOnMissingBean(SendGrid.class) public SendGrid sendGrid() { - SendGrid sendGrid = new SendGrid(this.properties.getUsername(), - this.properties.getPassword()); + + SendGrid sendGrid; + + if (this.properties.getApikey() != null) { + sendGrid = new SendGrid(this.properties.getApikey()); + } + else { + sendGrid = new SendGrid(this.properties.getUsername(), + this.properties.getPassword()); + } + if (this.properties.isProxyConfigured()) { HttpHost proxy = new HttpHost(this.properties.getProxy().getHost(), this.properties.getProxy().getPort()); sendGrid.setClient(HttpClientBuilder.create().setProxy(proxy) .setUserAgent("sendgrid/" + sendGrid.getVersion() + ";java").build()); } + return sendGrid; } + static class SendGridPropertyCondition extends AnyNestedCondition { + + SendGridPropertyCondition() { + super(ConfigurationPhase.PARSE_CONFIGURATION); + } + + @ConditionalOnProperty(prefix = "spring.sendgrid", value = "username") + private class SendGridUserProperty { + } + + @ConditionalOnProperty(prefix = "spring.sendgrid", value = "apikey") + private class SendGridApiKeyProperty { + } + } } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/sendgrid/SendGridProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/sendgrid/SendGridProperties.java index 480933a8fb6..699f487af85 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/sendgrid/SendGridProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/sendgrid/SendGridProperties.java @@ -37,11 +37,24 @@ public class SendGridProperties { */ private String password; + /** + * SendGrid api key. + */ + private String apikey; + /** * Proxy configuration. */ private Proxy proxy; + public String getApikey() { + return this.apikey; + } + + public void setApikey(final String apikey) { + this.apikey = apikey; + } + public String getUsername() { return this.username; } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/sendgrid/SendGridAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/sendgrid/SendGridAutoConfigurationTests.java index 09d337fe7f5..09cf9460461 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/sendgrid/SendGridAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/sendgrid/SendGridAutoConfigurationTests.java @@ -58,6 +58,17 @@ public class SendGridAutoConfigurationTests { assertEquals("secret", ReflectionTestUtils.getField(sendGrid, "password")); } + @Test + public void expectedSendGridBeanCreated_UsingApiKey() { + + loadContext("spring.sendgrid.apikey:SG.SECRET-API-KEY"); + + SendGrid sendGrid = this.context.getBean(SendGrid.class); + + assertEquals("SG.SECRET-API-KEY", + ReflectionTestUtils.getField(sendGrid, "password")); + } + @Test(expected = NoSuchBeanDefinitionException.class) public void autoConfigurationNotFiredWhenPropertiesNotSet() { loadContext();