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..23006e1caf7 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 @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,22 +22,25 @@ 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; /** * {@link EnableAutoConfiguration Auto-configuration} for SendGrid. * * @author Maciej Walkowiak + * @author Patrick Bray * @since 1.3.0 */ @Configuration @ConditionalOnClass(SendGrid.class) -@ConditionalOnProperty(prefix = "spring.sendgrid", value = "username") +@Conditional(SendGridAutoConfiguration.SendGridPropertyCondition.class) @EnableConfigurationProperties(SendGridProperties.class) public class SendGridAutoConfiguration { @@ -47,8 +50,7 @@ public class SendGridAutoConfiguration { @Bean @ConditionalOnMissingBean(SendGrid.class) public SendGrid sendGrid() { - SendGrid sendGrid = new SendGrid(this.properties.getUsername(), - this.properties.getPassword()); + SendGrid sendGrid = createSendGrid(); if (this.properties.isProxyConfigured()) { HttpHost proxy = new HttpHost(this.properties.getProxy().getHost(), this.properties.getProxy().getPort()); @@ -58,4 +60,29 @@ public class SendGridAutoConfiguration { return sendGrid; } + private SendGrid createSendGrid() { + if (this.properties.getApiKey() != null) { + return new SendGrid(this.properties.getApiKey()); + } + else { + return new SendGrid(this.properties.getUsername(), + this.properties.getPassword()); + } + } + + + static class SendGridPropertyCondition extends AnyNestedCondition { + + SendGridPropertyCondition() { + super(ConfigurationPhase.PARSE_CONFIGURATION); + } + + @ConditionalOnProperty(prefix = "spring.sendgrid", value = "username") + static class SendGridUserProperty { + } + + @ConditionalOnProperty(prefix = "spring.sendgrid", value = "api-key") + static 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..6a97a2a32a7 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 @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; public class SendGridProperties { /** - * SendGrid username. + * SendGrid username. Alternative to api key. */ private String username; @@ -37,6 +37,11 @@ public class SendGridProperties { */ private String password; + /** + * SendGrid api key. Alternative to username/password. + */ + private String apiKey; + /** * Proxy configuration. */ @@ -58,6 +63,14 @@ public class SendGridProperties { this.password = password; } + public String getApiKey() { + return this.apiKey; + } + + public void setApiKey(final String apiKey) { + this.apiKey = apiKey; + } + public Proxy getProxy() { return this.proxy; } 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..59f57a9d931 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 @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,6 +38,7 @@ import static org.junit.Assert.assertThat; * Tests for {@link SendGridAutoConfiguration}. * * @author Maciej Walkowiak + * @author Patrick Bray */ public class SendGridAutoConfigurationTests { @@ -51,13 +52,20 @@ public class SendGridAutoConfigurationTests { } @Test - public void expectedSendGridBeanCreated() { + public void expectedSendGridBeanCreatedUsername() { loadContext("spring.sendgrid.username:user", "spring.sendgrid.password:secret"); SendGrid sendGrid = this.context.getBean(SendGrid.class); assertEquals("user", ReflectionTestUtils.getField(sendGrid, "username")); assertEquals("secret", ReflectionTestUtils.getField(sendGrid, "password")); } + @Test + public void expectedSendGridBeanCreatedApiKey() { + 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(); diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index 601cee365e5..07f648d15ae 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -120,6 +120,7 @@ content into your application; rather pick only the properties that you need. spring.profiles.include= # Unconditionally activate the specified comma separated profiles. # SENDGRID ({sc-spring-boot-autoconfigure}/sendgrid/SendGridAutoConfiguration.{sc-ext}[SendGridAutoConfiguration]) + spring.sendgrid.api-key= # SendGrid api key (alternative to username/password) spring.sendgrid.username= # SendGrid account username spring.sendgrid.password= # SendGrid account password spring.sendgrid.proxy.host= # SendGrid proxy host