summaryrefslogtreecommitdiff
path: root/src/main/java/com/p4square/grow/backend/SESNotificationService.java
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2017-09-03 21:44:16 -0700
committerJesse Morgan <jesse@jesterpm.net>2017-09-03 21:48:53 -0700
commit72ee0f10ddca0d880e50d13446f9ac0269e542eb (patch)
tree9dc1bfe0e4300ab05fb3ac1cd44dac6c44b71c18 /src/main/java/com/p4square/grow/backend/SESNotificationService.java
parentfa7d0ec7d486dccb55c50ba635a638a855a513c1 (diff)
Adding notification emails when questions and answers are posted to the feed.20170903
Diffstat (limited to 'src/main/java/com/p4square/grow/backend/SESNotificationService.java')
-rw-r--r--src/main/java/com/p4square/grow/backend/SESNotificationService.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/main/java/com/p4square/grow/backend/SESNotificationService.java b/src/main/java/com/p4square/grow/backend/SESNotificationService.java
new file mode 100644
index 0000000..58b732d
--- /dev/null
+++ b/src/main/java/com/p4square/grow/backend/SESNotificationService.java
@@ -0,0 +1,86 @@
+package com.p4square.grow.backend;
+
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
+import com.amazonaws.regions.Region;
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
+import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient;
+import com.amazonaws.services.simpleemail.model.*;
+import com.p4square.grow.config.Config;
+import org.apache.log4j.Logger;
+
+/**
+ * Send Notifications via SimpleEmailService.
+ */
+public class SESNotificationService implements NotificationService {
+
+ private final static Logger LOG = Logger.getLogger(SESNotificationService.class);
+
+ private final AmazonSimpleEmailService mClient;
+ private final String mSourceAddress;
+ private final Destination mDestination;
+
+ public SESNotificationService(final Config config) {
+ AWSCredentials creds;
+
+ String awsAccessKey = config.getString("awsAccessKey");
+ if (awsAccessKey != null) {
+ creds = new AWSCredentials() {
+ @Override
+ public String getAWSAccessKeyId() {
+ return config.getString("awsAccessKey");
+ }
+ @Override
+ public String getAWSSecretKey() {
+ return config.getString("awsSecretKey");
+ }
+ };
+ } else {
+ creds = new DefaultAWSCredentialsProviderChain().getCredentials();
+ }
+
+ mClient = new AmazonSimpleEmailServiceClient(creds);
+
+ String region = config.getString("awsRegion");
+ if (region != null) {
+ mClient.setRegion(Region.getRegion(Regions.fromName(region)));
+ }
+
+ mSourceAddress = config.getString("notificationSourceEmail");
+
+ final String dest = config.getString("notificationEmail");
+ if (dest != null) {
+ mDestination = new Destination().withToAddresses(dest);
+ } else {
+ // Notifications are not configured.
+ mDestination = null;
+ }
+ }
+
+ @Override
+ public void sendNotification(final String message) {
+ try {
+ if (mSourceAddress == null || mDestination == null) {
+ // Disable notifications if there is no source address configured.
+ LOG.debug("Notifications are disabled because source or destination emails are not configured.");
+ return;
+ }
+
+ Message msg = new Message()
+ .withSubject(new Content().withCharset("UTF-8").withData("Grow Notification"))
+ .withBody(new Body()
+ .withText(new Content().withCharset("UTF-8").withData(message)));
+
+ SendEmailRequest request = new SendEmailRequest()
+ .withDestination(mDestination)
+ .withSource(mSourceAddress)
+ .withMessage(msg);
+
+ mClient.sendEmail(request);
+
+ } catch (Exception e) {
+ LOG.warn("Failed to send notification email", e);
+ }
+ }
+}