You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ik...@apache.org on 2019/09/02 00:04:20 UTC
[fineract-cn-notifications] 33/43: Merge branch 'develop' into
permitted-feign-client-auth
This is an automated email from the ASF dual-hosted git repository.
ikamga pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract-cn-notifications.git
commit 1fba09958b51cb5eaeaea2661f19c8b8f24188f0
Merge: f3deeaa a202f47
Author: Ebenezer Graham <eb...@gmail.com>
AuthorDate: Fri May 24 16:31:35 2019 +0400
Merge branch 'develop' into permitted-feign-client-auth
.travis.yml | 2 +-
README.md | 5 +-
.../api/v1/events/NotificationEventConstants.java | 8 +-
.../fineract/cn/notification/TestEmailService.java | 15 +--
.../fineract/cn/notification/TestSMSService.java | 9 +-
.../cn/notification/listener/EventListener.java | 103 +++++++++++++++++++++
service/build.gradle | 1 -
.../service/internal/service/EmailService.java | 7 +-
.../service/internal/service/SMSService.java | 10 +-
shared.gradle | 1 -
10 files changed, 128 insertions(+), 33 deletions(-)
diff --cc .travis.yml
index 06d4b4d,b70bfc3..bffe9d0
--- a/.travis.yml
+++ b/.travis.yml
@@@ -27,4 -27,4 +27,4 @@@ env
- BUILD_SNAPSHOTS_BRANCH=develop
- ARTIFACTORY_URL=https://mifos.jfrog.io/mifos
- ARTIFACTORY_USER=travis-ci
- - secure: "E5IyImya7x5cHLB1vGLGIJUC1M+7RxKZivb5iUM+RR/xW39/7b4Qd3JeX4yBUeiPjf9lNMMxcGVyqI/4htT95++WCNc0u6OoxwGgxQEB9JHE8OWecaYgK4uLO7+651XF4DNbSiH3NVmc2b8Q0c0jBlu3MHAeEUIQ6BOiTXSsqnewtWAW0XETBooNmo2nTqZyKvzez0698oJuuYfZeFbqm8wJ9rIwtptyJluRzqcTlzw1cH/CvcIskLDmITVqbuZxAW59j1BqUnZNQpuOFZ692iqntdxq78CxliCG1MEYy4zWY8xcIWNVp28OKkMULXdi+V80oZXY4TyTwZfH6e2oZFz6/X9GpNNR6EwaHV0tT3wZi2NrkoBokD8bEBxQubIgxDCaDAFG9VMByC+++nwm0GJzerKBV4CpNSy/93XLrFAQ8+lOVauVtkVHuzFBWleLLQYcBGAXRz/C/UF4/m0m014jvD7v [...]
- - secure: "NHjl/OM08+Q8zRXH1GRowPmFTCarpZVgpfzvW23DnHI9kwPcAuvXHUs0liBD1FgUr3oFNlIQ8QknlWSAb2yI9CTs/+v6f7wl4t4Xx4t5gV0wFuffb3W7a41bE+m1OSUunleSGLKr4qGffjPQ63EUyAb4wrywg23iY12OHbQ3a988UvqoDg6IjK7NXKeLhkAXg6qLDRh9aHdM6NknFNUUIbYyX25PMTQj/SShDQ3xptOhrj1wOvKbBEBc2t2X4+0/3pKt36W0VwJt68HPL4YKwFNiErqSXDAmKFwcf/aZxlXAGreCYN9rNuGuP5RMpblY1bNi6sW2COG0IgTjNSvQgULfIb42GI68O9w0supKZ8OKQLnDJDIQ5q1A1rE54bqs1ey8WD9bmwc24NTUkmjKTqDMTMqCLE+gXLM7xnS2JNisOETfEfRughUFBvmHVPgnQ6fCDJ0brPWBO9Se/elPP/XWlWAk [...]
++ - secure: "NHjl/OM08+Q8zRXH1GRowPmFTCarpZVgpfzvW23DnHI9kwPcAuvXHUs0liBD1FgUr3oFNlIQ8QknlWSAb2yI9CTs/+v6f7wl4t4Xx4t5gV0wFuffb3W7a41bE+m1OSUunleSGLKr4qGffjPQ63EUyAb4wrywg23iY12OHbQ3a988UvqoDg6IjK7NXKeLhkAXg6qLDRh9aHdM6NknFNUUIbYyX25PMTQj/SShDQ3xptOhrj1wOvKbBEBc2t2X4+0/3pKt36W0VwJt68HPL4YKwFNiErqSXDAmKFwcf/aZxlXAGreCYN9rNuGuP5RMpblY1bNi6sW2COG0IgTjNSvQgULfIb42GI68O9w0supKZ8OKQLnDJDIQ5q1A1rE54bqs1ey8WD9bmwc24NTUkmjKTqDMTMqCLE+gXLM7xnS2JNisOETfEfRughUFBvmHVPgnQ6fCDJ0brPWBO9Se/elPP/XWlWAk [...]
diff --cc README.md
index 7528145,c993eee..7a6daff
--- a/README.md
+++ b/README.md
@@@ -1,6 -1,6 +1,7 @@@
- # Apache Fineract CN Notification [![Build Status](https://api.travis-ci.com/apache/fineract-cn-notification.svg?branch=develop)](https://travis-ci.com/apache/fineract-cn-notification)
+
- This mircroservice contains all the functionalities for SMS and Email Notification
+ # Apache Fineract CN Notification [![Build Status](https://api.travis-ci.com/apache/fineract-cn-notifications.svg?branch=develop)](https://travis-ci.com/apache/fineract-cn-notifications)
+
-This mircroservice contains all the functionalities for SMS and Email Notification
++This mircroservice implements SMS and Email Notification functionalities
## Abstract
Apache Fineract CN is an application framework for digital financial services, a system to support nationwide and cross-national financial transactions and help to level and speed the creation of an inclusive, interconnected digital economy for every nation in the world.
diff --cc api/src/main/java/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.java
index b6855b1,f4d1be1..cf4ba28
--- a/api/src/main/java/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.java
+++ b/api/src/main/java/org/apache/fineract/cn/notification/api/v1/events/NotificationEventConstants.java
@@@ -27,15 -27,8 +27,15 @@@ public interface NotificationEventConst
String POST_SMS_CONFIGURATION = "post-sms-configuration";
String POST_EMAIL_CONFIGURATION = "post-email-configuration";
- String POST_SMS_NOTIFICATION = "post-sms-notification";
- String POST_EMAIL_NOTIFICATION = "post-email-notification";
+ String POST_SOURCE_APPLICATION = "post-source-application";
+ String UPDATE_SMS_CONFIGURATION = "update-sms-configuration";
+ String UPDATE_EMAIL_CONFIGURATION = "update-email-configuration";
+ String DELETE_SMS_CONFIGURATION = "delete-sms-configuration";
+ String DELETE_EMAIL_CONFIGURATION = "delete-email-configuration";
+ String DELETE_SOURCE_APPLICATION = "delete-source-application";
+
- String POST_SEND_EMAIL_NOTIFICATION = "post-send-email-notification";
- String POST_SEND_SMS_NOTIFICATION = "post-send-sms-notification";
++ String SEND_EMAIL_NOTIFICATION = "post-send-email-notification";
++ String SEND_SMS_NOTIFICATION = "post-send-sms-notification";
String POST_ENABLE_CUSTOMER_CREATED_EVENT = "post-enable-customer-created-event";
String POST_ENABLE_CUSTOMER_UPDATED_EVENT = "post-enable-customer-updated-event";
@@@ -47,13 -40,6 +47,13 @@@
String SELECTOR_INITIALIZE = SELECTOR_NAME + " = '" + INITIALIZE + "'";
String SELECTOR_POST_SMS_CONFIGURATION = SELECTOR_NAME + " = '" + POST_SMS_CONFIGURATION + "'";
String SELECTOR_POST_EMAIL_CONFIGURATION = SELECTOR_NAME + " = '" + POST_EMAIL_CONFIGURATION + "'";
- String SELECTOR_POST_SMS_NOTIFICATION = SELECTOR_NAME + " = '" + POST_SMS_NOTIFICATION + "'";
- String SELECTOR_POST_EMAIL_NOTIFICATION = SELECTOR_NAME + " = '" + POST_EMAIL_NOTIFICATION + "'";
+ String SELECTOR_UPDATE_SMS_CONFIGURATION = SELECTOR_NAME + " = '" + UPDATE_SMS_CONFIGURATION + "'";
+ String SELECTOR_UPDATE_EMAIL_CONFIGURATION = SELECTOR_NAME + " = '" + UPDATE_EMAIL_CONFIGURATION + "'";
+ String SELECTOR_DELETE_SMS_CONFIGURATION = SELECTOR_NAME + " = '" + DELETE_SMS_CONFIGURATION + "'";
+ String SELECTOR_DELETE_EMAIL_CONFIGURATION = SELECTOR_NAME + " = '" + DELETE_EMAIL_CONFIGURATION + "'";
+ String SELECTOR_POST_SOURCE_APPLICATION = SELECTOR_NAME + " = '" + POST_SOURCE_APPLICATION + "'";
+ String SELECTOR_DELETE_SOURCE_APPLICATION = SELECTOR_NAME + " = '" + DELETE_SOURCE_APPLICATION + "'";
+
- String SELECTOR_POST_SEND_EMAIL_NOTIFICATION = SELECTOR_NAME + " = '" + POST_SEND_EMAIL_NOTIFICATION + "'";
- String SELECTOR_POST_SEND_SMS_NOTIFICATION = SELECTOR_NAME + " = '" + POST_SEND_SMS_NOTIFICATION + "'";
++ String SELECTOR_SEND_EMAIL_NOTIFICATION = SELECTOR_NAME + " = '" + SEND_EMAIL_NOTIFICATION + "'";
++ String SELECTOR_SEND_SMS_NOTIFICATION = SELECTOR_NAME + " = '" + SEND_SMS_NOTIFICATION + "'";
}
diff --cc component-test/src/main/java/org/apache/fineract/cn/notification/TestEmailService.java
index 6808678,2855f68..69a1133
--- a/component-test/src/main/java/org/apache/fineract/cn/notification/TestEmailService.java
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/TestEmailService.java
@@@ -20,16 -20,14 +20,13 @@@ package org.apache.fineract.cn.notifica
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.fineract.cn.api.util.NotFoundException;
--import org.apache.fineract.cn.customer.api.v1.client.CustomerNotFoundException;
import org.apache.fineract.cn.notification.api.v1.client.ConfigurationNotFoundException;
import org.apache.fineract.cn.notification.api.v1.client.NotificationManager;
import org.apache.fineract.cn.notification.api.v1.domain.EmailConfiguration;
import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
+import org.apache.fineract.cn.notification.service.internal.service.EmailService;
- import org.apache.fineract.cn.notification.service.internal.service.EventHelper;
import org.apache.fineract.cn.notification.service.internal.service.NotificationService;
import org.apache.fineract.cn.notification.util.DomainObjectGenerator;
--import org.apache.fineract.cn.test.listener.EventRecorder;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@@ -46,26 -44,38 +43,26 @@@ public class TestEmailService extends A
public TestEmailService() {
super();
+ emailConfiguration = DomainObjectGenerator.emailConfiguration();
}
+
@Test
- public void sendEmail() throws InterruptedException{
+ public void shouldSendAnEmail() throws InterruptedException {
this.logger.info("Send Email Notification");
- String messageHash = notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
- notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
++ String to = notificationService.sendEmail("fineractcnnotificationdemo@gmail.com",
"egraham15@alustudent.com",
"Address Details Changed",
"Dear Valued Customer," +
"\n\nYour address has been changed successfully" +
- "\nStreet: Test Street"+
- "\nCity: Test City"+
- "\nState: Test State"+
- "\nCountry: Mauritius"+
+ "\nStreet: Test Street" +
+ "\nCity: Test City" +
+ "\nState: Test State" +
+ "\nCountry: Mauritius" +
"\n\nBest Regards" +
"\nMFI");
- }
-
- @Test
- public void shouldRetrieveEmailConfigurationEntity() {
- logger.info("Create and retrieve Email Gateway configuration");
- EmailConfiguration sampleRetrieved = this.notificationManager.findEmailConfigurationByIdentifier(configIdentifier);
- Assert.assertNotNull(sampleRetrieved);
- Assert.assertEquals(sampleRetrieved.getIdentifier(), configIdentifier);
- }
-
- @Test
- public void shouldCreateNewEmailConfigurationEntity() throws InterruptedException{
- logger.info("Create Email Gateway configuration");
- this.notificationManager.createEmailConfiguration(DomainObjectGenerator.emailConfiguration());
- Assert.assertNotNull(messageHash);
- eventRecorder.wait(NotificationEventConstants.POST_EMAIL_CONFIGURATION,EmailConfiguration.class);
++ Assert.assertNotNull(to);
}
@Test(expected = NotFoundException.class)
@@@ -79,29 -89,8 +76,27 @@@
}
@Test
- public void checkEmailConfigurationEntityExist() {
+ public void shouldCreateAndRetrieveEmailConfigurationEntity() throws InterruptedException {
+ logger.info("Create and Retrieve Email Gateway configuration");
+ this.notificationManager.createEmailConfiguration(emailConfiguration);
+
- this.eventRecorder.wait(NotificationEventConstants.POST_EMAIL_CONFIGURATION, emailConfiguration.getIdentifier());
++ Assert.assertTrue(this.eventRecorder.wait(NotificationEventConstants.POST_EMAIL_CONFIGURATION, emailConfiguration.getIdentifier()));
+
+ EmailConfiguration sampleRetrieved = this.notificationManager.findEmailConfigurationByIdentifier(emailConfiguration.getIdentifier());
- Assert.assertNotNull(sampleRetrieved);
- Assert.assertEquals(sampleRetrieved.getIdentifier(), emailConfiguration.getIdentifier());
++ Assert.assertEquals(sampleRetrieved.getIdentifier(),emailConfiguration.getIdentifier());
+ }
+
+ @Test
+ public void checkEmailConfigurationEntityExist() throws InterruptedException {
logger.info("Email Gateway configuration Exist");
- Assert.assertTrue(this.notificationService.emailConfigurationExists(configIdentifier));
+ this.notificationManager.createEmailConfiguration(emailConfiguration);
- super.eventRecorder.wait(NotificationEventConstants.POST_EMAIL_CONFIGURATION, emailConfiguration.getIdentifier());
-
++ Assert.assertTrue(eventRecorder.wait(NotificationEventConstants.POST_EMAIL_CONFIGURATION, emailConfiguration.getIdentifier()));
+ Assert.assertTrue(this.emailService.emailConfigurationExists(emailConfiguration.getIdentifier()));
+ }
+
+ @Test
+ public void shouldFindActiveGateway() {
+ this.logger.info("Find Active Gateway");
+ Assert.assertNotNull(this.emailService.findActiveEmailConfigurationEntity());
}
}
diff --cc component-test/src/main/java/org/apache/fineract/cn/notification/TestSMSService.java
index 37ab85f,33536ed..bd34c44
--- a/component-test/src/main/java/org/apache/fineract/cn/notification/TestSMSService.java
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/TestSMSService.java
@@@ -57,15 -59,20 +57,14 @@@ public class TestSMSService extends Abs
}
@Test
- public void shouldTriggerCustomerCreated() throws InterruptedException{
- logger.info("Create SMS Gateway configuration");
+ public void shouldCreateAndRetrieveSMSConfigurationEntity() throws InterruptedException {
+ logger.info("Create and Retrieve SMS Gateway configuration");
+ this.notificationManager.createSMSConfiguration(smsConfiguration);
- this.eventRecorder.wait(NotificationEventConstants.POST_SMS_CONFIGURATION, smsConfiguration.getIdentifier());
- eventRecorder.wait(NotificationEventConstants.POST_EMAIL_CONFIGURATION, SMSConfiguration.class);
- }
-
- @Test(expected = NotFoundException.class)
- public void smsConfigurationNotFound() throws CustomerNotFoundException {
- logger.info("SMS Gateway configuration Not Found");
- try {
- this.notificationManager.findSMSConfigurationByIdentifier(RandomStringUtils.randomAlphanumeric(8));
- } catch (final ConfigurationNotFoundException ex) {
- logger.info("Error Asserted");
- }
++ Assert.assertTrue(this.eventRecorder.wait(NotificationEventConstants.POST_SMS_CONFIGURATION, smsConfiguration.getIdentifier()));
+
+ SMSConfiguration sampleRetrieved = this.notificationManager.findSMSConfigurationByIdentifier(smsConfiguration.getIdentifier());
- Assert.assertNotNull(sampleRetrieved);
+ Assert.assertEquals(sampleRetrieved.getIdentifier(), smsConfiguration.getIdentifier());
}
@Test
@@@ -85,10 -94,8 +84,10 @@@
}
@Test
- public void shouldSendAnSMS() {
- public void checkSMSConfigurationEntityExist() {
- logger.info("SMS Gateway configuration Exist");
- Assert.assertTrue(this.notificationService.smsConfigurationExists(configIdentifier));
++ public void shouldSendAnSMS(){
+ this.logger.info("Send SMS Notification");
- String messageHash = this.notificationService.sendSMS("+23058409206",
++ String to = this.notificationService.sendSMS("+23058409206",
+ "Dear Valued Customer\n\nTalk is cheap show me the code\n\nBest Regards\nYour MFI");
- Assert.assertNotNull(messageHash);
++ Assert.assertNotNull(to);
}
}
diff --cc component-test/src/main/java/org/apache/fineract/cn/notification/listener/EventListener.java
index 0000000,0000000..8aab1ca
new file mode 100644
--- /dev/null
+++ b/component-test/src/main/java/org/apache/fineract/cn/notification/listener/EventListener.java
@@@ -1,0 -1,0 +1,103 @@@
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements. See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership. The ASF licenses this file
++ * to you under the Apache License, Version 2.0 (the
++ * "License"); you may not use this file except in compliance
++ * with the License. You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing,
++ * software distributed under the License is distributed on an
++ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++ * KIND, either express or implied. See the License for the
++ * specific language governing permissions and limitations
++ * under the License.
++ */
++ /*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements. See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership. The ASF licenses this file
++ * to you under the Apache License, Version 2.0 (the
++ * "License"); you may not use this file except in compliance
++ * with the License. You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing,
++ * software distributed under the License is distributed on an
++ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++ * KIND, either express or implied. See the License for the
++ * specific language governing permissions and limitations
++ * under the License.
++ */
++ package org.apache.fineract.cn.notification.listener;
++
++import org.apache.fineract.cn.lang.config.TenantHeaderFilter;
++import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
++import org.apache.fineract.cn.notification.service.ServiceConstants;
++import org.apache.fineract.cn.test.listener.EventRecorder;
++import org.slf4j.Logger;
++import org.springframework.beans.factory.annotation.Autowired;
++import org.springframework.beans.factory.annotation.Qualifier;
++import org.springframework.jms.annotation.JmsListener;
++import org.springframework.messaging.handler.annotation.Header;
++import org.springframework.stereotype.Component;
++
++@SuppressWarnings("unused")
++@Component
++public class EventListener {
++ private final EventRecorder eventRecorder;
++ private final Logger logger;
++
++ @Autowired
++ public EventListener(final EventRecorder eventRecorder,
++ @Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger) {
++ this.logger = logger;
++ this.eventRecorder = eventRecorder;
++ }
++
++ @JmsListener(
++ subscription = NotificationEventConstants.DESTINATION,
++ destination = NotificationEventConstants.DESTINATION,
++ selector = NotificationEventConstants.SELECTOR_POST_EMAIL_CONFIGURATION
++ )
++ public void postEmailConfiguration(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
++ final String payload) {
++ this.eventRecorder.event(tenant, NotificationEventConstants.POST_EMAIL_CONFIGURATION, payload, String.class);
++ }
++
++ @JmsListener(
++ subscription = NotificationEventConstants.DESTINATION,
++ destination = NotificationEventConstants.DESTINATION,
++ selector = NotificationEventConstants.SELECTOR_POST_SMS_CONFIGURATION
++ )
++ public void postSMSConfiguration(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
++ final String payload) {
++ this.eventRecorder.event(tenant, NotificationEventConstants.POST_SMS_CONFIGURATION, payload, String.class);
++ }
++
++ @JmsListener(
++ subscription = NotificationEventConstants.DESTINATION,
++ destination = NotificationEventConstants.DESTINATION,
++ selector = NotificationEventConstants.SELECTOR_SEND_EMAIL_NOTIFICATION
++ )
++ public void onSendEmailTrigger(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
++ final String payload) {
++ this.eventRecorder.event(tenant, NotificationEventConstants.SEND_EMAIL_NOTIFICATION, payload, String.class);
++ }
++
++ @JmsListener(
++ subscription = NotificationEventConstants.DESTINATION,
++ destination = NotificationEventConstants.DESTINATION,
++ selector = NotificationEventConstants.SELECTOR_SEND_SMS_NOTIFICATION
++ )
++ public void onSendSmsTrigger(@Header(TenantHeaderFilter.TENANT_HEADER) final String tenant,
++ final String payload) {
++ this.eventRecorder.event(tenant, NotificationEventConstants.SEND_SMS_NOTIFICATION, payload, String.class);
++ }
++
++}
diff --cc service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailService.java
index bc006c6,5260e98..6a6a78f
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailService.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/EmailService.java
@@@ -33,13 -24,10 +33,12 @@@ import org.springframework.beans.factor
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
-import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.PostConstruct;
+import java.util.List;
+import java.util.Optional;
import java.util.Properties;
@Component
@@@ -129,42 -72,8 +128,42 @@@ public class EmailService
ServiceConstants.MAIL_SMTP_AUTH_VALUE);
properties.put(ServiceConstants.MAIL_SMTP_STARTTLS_ENABLE_PROPERTY,
ServiceConstants.MAIL_SMTP_STARTTLS_ENABLE_VALUE);
- mailSender.setJavaMailProperties(properties);
+ this.mailSender.setJavaMailProperties(properties);
+ return true;
+ }
+
+ public boolean setCustomProperties(String identifier) {
+ EmailConfiguration configuration = findEmailConfigurationByIdentifier(identifier).get();
+ this.mailSender.setHost(configuration.getHost());
+ this.mailSender.setPort(Integer.parseInt(configuration.getPort()));
+ this.mailSender.setUsername(configuration.getUsername());
+ this.mailSender.setPassword(configuration.getApp_password());
- return mailSender;
+ Properties properties = new Properties();
+ properties.put(ServiceConstants.MAIL_TRANSPORT_PROTOCOL_PROPERTY, configuration.getProtocol());
+ properties.put(ServiceConstants.MAIL_SMTP_AUTH_PROPERTY, configuration.getSmtp_auth());
+ properties.put(ServiceConstants.MAIL_SMTP_STARTTLS_ENABLE_PROPERTY, configuration.getStart_tls());
+ //properties.put(ServiceConstants.MAIL_SMTP_TIMEOUT_PROPERTY, ServiceConstants.MAIL_SMTP_TIMEOUT_VALUE);
+ this.mailSender.setJavaMailProperties(properties);
+ return true;
+ }
+
+ @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
+ @Transactional
- @EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.POST_SEND_EMAIL_NOTIFICATION)
++ @EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.SEND_EMAIL_NOTIFICATION)
+ public String sendEmail(String from, String to, String subject, String message) {
+ SimpleMailMessage mail = new SimpleMailMessage();
+
+ try {
+ mail.setFrom(from);
+ mail.setTo(to);
+ mail.setSubject(subject);
+ mail.setText(message);
+
+ this.mailSender.send(mail);
+ } catch (MailException exception) {
+ logger.debug("Caused by:" + exception.getCause().toString());
+ }
- return to.concat(" - " + mailSender.hashCode());
++ return to;
}
- }
+ }
diff --cc service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSService.java
index f618d1a,fca2476..0bfe73a
--- a/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSService.java
+++ b/service/src/main/java/org/apache/fineract/cn/notification/service/internal/service/SMSService.java
@@@ -23,95 -23,46 +23,95 @@@ import com.twilio.Twilio
import com.twilio.rest.api.v2010.account.Message;
import com.twilio.rest.api.v2010.account.MessageCreator;
import com.twilio.type.PhoneNumber;
++import org.apache.fineract.cn.command.annotation.Aggregate;
+import org.apache.fineract.cn.command.annotation.CommandHandler;
+import org.apache.fineract.cn.command.annotation.CommandLogLevel;
+import org.apache.fineract.cn.command.annotation.EventEmitter;
+import org.apache.fineract.cn.notification.api.v1.domain.SMSConfiguration;
+import org.apache.fineract.cn.notification.api.v1.events.NotificationEventConstants;
import org.apache.fineract.cn.notification.service.ServiceConstants;
+import org.apache.fineract.cn.notification.service.internal.mapper.SMSConfigurationMapper;
+import org.apache.fineract.cn.notification.service.internal.repository.SMSGatewayConfigurationRepository;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
--import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
- import javax.annotation.PostConstruct;
+import java.util.List;
+import java.util.Optional;
@Service
++@Aggregate
public class SMSService {
+ static boolean isConfigured;
+ private final SMSGatewayConfigurationRepository smsGatewayConfigurationRepository;
private final Logger logger;
- @Value("${smssender.accountSID}")
- private String ACCOUNT_SID;
- @Value("${smssender.authToken}")
- private String AUTH_TOKEN;
- @Value("${smssender.senderNumber}")
- private String SENDERNUMBER;
+ private String accountSid;
+ private String authToken;
+ private String senderNumber;
@Autowired
- public SMSService(@Qualifier(ServiceConstants.LOGGER_NAME) Logger logger) {
+ public SMSService(final SMSGatewayConfigurationRepository smsGatewayConfigurationRepository,
+ @Qualifier(ServiceConstants.LOGGER_NAME) Logger logger) {
super();
this.logger = logger;
+ this.isConfigured = false;
+ this.smsGatewayConfigurationRepository = smsGatewayConfigurationRepository;
+ }
+
+ //@PostConstruct
+ public void init() {
+ if (findActiveSMSConfigurationEntity().isPresent()){
+ configureSMSGatewayWithActiveConfiguration();
+ }else{
+ //Todo: Send an alert on the interface to configure the service
+ }
+ }
+
+ public boolean configureSMSGatewayWithActiveConfiguration() {
+ SMSConfiguration configuration = findActiveSMSConfigurationEntity().get();
+ this.accountSid = configuration.getAccount_sid();
+ this.authToken = configuration.getAuth_token();
+ this.senderNumber = configuration.getSender_number();
+ return this.isConfigured = true;
+ }
+
+ public boolean customConfiguration(String identifier) {
+ SMSConfiguration configuration = findSMSConfigurationByIdentifier(identifier).get();
+ this.accountSid = configuration.getAccount_sid();
+ this.authToken = configuration.getAuth_token();
+ this.senderNumber = configuration.getSender_number();
+ return this.isConfigured = true;
+ }
+
+ public Optional<SMSConfiguration> findActiveSMSConfigurationEntity() {
+ return this.smsGatewayConfigurationRepository.active().map(SMSConfigurationMapper::map);
+ }
+
+ public Boolean smsConfigurationExists(final String identifier) {
+ return this.smsGatewayConfigurationRepository.existsByIdentifier(identifier);
+ }
+
+ public Optional<SMSConfiguration> findSMSConfigurationByIdentifier(final String identifier) {
+ return this.smsGatewayConfigurationRepository.findByIdentifier(identifier).map(SMSConfigurationMapper::map);
}
- public void configure(String accountSID,
- String authToken,
- String senderNumber) {
- ACCOUNT_SID = accountSID;
- AUTH_TOKEN = authToken;
- SENDERNUMBER = senderNumber;
+ public List<SMSConfiguration> findAllActiveSMSConfigurationEntities() {
+ return SMSConfigurationMapper.map(this.smsGatewayConfigurationRepository.findAll());
}
- public void sendSMS(String receiver, String template) {
- this.logger.debug("sendSMS invoked");
- Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
- MessageCreator messageCreator = Message.creator(ACCOUNT_SID,
+ @CommandHandler(logStart = CommandLogLevel.INFO, logFinish = CommandLogLevel.INFO)
+ @Transactional
- @EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.POST_SEND_SMS_NOTIFICATION)
++ @EventEmitter(selectorName = NotificationEventConstants.SELECTOR_NAME, selectorValue = NotificationEventConstants.SEND_SMS_NOTIFICATION)
+ public String sendSMS(String receiver, String template) {
+ Twilio.init(this.accountSid, this.authToken);
+ MessageCreator messageCreator = Message.creator(this.accountSid,
new PhoneNumber(receiver),
- new PhoneNumber(SENDERNUMBER),
+ new PhoneNumber(this.senderNumber),
template);
Message message = messageCreator.create();
- return message.getTo().concat(" - " + message.getSid());
- System.out.println(message.getSid());
++ return message.getTo();
}
--}
++}