add ses custom ses sender
This commit is contained in:
parent
bc378c80f1
commit
3e686cfec7
4 changed files with 103 additions and 0 deletions
|
@ -53,5 +53,10 @@
|
||||||
<version>1.0.0.Final</version>
|
<version>1.0.0.Final</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.amazonaws</groupId>
|
||||||
|
<artifactId>aws-java-sdk-ses</artifactId>
|
||||||
|
<version>1.11.538</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
|
@ -0,0 +1,47 @@
|
||||||
|
package com.gwidgets.providers;
|
||||||
|
|
||||||
|
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
|
||||||
|
import com.amazonaws.services.simpleemail.model.Body;
|
||||||
|
import com.amazonaws.services.simpleemail.model.Content;
|
||||||
|
import com.amazonaws.services.simpleemail.model.Destination;
|
||||||
|
import com.amazonaws.services.simpleemail.model.Message;
|
||||||
|
import com.amazonaws.services.simpleemail.model.SendEmailRequest;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.jboss.logging.Logger;
|
||||||
|
import org.keycloak.email.EmailSenderProvider;
|
||||||
|
import org.keycloak.models.UserModel;
|
||||||
|
|
||||||
|
public class SESEmailSenderProvider implements EmailSenderProvider {
|
||||||
|
|
||||||
|
private static final Logger log = Logger.getLogger("org.keycloak.events");
|
||||||
|
|
||||||
|
private final AmazonSimpleEmailService sesClient;
|
||||||
|
|
||||||
|
public SESEmailSenderProvider(
|
||||||
|
AmazonSimpleEmailService sesClient) {
|
||||||
|
this.sesClient = sesClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void send(Map<String, String> config, UserModel user, String subject, String textBody,
|
||||||
|
String htmlBody) {
|
||||||
|
|
||||||
|
log.info("attempting to send email using aws ses for " + user.getEmail());
|
||||||
|
|
||||||
|
Message message = new Message().withSubject(new Content().withData(subject))
|
||||||
|
.withBody(new Body().withHtml(new Content().withData(htmlBody))
|
||||||
|
.withText(new Content().withData(textBody).withCharset("UTF-8")));
|
||||||
|
|
||||||
|
SendEmailRequest sendEmailRequest = new SendEmailRequest()
|
||||||
|
.withSource("example<" + config.get("from") + ">")
|
||||||
|
.withMessage(message).withDestination(new Destination().withToAddresses(user.getEmail()));
|
||||||
|
|
||||||
|
sesClient.sendEmail(sendEmailRequest);
|
||||||
|
log.info("email sent to " + user.getEmail() + " successfully");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
package com.gwidgets.providers;
|
||||||
|
|
||||||
|
import com.amazonaws.auth.EnvironmentVariableCredentialsProvider;
|
||||||
|
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
|
||||||
|
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
|
||||||
|
import java.util.Objects;
|
||||||
|
import org.keycloak.Config.Scope;
|
||||||
|
import org.keycloak.email.EmailSenderProvider;
|
||||||
|
import org.keycloak.email.EmailSenderProviderFactory;
|
||||||
|
import org.keycloak.models.KeycloakSession;
|
||||||
|
import org.keycloak.models.KeycloakSessionFactory;
|
||||||
|
|
||||||
|
public class SESEmailSenderProviderFactory implements EmailSenderProviderFactory {
|
||||||
|
|
||||||
|
private static AmazonSimpleEmailService sesClientInstance;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EmailSenderProvider create(KeycloakSession session) {
|
||||||
|
|
||||||
|
//using singleton pattern to avoid creating the client each time create is called
|
||||||
|
if (sesClientInstance == null) {
|
||||||
|
String awsRegion = Objects.requireNonNull(System.getenv("AWS_REGION"));
|
||||||
|
|
||||||
|
sesClientInstance =
|
||||||
|
AmazonSimpleEmailServiceClientBuilder
|
||||||
|
.standard().withCredentials(new EnvironmentVariableCredentialsProvider())
|
||||||
|
.withRegion(awsRegion)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
return new SESEmailSenderProvider(sesClientInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(Scope config) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postInit(KeycloakSessionFactory factory) { }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getId() {
|
||||||
|
return "default";
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
com.gwidgets.providers.SESEmailSenderProviderFactory
|
Loading…
Add table
Reference in a new issue