From 582d9a65cb6a2f1717433e983fe4f36c27ecc1c2 Mon Sep 17 00:00:00 2001 From: shriharsh Date: Fri, 3 Nov 2017 12:48:54 +0530 Subject: [PATCH 1/5] Issue #10 feat: Capturing configuration for SMS providers --- keycloak/sms-provider/Msg91Creds.json | 4 + keycloak/sms-provider/awsSnsCreds.json | 4 + .../KeycloakSmsAuthenticatorConstants.java | 4 + .../KeycloakSmsAuthenticatorUtil.java | 34 ++-- .../sunbird/sms/MessageProviderFactory.java | 30 +++ .../org/sunbird/sms/SMSAuthenticatorUtil.java | 26 +++ .../org/sunbird/sms/SmsConfigurationType.java | 17 ++ .../sms/amazonsns/AmazonSnsFactory.java | 20 ++ .../sms/amazonsns/AmazonSnsProvider.java | 52 +++++ .../sunbird/sms/msg91/Msg91SmsProvider.java | 180 ++++++++++++++++++ .../sms/msg91/Msg91SmsProviderFactory.java | 21 ++ .../sunbird/sms/provider/ISmsProvider.java | 6 + .../provider/ISmsProviderConfigurations.java | 7 + .../sms/provider/ISmsProviderFactory.java | 8 + .../main/java/org/sunbird/utils/JsonUtil.java | 40 ++++ 15 files changed, 441 insertions(+), 12 deletions(-) create mode 100644 keycloak/sms-provider/Msg91Creds.json create mode 100644 keycloak/sms-provider/awsSnsCreds.json create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/SMSAuthenticatorUtil.java create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsFactory.java create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsProvider.java create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProviderFactory.java create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderConfigurations.java create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderFactory.java create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java diff --git a/keycloak/sms-provider/Msg91Creds.json b/keycloak/sms-provider/Msg91Creds.json new file mode 100644 index 00000000..4887665e --- /dev/null +++ b/keycloak/sms-provider/Msg91Creds.json @@ -0,0 +1,4 @@ +{ + "token": "AKIAI4XIRSGGFIW5VOKQ", + "secret": "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" +} \ No newline at end of file diff --git a/keycloak/sms-provider/awsSnsCreds.json b/keycloak/sms-provider/awsSnsCreds.json new file mode 100644 index 00000000..4887665e --- /dev/null +++ b/keycloak/sms-provider/awsSnsCreds.json @@ -0,0 +1,4 @@ +{ + "token": "AKIAI4XIRSGGFIW5VOKQ", + "secret": "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" +} \ No newline at end of file diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorConstants.java b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorConstants.java index edd6b353..77837852 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorConstants.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorConstants.java @@ -21,4 +21,8 @@ public class KeycloakSmsAuthenticatorConstants { // User credentials (used to persist the sent sms code + expiration time cluster wide) public static final String USR_CRED_MDL_SMS_CODE = "sms-auth.code"; public static final String USR_CRED_MDL_SMS_EXP_TIME = "sms-auth.exp-time"; + + public static final String SMS_PROVIDER_CONFIGURATIONS_PATH = "sms-provider/awsSnsCreds.json"; + + } diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java index 60254461..fec8b5b2 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java @@ -1,12 +1,16 @@ package org.sunbird.keycloak; -import com.amazonaws.services.sns.model.PublishResult; +import com.amazonaws.util.StringUtils; import org.jboss.logging.Logger; import org.keycloak.models.AuthenticatorConfigModel; import org.keycloak.models.UserModel; -import org.sunbird.aws.snsclient.SnsNotificationService; +import org.sunbird.sms.MessageProviderFactory; +import org.sunbird.sms.provider.ISmsProvider; +import org.sunbird.utils.JsonUtil; +import java.io.File; import java.util.List; +import java.util.Map; import java.util.Random; /** @@ -85,19 +89,25 @@ public static String setDefaultCountryCodeIfZero(String mobileNumber) { static boolean sendSmsCode(String mobileNumber, String code, AuthenticatorConfigModel config) { // Send an SMS - KeycloakSmsAuthenticatorUtil.logger.debug("Sending " + code + " to mobileNumber " + mobileNumber); - - String smsUsr = getConfigString(config, KeycloakSmsAuthenticatorConstants.CONF_PRP_SMS_CLIENTTOKEN); - String smsPwd = getConfigString(config, KeycloakSmsAuthenticatorConstants.CONF_PRP_SMS_CLIENTSECRET); String smsText = createMessage(code, mobileNumber, config); - try { - PublishResult send_result = new SnsNotificationService().send(setDefaultCountryCodeIfZero(mobileNumber), smsText, smsUsr, smsPwd); - return true; - } catch (Exception e) { - //Just like pokemon - return false; + logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : smsText - " + smsText); + + String filePath = new File(KeycloakSmsAuthenticatorConstants.SMS_PROVIDER_CONFIGURATIONS_PATH).getAbsolutePath(); + logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : filePath - " + filePath); + + if (!StringUtils.isNullOrEmpty(filePath)) { + Map configurations = JsonUtil.readFromJson(filePath); + logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : configurations - " + configurations); + + ISmsProvider amazonSmsProvider = MessageProviderFactory.getSnsClient(configurations); + + if (amazonSmsProvider != null) { + return amazonSmsProvider.send(setDefaultCountryCodeIfZero(mobileNumber), smsText); + } } + + return false; } static String getSmsCode(long nrOfDigits) { diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java new file mode 100644 index 00000000..97399766 --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java @@ -0,0 +1,30 @@ +package org.sunbird.sms; + +import org.sunbird.sms.amazonsns.AmazonSnsFactory; +import org.sunbird.sms.msg91.Msg91SmsProviderFactory; +import org.sunbird.sms.provider.ISmsProvider; + +import java.util.Map; + +public class MessageProviderFactory { + + private static Msg91SmsProviderFactory msg91SmsProviderFactory; + private static AmazonSnsFactory amazonSnsFactory = null; + + + public static ISmsProvider getMsg91SmsProvider(Map configurations) { + if (msg91SmsProviderFactory == null) { + msg91SmsProviderFactory = new Msg91SmsProviderFactory(); + } + + return msg91SmsProviderFactory.create(configurations); + } + + + public static ISmsProvider getSnsClient(Map configurations) { + if (amazonSnsFactory == null) { + amazonSnsFactory = new AmazonSnsFactory(); + } + return amazonSnsFactory.create(configurations); + } +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/SMSAuthenticatorUtil.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SMSAuthenticatorUtil.java new file mode 100644 index 00000000..4bec7128 --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SMSAuthenticatorUtil.java @@ -0,0 +1,26 @@ +package org.sunbird.sms; + +import java.util.Map; + +/** + * Created by joris on 18/11/2016. + */ +public class SMSAuthenticatorUtil { + + public static String getConfigString(Map config, String configName) { + return getConfigString(config, configName, null); + } + + public static String getConfigString(Map config, String configName, String defaultValue) { + + String value = defaultValue; + + if (config.containsKey(configName)) { + // Get value + value = config.get(configName); + } + + return value; + } + +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java new file mode 100644 index 00000000..4ed62d51 --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java @@ -0,0 +1,17 @@ +package org.sunbird.sms; + +public interface SmsConfigurationType { + String CONF_SMS_TOKEN = "token"; + String CONF_SMS_SECRET = "secret"; + String CONF_SMS_URL = "sms_url"; + String CONF_SMS_METHOD_TYPE = "sms_method_type"; + String CONF_SMS_USERNAME = "sms_username"; + String CONF_SMS_PASSWORD = "sms_password"; + String CONF_SMS_AUTHTYPE = "sms_authtype"; + String CONF_SMS_CONTENT_TYPE = "sms_content_type"; + String CONF_SMS_PROXY_URL = "sms_proxy_url"; + String CONF_SMS_PROXY_USERNAME = "sms_proxy_username"; + String CONF_SMS_PROXY_PASSWORD = "sms_proxy_password"; + String CONF_AUTH_METHOD_BASIC = "basic_authentication"; + String CONF_AUTH_METHOD_INMESSAGE = "in_message_authentication"; +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsFactory.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsFactory.java new file mode 100644 index 00000000..90b51e46 --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsFactory.java @@ -0,0 +1,20 @@ +package org.sunbird.sms.amazonsns; + +import org.sunbird.sms.provider.ISmsProvider; +import org.sunbird.sms.provider.ISmsProviderFactory; + +import java.util.Map; + +public class AmazonSnsFactory implements ISmsProviderFactory { + private static AmazonSnsProvider amazonSnsProvider = null; + + @Override + public ISmsProvider create(Map configurations) { + if (amazonSnsProvider == null) { + amazonSnsProvider = new AmazonSnsProvider(); + amazonSnsProvider.configure(configurations); + } + + return amazonSnsProvider; + } +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsProvider.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsProvider.java new file mode 100644 index 00000000..632d9598 --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsProvider.java @@ -0,0 +1,52 @@ +package org.sunbird.sms.amazonsns; + +import com.amazonaws.services.sns.model.MessageAttributeValue; +import com.amazonaws.services.sns.model.PublishRequest; +import org.jboss.logging.Logger; +import org.sunbird.aws.snsclient.SnsClientFactory; +import org.sunbird.sms.SMSAuthenticatorUtil; +import org.sunbird.sms.SmsConfigurationType; +import org.sunbird.sms.provider.ISmsProvider; + +import java.util.HashMap; +import java.util.Map; + +public class AmazonSnsProvider implements ISmsProvider { + + private static Logger logger = Logger.getLogger(AmazonSnsProvider.class); + + private Map configurations; + + @Override + public boolean send(String phoneNumber, String smsText) { + logger.debug("AmazonSnsProvider@send : phoneNumber - " + phoneNumber + " & Sms text - " + smsText); + + Map smsAttributes = new HashMap(); + smsAttributes.put("AWS.SNS.SMS.SenderID", new MessageAttributeValue() + .withStringValue("HomeOffice") + .withDataType("String")); + + String clientToken = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_TOKEN); + String clientSecret = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_SECRET); + + logger.debug("AmazonSnsProvider@send : clientToken - " + clientToken + " & clientSecret - " + clientSecret); + + + try { + SnsClientFactory.getSnsClient(clientToken, clientSecret).publish(new PublishRequest() + .withMessage(smsText) + .withPhoneNumber(phoneNumber) + .withMessageAttributes(smsAttributes)); + + return true; + } catch (Exception e) { + logger.debug("AmazonSnsProvider@Send : Exception Caught -" + e.getMessage()); + return false; + } + } + + @Override + public void configure(Map configurations) { + this.configurations = configurations; + } +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java new file mode 100644 index 00000000..acf610f1 --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java @@ -0,0 +1,180 @@ +package org.sunbird.sms.msg91; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpHost; +import org.apache.http.StatusLine; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.jboss.logging.Logger; +import org.sunbird.sms.SMSAuthenticatorUtil; +import org.sunbird.sms.SmsConfigurationType; +import org.sunbird.sms.provider.ISmsProvider; + +import javax.ws.rs.HttpMethod; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.Map; + +public class Msg91SmsProvider implements ISmsProvider { + + private static Logger logger = Logger.getLogger(Msg91SmsProvider.class); + + private Map configurations; + + @Override + public void configure(Map configurations) { + this.configurations = configurations; + } + + @Override + public boolean send(String phoneNumber, String smsText) { + return sendSmsCode(phoneNumber, smsText); + } + + private boolean sendSmsCode(String mobileNumber, String smsText) { + // Send an SMS + logger.debug("Sending " + smsText + " to mobileNumber " + mobileNumber); + + String smsUrl = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_URL); + String smsUsr = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_USERNAME); + String smsPwd = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_PASSWORD); + + String proxyUrl = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_PROXY_URL); + String proxyUsr = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_PROXY_USERNAME); + String proxyPwd = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_PROXY_PASSWORD); + String contentType = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_CONTENT_TYPE); + + CloseableHttpClient httpClient = null; + try { + URL smsURL = (smsUrl != null && smsUrl.length() > 0) ? new URL(smsUrl) : null; + URL proxyURL = (proxyUrl != null && proxyUrl.length() > 0) ? new URL(proxyUrl) : null; + + if (smsURL == null) { + logger.error("SMS gateway URL is not configured."); + return false; + } + + + CredentialsProvider credsProvider; + if (SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_AUTHTYPE, "").equals(SmsConfigurationType.CONF_AUTH_METHOD_INMESSAGE)) { + credsProvider = getCredentialsProvider(null, null, proxyUsr, proxyPwd, smsURL, proxyURL); + } else { + credsProvider = getCredentialsProvider(smsUsr, smsPwd, proxyUsr, proxyPwd, smsURL, proxyURL); + } + + HttpHost target = new HttpHost(smsURL.getHost(), smsURL.getPort(), smsURL.getProtocol()); + HttpHost proxy = (proxyURL != null) ? new HttpHost(proxyURL.getHost(), proxyURL.getPort(), proxyURL.getProtocol()) : null; + + httpClient = HttpClients.custom() + .setDefaultCredentialsProvider(credsProvider) + .build(); + + RequestConfig requestConfig; + requestConfig = RequestConfig.custom() + .setProxy(proxy) + .build(); + + String httpMethod = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_METHOD_TYPE); + if (httpMethod.equals(HttpMethod.GET)) { + + String path = getPath(mobileNumber, smsURL, smsText); + + HttpGet httpGet = new HttpGet(path); + httpGet.setConfig(requestConfig); + if (isNotEmpty(contentType)) { + httpGet.addHeader("Content-type", contentType); + } + + logger.debug("Executing request " + httpGet.getRequestLine() + " to " + target + " via " + proxy); + + CloseableHttpResponse response = httpClient.execute(target, httpGet); + StatusLine sl = response.getStatusLine(); + response.close(); + if (sl.getStatusCode() != 200) { + logger.error("SMS code for " + mobileNumber + " could not be sent: " + sl.getStatusCode() + " - " + sl.getReasonPhrase()); + } + return sl.getStatusCode() == 200; + + } else if (httpMethod.equals(HttpMethod.POST)) { + + String path = getPath(mobileNumber, smsURL, smsText); + String uri = smsURL.getProtocol() + "://" + smsURL.getHost() + ":" + smsURL.getPort() + path; + + HttpPost httpPost = new HttpPost(uri); + httpPost.setConfig(requestConfig); + if (isNotEmpty(contentType)) { + httpPost.addHeader("Content-type", contentType); + } + + HttpEntity entity = new ByteArrayEntity(smsText.getBytes("UTF-8")); + httpPost.setEntity(entity); + + CloseableHttpResponse response = httpClient.execute(httpPost); + StatusLine sl = response.getStatusLine(); + response.close(); + if (sl.getStatusCode() != 200) { + logger.error("SMS code for " + mobileNumber + " could not be sent: " + sl.getStatusCode() + " - " + sl.getReasonPhrase()); + } + return sl.getStatusCode() == 200; + } + return true; + } catch (IOException e) { + logger.error(e); + return false; + } finally { + if (httpClient != null) { + try { + httpClient.close(); + } catch (IOException ignore) { + // Ignore ... + } + } + } + } + + private CredentialsProvider getCredentialsProvider(String smsUsr, String smsPwd, String proxyUsr, String proxyPwd, URL smsURL, URL proxyURL) { + CredentialsProvider credsProvider = new BasicCredentialsProvider(); + + // If defined, add BASIC Authentication parameters + if (isNotEmpty(smsUsr) && isNotEmpty(smsPwd)) { + credsProvider.setCredentials( + new AuthScope(smsURL.getHost(), smsURL.getPort()), + new UsernamePasswordCredentials(smsUsr, smsPwd)); + + } + + // If defined, add Proxy Authentication parameters + if (isNotEmpty(proxyUsr) && isNotEmpty(proxyPwd)) { + credsProvider.setCredentials( + new AuthScope(proxyURL.getHost(), proxyURL.getPort()), + new UsernamePasswordCredentials(proxyUsr, proxyPwd)); + + } + return credsProvider; + } + + private String getPath(String mobileNumber, URL smsURL, String smsText) throws UnsupportedEncodingException { + String path = smsURL.getPath(); + if(smsURL.getQuery() != null && smsURL.getQuery().length() > 0) { + path += smsURL.getQuery(); + } + path = path.replaceFirst("\\{message\\}", URLEncoder.encode(smsText, "UTF-8")); + path = path.replaceFirst("\\{phonenumber\\}", URLEncoder.encode(mobileNumber, "UTF-8")); + return path; + } + + private boolean isNotEmpty(String s) { + return (s != null && s.length() > 0); + } +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProviderFactory.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProviderFactory.java new file mode 100644 index 00000000..73b4f4d2 --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProviderFactory.java @@ -0,0 +1,21 @@ +package org.sunbird.sms.msg91; + +import org.sunbird.sms.provider.ISmsProvider; +import org.sunbird.sms.provider.ISmsProviderFactory; + +import java.util.Map; + +public class Msg91SmsProviderFactory implements ISmsProviderFactory { + + private static Msg91SmsProvider msg91SmsProvider = null; + + @Override + public ISmsProvider create(Map configurations) { + if (msg91SmsProvider == null){ + msg91SmsProvider = new Msg91SmsProvider(); + msg91SmsProvider.configure(configurations); + } + + return msg91SmsProvider; + } +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java new file mode 100644 index 00000000..b6e41e70 --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java @@ -0,0 +1,6 @@ +package org.sunbird.sms.provider; + +public interface ISmsProvider extends ISmsProviderConfigurations { + + boolean send(String phoneNumber,String smsText); +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderConfigurations.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderConfigurations.java new file mode 100644 index 00000000..1944bc1c --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderConfigurations.java @@ -0,0 +1,7 @@ +package org.sunbird.sms.provider; + +import java.util.Map; + +public interface ISmsProviderConfigurations { + void configure(Map configurations); +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderFactory.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderFactory.java new file mode 100644 index 00000000..a0497ddf --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderFactory.java @@ -0,0 +1,8 @@ +package org.sunbird.sms.provider; + +import java.util.Map; + +public interface ISmsProviderFactory { + + ISmsProvider create(Map configurations); +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java b/keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java new file mode 100644 index 00000000..98a68c51 --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java @@ -0,0 +1,40 @@ +package org.sunbird.utils; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.File; +import java.io.IOException; +import java.util.Map; + +public class JsonUtil { + + public static Map readFromJson(String jsonFile) { + ObjectMapper mapper = new ObjectMapper(); + + // read JSON from a file + Map map = null; + + try { + map = mapper.readValue( + new File(jsonFile), + new TypeReference>() { + }); + } catch (IOException e) { + e.printStackTrace(); + } + +// String json = null; +// try { +// JSONParser parser = new JSONParser(); +// //Use JSONObject for simple JSON and JSONArray for array of JSON. +// JSONObject data = (JSONObject) parser.parse(new FileReader(jsonFile));//path to the JSON file. +// json = data.toString(); +// } catch (IOException | ParseException e) { +// e.printStackTrace(); +// } + + return map; + } + +} From 502264bf0a5a218b9b0a62d5709d02057c6b24fc Mon Sep 17 00:00:00 2001 From: shriharsh Date: Fri, 3 Nov 2017 12:51:12 +0530 Subject: [PATCH 2/5] Issue #10 feat: Capturing configuration for SMS providers --- keycloak/sms-provider/Msg91Creds.json | 8 +- .../sms-provider/dependency-reduced-pom.xml | 156 ++++++++++++++++++ .../keycloak-email-phone-autthenticator.iml | 3 + .../KeycloakSmsAuthenticatorConstants.java | 5 +- .../KeycloakSmsAuthenticatorUtil.java | 32 +++- .../sunbird/sms/MessageProviderFactory.java | 1 + .../org/sunbird/sms/SmsConfigurationType.java | 4 + .../sms/amazonsns/AmazonSnsFactory.java | 1 + .../sunbird/sms/msg91/Msg91SmsProvider.java | 87 +++++++++- .../sunbird/sms/provider/ISmsProvider.java | 2 +- .../main/java/org/sunbird/utils/JsonUtil.java | 10 -- 11 files changed, 287 insertions(+), 22 deletions(-) create mode 100644 keycloak/sms-provider/dependency-reduced-pom.xml diff --git a/keycloak/sms-provider/Msg91Creds.json b/keycloak/sms-provider/Msg91Creds.json index 4887665e..f674f555 100644 --- a/keycloak/sms-provider/Msg91Creds.json +++ b/keycloak/sms-provider/Msg91Creds.json @@ -1,4 +1,8 @@ { - "token": "AKIAI4XIRSGGFIW5VOKQ", - "secret": "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" + "auth_key": "181585AvzynW0NSmU59f84bd6", + "sender": "TestSunbird", + "country": "91", + "route": "4", + "sms_method_type": "GET", + "sms_url": "http://api.msg91.com/api/sendhttp.php?" } \ No newline at end of file diff --git a/keycloak/sms-provider/dependency-reduced-pom.xml b/keycloak/sms-provider/dependency-reduced-pom.xml new file mode 100644 index 00000000..d7f9ecd5 --- /dev/null +++ b/keycloak/sms-provider/dependency-reduced-pom.xml @@ -0,0 +1,156 @@ + + + 4.0.0 + org.sunbird + keycloak-email-phone-autthenticator + 1.0-SNAPSHOT + + + + maven-shade-plugin + 3.0.0 + + + package + + shade + + + + + classworlds:classworlds + junit:junit + jmock:* + *:xml-apis + org.apache.maven:lib:tests + + + + + + + + + + + org.keycloak + keycloak-core + 3.2.0.Final + provided + + + keycloak-common + org.keycloak + + + bcprov-jdk15on + org.bouncycastle + + + bcpkix-jdk15on + org.bouncycastle + + + + + org.keycloak + keycloak-server-spi + 3.2.0.Final + provided + + + org.keycloak + keycloak-server-spi-private + 3.2.0.Final + provided + + + org.jboss.logging + jboss-logging + 3.3.1.Final + provided + + + org.keycloak + keycloak-services + 3.2.0.Final + provided + + + javax.mail-api + javax.mail + + + jboss-servlet-api_3.0_spec + org.jboss.spec.javax.servlet + + + twitter4j-core + org.twitter4j + + + resteasy-jaxrs + org.jboss.resteasy + + + jboss-jaxrs-api_2.0_spec + org.jboss.spec.javax.ws.rs + + + jboss-transaction-api_1.2_spec + org.jboss.spec.javax.transaction + + + resteasy-multipart-provider + org.jboss.resteasy + + + javase + com.google.zxing + + + bcprov-jdk15on + org.bouncycastle + + + bcpkix-jdk15on + org.bouncycastle + + + + + org.apache.httpcomponents + httpclient + 4.5 + provided + + + httpcore + org.apache.httpcomponents + + + commons-codec + commons-codec + + + + + junit + junit + 4.12 + test + + + hamcrest-core + org.hamcrest + + + + + + UTF-8 + 1.8 + 1.8 + + + diff --git a/keycloak/sms-provider/keycloak-email-phone-autthenticator.iml b/keycloak/sms-provider/keycloak-email-phone-autthenticator.iml index 8c11a5d4..499d7e3f 100644 --- a/keycloak/sms-provider/keycloak-email-phone-autthenticator.iml +++ b/keycloak/sms-provider/keycloak-email-phone-autthenticator.iml @@ -6,6 +6,7 @@ + @@ -56,5 +57,7 @@ + + \ No newline at end of file diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorConstants.java b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorConstants.java index 77837852..90e6b458 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorConstants.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorConstants.java @@ -22,7 +22,6 @@ public class KeycloakSmsAuthenticatorConstants { public static final String USR_CRED_MDL_SMS_CODE = "sms-auth.code"; public static final String USR_CRED_MDL_SMS_EXP_TIME = "sms-auth.exp-time"; - public static final String SMS_PROVIDER_CONFIGURATIONS_PATH = "sms-provider/awsSnsCreds.json"; - - + public static final String AMAZON_SNS_PROVIDER_CONFIGURATIONS_PATH = "sms-provider/awsSnsCreds.json"; + public static final String MSG91_SMS_PROVIDER_CONFIGURATIONS_PATH = "sms-provider/Msg91Creds.json"; } diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java index fec8b5b2..d5c11548 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java @@ -88,12 +88,20 @@ public static String setDefaultCountryCodeIfZero(String mobileNumber) { } static boolean sendSmsCode(String mobileNumber, String code, AuthenticatorConfigModel config) { - // Send an SMS - String smsText = createMessage(code, mobileNumber, config); logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : smsText - " + smsText); - String filePath = new File(KeycloakSmsAuthenticatorConstants.SMS_PROVIDER_CONFIGURATIONS_PATH).getAbsolutePath(); + Boolean amazonSmsProviderStatus = msgViaAmazonSns(mobileNumber, smsText); + if (amazonSmsProviderStatus != null) return amazonSmsProviderStatus; + + Boolean msg91SmsProviderStatus = sendViaMsg91(mobileNumber, code); + if (msg91SmsProviderStatus != null) return msg91SmsProviderStatus; + + return false; + } + + private static Boolean msgViaAmazonSns(String mobileNumber, String smsText) { + String filePath = new File(KeycloakSmsAuthenticatorConstants.AMAZON_SNS_PROVIDER_CONFIGURATIONS_PATH).getAbsolutePath(); logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : filePath - " + filePath); if (!StringUtils.isNullOrEmpty(filePath)) { @@ -106,8 +114,24 @@ static boolean sendSmsCode(String mobileNumber, String code, AuthenticatorConfig return amazonSmsProvider.send(setDefaultCountryCodeIfZero(mobileNumber), smsText); } } + return null; + } - return false; + private static Boolean sendViaMsg91(String mobileNumber, String code) { + String filePath = new File(KeycloakSmsAuthenticatorConstants.MSG91_SMS_PROVIDER_CONFIGURATIONS_PATH).getAbsolutePath(); + logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : filePath - " + filePath); + + if (!StringUtils.isNullOrEmpty(filePath)) { + Map configurations = JsonUtil.readFromJson(filePath); + logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : configurations - " + configurations); + + ISmsProvider msg91SmsProvider = MessageProviderFactory.getMsg91SmsProvider(configurations); + + if (msg91SmsProvider != null) { + return msg91SmsProvider.send(setDefaultCountryCodeIfZero(mobileNumber), code); + } + } + return null; } static String getSmsCode(long nrOfDigits) { diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java index 97399766..406dc4fb 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java @@ -1,5 +1,6 @@ package org.sunbird.sms; + import org.sunbird.sms.amazonsns.AmazonSnsFactory; import org.sunbird.sms.msg91.Msg91SmsProviderFactory; import org.sunbird.sms.provider.ISmsProvider; diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java index 4ed62d51..0ca7cac4 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java @@ -14,4 +14,8 @@ public interface SmsConfigurationType { String CONF_SMS_PROXY_PASSWORD = "sms_proxy_password"; String CONF_AUTH_METHOD_BASIC = "basic_authentication"; String CONF_AUTH_METHOD_INMESSAGE = "in_message_authentication"; + String CONF_AUTH_KEY = "auth_key"; + String CONF_SMS_SENDER = "sender"; + String CONF_SMS_COUNTRY = "country"; + String CONF_SMS_ROUTE = "route"; } diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsFactory.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsFactory.java index 90b51e46..a7e0fc08 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsFactory.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsFactory.java @@ -1,5 +1,6 @@ package org.sunbird.sms.amazonsns; + import org.sunbird.sms.provider.ISmsProvider; import org.sunbird.sms.provider.ISmsProviderFactory; diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java index acf610f1..c099c790 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java @@ -1,5 +1,6 @@ package org.sunbird.sms.msg91; +import com.amazonaws.util.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.StatusLine; @@ -39,9 +40,91 @@ public void configure(Map configurations) { @Override public boolean send(String phoneNumber, String smsText) { - return sendSmsCode(phoneNumber, smsText); + return sendSms(phoneNumber, smsText); } + private boolean sendSms(String mobileNumber, String smsText) { + // Send an SMS + logger.debug("Msg91SmsProvider@Sending " + smsText + " to mobileNumber " + mobileNumber); + + String gateWayUrl = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_URL); + String authKey = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_AUTH_KEY); + String sender = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_SENDER); + String country = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_COUNTRY); + String smsMethodType = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_METHOD_TYPE); + String smsRoute = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_ROUTE); + + logger.debug("Msg91SmsProvider@SMS Provider parameters \n" + + "Gateway - " + gateWayUrl + "\n" + + "authKey - " + authKey + "\n" + + "sender - " + sender + "\n" + + "country - " + country + "\n" + + "smsMethodType - " + smsMethodType + "\n" + + "smsRoute - " + smsRoute + "\n" + ); + + + CloseableHttpClient httpClient = null; + try { + URL smsURL = (gateWayUrl != null && gateWayUrl.length() > 0) ? new URL(gateWayUrl) : null; + + if (smsURL == null) { + logger.error("Msg91SmsProvider@ SMS gateway URL is not configured."); + return false; + } + + httpClient = HttpClients.createDefault(); + + String path = null; + + if (!StringUtils.isNullOrEmpty(gateWayUrl) && !StringUtils.isNullOrEmpty(sender) && !StringUtils.isNullOrEmpty(smsRoute) + && !StringUtils.isNullOrEmpty(mobileNumber) && !StringUtils.isNullOrEmpty(authKey) && !StringUtils.isNullOrEmpty(country) + && !StringUtils.isNullOrEmpty(smsText)) { + path = getCompletePath(gateWayUrl, sender, smsRoute, mobileNumber, authKey, country, smsText); + + logger.debug("Msg91SmsProvider -Executing request - " + path); + + HttpGet httpGet = new HttpGet(path); + + CloseableHttpResponse response = httpClient.execute(httpGet); + StatusLine sl = response.getStatusLine(); + response.close(); + if (sl.getStatusCode() != 200) { + logger.error("SMS code for " + mobileNumber + " could not be sent: " + sl.getStatusCode() + " - " + sl.getReasonPhrase()); + } + return sl.getStatusCode() == 200; + + } else { + logger.debug("Msg91SmsProvider - Some mandatory parameters are empty!"); + return false; + } + } catch (IOException e) { + logger.error(e); + return false; + } finally { + if (httpClient != null) { + try { + httpClient.close(); + } catch (IOException ignore) { + // Ignore ... + } + } + } + + } + + private String getCompletePath(String gateWayUrl, String sender, String smsRoute, String mobileNumber, String authKey, String country, String smsText) { + String completeUrl = gateWayUrl + + "sender=" + sender + + "&route=" + smsRoute + + "&mobiles=" + mobileNumber + + "&authkey=" + authKey + + "&country=" + country + + "&message=" + smsText; + return completeUrl; + } + + private boolean sendSmsCode(String mobileNumber, String smsText) { // Send an SMS logger.debug("Sending " + smsText + " to mobileNumber " + mobileNumber); @@ -166,7 +249,7 @@ private CredentialsProvider getCredentialsProvider(String smsUsr, String smsPwd, private String getPath(String mobileNumber, URL smsURL, String smsText) throws UnsupportedEncodingException { String path = smsURL.getPath(); - if(smsURL.getQuery() != null && smsURL.getQuery().length() > 0) { + if (smsURL.getQuery() != null && smsURL.getQuery().length() > 0) { path += smsURL.getQuery(); } path = path.replaceFirst("\\{message\\}", URLEncoder.encode(smsText, "UTF-8")); diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java index b6e41e70..91dda602 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java @@ -2,5 +2,5 @@ public interface ISmsProvider extends ISmsProviderConfigurations { - boolean send(String phoneNumber,String smsText); + boolean send(String phoneNumber, String smsText); } diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java b/keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java index 98a68c51..e955b40d 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java @@ -24,16 +24,6 @@ public static Map readFromJson(String jsonFile) { e.printStackTrace(); } -// String json = null; -// try { -// JSONParser parser = new JSONParser(); -// //Use JSONObject for simple JSON and JSONArray for array of JSON. -// JSONObject data = (JSONObject) parser.parse(new FileReader(jsonFile));//path to the JSON file. -// json = data.toString(); -// } catch (IOException | ParseException e) { -// e.printStackTrace(); -// } - return map; } From 07b31766ed4d6baba9f40d3176a88c5a8744c8c5 Mon Sep 17 00:00:00 2001 From: shriharsh Date: Fri, 3 Nov 2017 17:17:26 +0530 Subject: [PATCH 3/5] Issue #10 feat: Capturing configuration for SMS provider with POST api --- keycloak/sms-provider/Msg91Creds.json | 8 +- .../keycloak-email-phone-autthenticator.iml | 1 + keycloak/sms-provider/pom.xml | 5 ++ .../KeycloakSmsAuthenticatorUtil.java | 8 +- .../org/sunbird/sms/SmsConfigurationType.java | 4 +- .../sunbird/sms/msg91/Msg91SmsProvider.java | 79 ++++++++++++++++--- .../sunbird/sms/msg91/ProviderDetails.java | 18 +++++ .../main/java/org/sunbird/sms/msg91/Sms.java | 15 ++++ .../main/java/org/sunbird/utils/JsonUtil.java | 8 ++ 9 files changed, 126 insertions(+), 20 deletions(-) create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/ProviderDetails.java create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Sms.java diff --git a/keycloak/sms-provider/Msg91Creds.json b/keycloak/sms-provider/Msg91Creds.json index f674f555..8e96a44d 100644 --- a/keycloak/sms-provider/Msg91Creds.json +++ b/keycloak/sms-provider/Msg91Creds.json @@ -1,8 +1,10 @@ { "auth_key": "181585AvzynW0NSmU59f84bd6", - "sender": "TestSunbird", + "sender": "TesSun", "country": "91", "route": "4", - "sms_method_type": "GET", - "sms_url": "http://api.msg91.com/api/sendhttp.php?" + "sms_method_type": "POST", + "sms_base_url": "http://api.msg91.com/", + "sms_get_url": "api/sendhttp.php?", + "sms_post_url": "api/v2/sendsms" } \ No newline at end of file diff --git a/keycloak/sms-provider/keycloak-email-phone-autthenticator.iml b/keycloak/sms-provider/keycloak-email-phone-autthenticator.iml index 499d7e3f..9063f681 100644 --- a/keycloak/sms-provider/keycloak-email-phone-autthenticator.iml +++ b/keycloak/sms-provider/keycloak-email-phone-autthenticator.iml @@ -57,6 +57,7 @@ + diff --git a/keycloak/sms-provider/pom.xml b/keycloak/sms-provider/pom.xml index 47c17cf8..38dfb19e 100644 --- a/keycloak/sms-provider/pom.xml +++ b/keycloak/sms-provider/pom.xml @@ -86,6 +86,11 @@ aws-java-sdk-sns 1.11.173 + + com.google.code.gson + gson + 2.3.1 + junit junit diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java index d5c11548..301b4eaa 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java @@ -91,10 +91,10 @@ static boolean sendSmsCode(String mobileNumber, String code, AuthenticatorConfig String smsText = createMessage(code, mobileNumber, config); logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : smsText - " + smsText); - Boolean amazonSmsProviderStatus = msgViaAmazonSns(mobileNumber, smsText); - if (amazonSmsProviderStatus != null) return amazonSmsProviderStatus; +// Boolean amazonSmsProviderStatus = msgViaAmazonSns(mobileNumber, smsText); +// if (amazonSmsProviderStatus != null) return amazonSmsProviderStatus; - Boolean msg91SmsProviderStatus = sendViaMsg91(mobileNumber, code); + Boolean msg91SmsProviderStatus = sendViaMsg91(mobileNumber, smsText); if (msg91SmsProviderStatus != null) return msg91SmsProviderStatus; return false; @@ -128,7 +128,7 @@ private static Boolean sendViaMsg91(String mobileNumber, String code) { ISmsProvider msg91SmsProvider = MessageProviderFactory.getMsg91SmsProvider(configurations); if (msg91SmsProvider != null) { - return msg91SmsProvider.send(setDefaultCountryCodeIfZero(mobileNumber), code); + return msg91SmsProvider.send(mobileNumber, code); } } return null; diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java index 0ca7cac4..0dbf41b1 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java @@ -3,7 +3,9 @@ public interface SmsConfigurationType { String CONF_SMS_TOKEN = "token"; String CONF_SMS_SECRET = "secret"; - String CONF_SMS_URL = "sms_url"; + String CONF_SMS_BASE_URL = "sms_base_url"; + String CONF_SMS_GET_URL = "sms_get_url"; + String CONF_SMS_POST_URL = "sms_post_url"; String CONF_SMS_METHOD_TYPE = "sms_method_type"; String CONF_SMS_USERNAME = "sms_username"; String CONF_SMS_PASSWORD = "sms_password"; diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java index c099c790..3e7d2fe6 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java @@ -16,15 +16,19 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.jboss.logging.Logger; +import org.sunbird.keycloak.KeycloakSmsAuthenticatorUtil; import org.sunbird.sms.SMSAuthenticatorUtil; import org.sunbird.sms.SmsConfigurationType; import org.sunbird.sms.provider.ISmsProvider; +import org.sunbird.utils.JsonUtil; import javax.ws.rs.HttpMethod; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; import java.util.Map; public class Msg91SmsProvider implements ISmsProvider { @@ -47,12 +51,15 @@ private boolean sendSms(String mobileNumber, String smsText) { // Send an SMS logger.debug("Msg91SmsProvider@Sending " + smsText + " to mobileNumber " + mobileNumber); - String gateWayUrl = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_URL); + String gateWayUrl = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_BASE_URL); String authKey = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_AUTH_KEY); String sender = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_SENDER); String country = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_COUNTRY); String smsMethodType = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_METHOD_TYPE); String smsRoute = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_ROUTE); + String httpMethod = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_METHOD_TYPE); + String getUrlPoint = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_GET_URL); + String getPostPoint = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_POST_URL); logger.debug("Msg91SmsProvider@SMS Provider parameters \n" + "Gateway - " + gateWayUrl + "\n" + @@ -80,19 +87,67 @@ private boolean sendSms(String mobileNumber, String smsText) { if (!StringUtils.isNullOrEmpty(gateWayUrl) && !StringUtils.isNullOrEmpty(sender) && !StringUtils.isNullOrEmpty(smsRoute) && !StringUtils.isNullOrEmpty(mobileNumber) && !StringUtils.isNullOrEmpty(authKey) && !StringUtils.isNullOrEmpty(country) && !StringUtils.isNullOrEmpty(smsText)) { - path = getCompletePath(gateWayUrl, sender, smsRoute, mobileNumber, authKey, country, smsText); - logger.debug("Msg91SmsProvider -Executing request - " + path); + if (httpMethod.equals(HttpMethod.GET)) { + logger.debug("Inside GET"); + path = getCompletePath(gateWayUrl + getUrlPoint, sender, smsRoute, KeycloakSmsAuthenticatorUtil.setDefaultCountryCodeIfZero(mobileNumber), authKey, country, URLEncoder.encode(smsText, "UTF-8")); - HttpGet httpGet = new HttpGet(path); + logger.debug("Msg91SmsProvider -Executing request - " + path); - CloseableHttpResponse response = httpClient.execute(httpGet); - StatusLine sl = response.getStatusLine(); - response.close(); - if (sl.getStatusCode() != 200) { - logger.error("SMS code for " + mobileNumber + " could not be sent: " + sl.getStatusCode() + " - " + sl.getReasonPhrase()); + HttpGet httpGet = new HttpGet(path); + + CloseableHttpResponse response = httpClient.execute(httpGet); + StatusLine sl = response.getStatusLine(); + response.close(); + if (sl.getStatusCode() != 200) { + logger.error("SMS code for " + mobileNumber + " could not be sent: " + sl.getStatusCode() + " - " + sl.getReasonPhrase()); + } + return sl.getStatusCode() == 200; + } else if (httpMethod.equals(HttpMethod.POST)) { + logger.debug("Inside POST"); + + path = gateWayUrl + getPostPoint; + logger.debug("Msg91SmsProvider -Executing request - " + path); + + HttpPost httpPost = new HttpPost(path); + + //add content-type headers + httpPost.setHeader("content-type", "application/json"); + + //add authkey header + httpPost.setHeader("authkey", authKey); + + List mobileNumbers = new ArrayList<>(); + mobileNumbers.add(mobileNumber); + + //create sms + Sms sms = new Sms(URLEncoder.encode(smsText, "UTF-8"), mobileNumbers); + + List smsList = new ArrayList<>(); + smsList.add(sms); + + //create body + ProviderDetails providerDetails = new ProviderDetails(sender, smsRoute, country, smsList); + + String providerDetailsString = JsonUtil.toJson(providerDetails); + + if (!StringUtils.isNullOrEmpty(providerDetailsString)) { + logger.debug("Msg91SmsProvider - Body - " + providerDetailsString); + + HttpEntity entity = new ByteArrayEntity(providerDetailsString.getBytes("UTF-8")); + httpPost.setEntity(entity); + + CloseableHttpResponse response = httpClient.execute(httpPost); + StatusLine sl = response.getStatusLine(); + response.close(); + if (sl.getStatusCode() != 200) { + logger.error("SMS code for " + mobileNumber + " could not be sent: " + sl.getStatusCode() + " - " + sl.getReasonPhrase()); + } + return sl.getStatusCode() == 200; + } else { + return false; + } } - return sl.getStatusCode() == 200; } else { logger.debug("Msg91SmsProvider - Some mandatory parameters are empty!"); @@ -110,7 +165,7 @@ private boolean sendSms(String mobileNumber, String smsText) { } } } - + return false; } private String getCompletePath(String gateWayUrl, String sender, String smsRoute, String mobileNumber, String authKey, String country, String smsText) { @@ -129,7 +184,7 @@ private boolean sendSmsCode(String mobileNumber, String smsText) { // Send an SMS logger.debug("Sending " + smsText + " to mobileNumber " + mobileNumber); - String smsUrl = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_URL); + String smsUrl = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_BASE_URL); String smsUsr = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_USERNAME); String smsPwd = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_PASSWORD); diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/ProviderDetails.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/ProviderDetails.java new file mode 100644 index 00000000..5668de4d --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/ProviderDetails.java @@ -0,0 +1,18 @@ +package org.sunbird.sms.msg91; + +import java.io.Serializable; +import java.util.List; + +public class ProviderDetails implements Serializable { + private String sender; + private String route; + private String country; + private List sms; + + public ProviderDetails(String sender, String route, String country, List sms) { + this.sender = sender; + this.route = route; + this.country = country; + this.sms = sms; + } +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Sms.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Sms.java new file mode 100644 index 00000000..f5b692c1 --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Sms.java @@ -0,0 +1,15 @@ +package org.sunbird.sms.msg91; + +import java.io.Serializable; +import java.util.List; + +public class Sms implements Serializable{ + + private String message; + private List to; + + public Sms(String message, List to) { + this.message = message; + this.to = to; + } +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java b/keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java index e955b40d..66972a6c 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/utils/JsonUtil.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; import java.io.File; import java.io.IOException; @@ -27,4 +28,11 @@ public static Map readFromJson(String jsonFile) { return map; } + + public static String toJson(Object object) { + Gson gsonObj = new Gson(); + + return gsonObj.toJson(object); + } + } From fb4d9741025b954053a90bef29f8128614aa8801 Mon Sep 17 00:00:00 2001 From: shriharsh Date: Mon, 6 Nov 2017 17:06:17 +0530 Subject: [PATCH 4/5] Issue #10 feat: Refactored the Factory for SMS Providers --- .../KeycloakSmsAuthenticatorUtil.java | 30 +++----------- .../sunbird/sms/MessageProviderFactory.java | 31 -------------- ...torUtil.java => SMSConfigurationUtil.java} | 5 +-- .../sms/SmsConfigurationConstants.java | 23 +++++++++++ .../org/sunbird/sms/SmsConfigurationType.java | 23 ----------- .../sms/amazonsns/AmazonSnsProvider.java | 8 ++-- .../sunbird/sms/msg91/Msg91SmsProvider.java | 40 +++++++++---------- .../sunbird/sms/provider/ISmsProvider.java | 6 ++- .../provider/ISmsProviderConfigurations.java | 7 ---- 9 files changed, 59 insertions(+), 114 deletions(-) delete mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java rename keycloak/sms-provider/src/main/java/org/sunbird/sms/{SMSAuthenticatorUtil.java => SMSConfigurationUtil.java} (86%) create mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationConstants.java delete mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java delete mode 100644 keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderConfigurations.java diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java index 301b4eaa..f8e3dba4 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/keycloak/KeycloakSmsAuthenticatorUtil.java @@ -4,7 +4,7 @@ import org.jboss.logging.Logger; import org.keycloak.models.AuthenticatorConfigModel; import org.keycloak.models.UserModel; -import org.sunbird.sms.MessageProviderFactory; +import org.sunbird.sms.msg91.Msg91SmsProviderFactory; import org.sunbird.sms.provider.ISmsProvider; import org.sunbird.utils.JsonUtil; @@ -91,33 +91,13 @@ static boolean sendSmsCode(String mobileNumber, String code, AuthenticatorConfig String smsText = createMessage(code, mobileNumber, config); logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : smsText - " + smsText); -// Boolean amazonSmsProviderStatus = msgViaAmazonSns(mobileNumber, smsText); -// if (amazonSmsProviderStatus != null) return amazonSmsProviderStatus; - - Boolean msg91SmsProviderStatus = sendViaMsg91(mobileNumber, smsText); + Boolean msg91SmsProviderStatus = send(mobileNumber, smsText); if (msg91SmsProviderStatus != null) return msg91SmsProviderStatus; return false; } - private static Boolean msgViaAmazonSns(String mobileNumber, String smsText) { - String filePath = new File(KeycloakSmsAuthenticatorConstants.AMAZON_SNS_PROVIDER_CONFIGURATIONS_PATH).getAbsolutePath(); - logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : filePath - " + filePath); - - if (!StringUtils.isNullOrEmpty(filePath)) { - Map configurations = JsonUtil.readFromJson(filePath); - logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : configurations - " + configurations); - - ISmsProvider amazonSmsProvider = MessageProviderFactory.getSnsClient(configurations); - - if (amazonSmsProvider != null) { - return amazonSmsProvider.send(setDefaultCountryCodeIfZero(mobileNumber), smsText); - } - } - return null; - } - - private static Boolean sendViaMsg91(String mobileNumber, String code) { + private static Boolean send(String mobileNumber, String code) { String filePath = new File(KeycloakSmsAuthenticatorConstants.MSG91_SMS_PROVIDER_CONFIGURATIONS_PATH).getAbsolutePath(); logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : filePath - " + filePath); @@ -125,7 +105,9 @@ private static Boolean sendViaMsg91(String mobileNumber, String code) { Map configurations = JsonUtil.readFromJson(filePath); logger.debug("KeycloakSmsAuthenticatorUtil@sendSmsCode : configurations - " + configurations); - ISmsProvider msg91SmsProvider = MessageProviderFactory.getMsg91SmsProvider(configurations); + Msg91SmsProviderFactory msg91SmsProviderFactory = new Msg91SmsProviderFactory(); + + ISmsProvider msg91SmsProvider = msg91SmsProviderFactory.create(configurations); if (msg91SmsProvider != null) { return msg91SmsProvider.send(mobileNumber, code); diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java deleted file mode 100644 index 406dc4fb..00000000 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/MessageProviderFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.sunbird.sms; - - -import org.sunbird.sms.amazonsns.AmazonSnsFactory; -import org.sunbird.sms.msg91.Msg91SmsProviderFactory; -import org.sunbird.sms.provider.ISmsProvider; - -import java.util.Map; - -public class MessageProviderFactory { - - private static Msg91SmsProviderFactory msg91SmsProviderFactory; - private static AmazonSnsFactory amazonSnsFactory = null; - - - public static ISmsProvider getMsg91SmsProvider(Map configurations) { - if (msg91SmsProviderFactory == null) { - msg91SmsProviderFactory = new Msg91SmsProviderFactory(); - } - - return msg91SmsProviderFactory.create(configurations); - } - - - public static ISmsProvider getSnsClient(Map configurations) { - if (amazonSnsFactory == null) { - amazonSnsFactory = new AmazonSnsFactory(); - } - return amazonSnsFactory.create(configurations); - } -} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/SMSAuthenticatorUtil.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SMSConfigurationUtil.java similarity index 86% rename from keycloak/sms-provider/src/main/java/org/sunbird/sms/SMSAuthenticatorUtil.java rename to keycloak/sms-provider/src/main/java/org/sunbird/sms/SMSConfigurationUtil.java index 4bec7128..fe860d12 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/SMSAuthenticatorUtil.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SMSConfigurationUtil.java @@ -2,10 +2,7 @@ import java.util.Map; -/** - * Created by joris on 18/11/2016. - */ -public class SMSAuthenticatorUtil { +public class SMSConfigurationUtil { public static String getConfigString(Map config, String configName) { return getConfigString(config, configName, null); diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationConstants.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationConstants.java new file mode 100644 index 00000000..7c38711a --- /dev/null +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationConstants.java @@ -0,0 +1,23 @@ +package org.sunbird.sms; + +public final class SmsConfigurationConstants { + public static final String CONF_SMS_TOKEN = "token"; + public static final String CONF_SMS_SECRET = "secret"; + public static final String CONF_SMS_BASE_URL = "sms_base_url"; + public static final String CONF_SMS_GET_URL = "sms_get_url"; + public static final String CONF_SMS_POST_URL = "sms_post_url"; + public static final String CONF_SMS_METHOD_TYPE = "sms_method_type"; + public static final String CONF_SMS_USERNAME = "sms_username"; + public static final String CONF_SMS_PASSWORD = "sms_password"; + public static final String CONF_SMS_AUTHTYPE = "sms_authtype"; + public static final String CONF_SMS_CONTENT_TYPE = "sms_content_type"; + public static final String CONF_SMS_PROXY_URL = "sms_proxy_url"; + public static final String CONF_SMS_PROXY_USERNAME = "sms_proxy_username"; + public static final String CONF_SMS_PROXY_PASSWORD = "sms_proxy_password"; + public static final String CONF_AUTH_METHOD_BASIC = "basic_authentication"; + public static final String CONF_AUTH_METHOD_INMESSAGE = "in_message_authentication"; + public static final String CONF_AUTH_KEY = "auth_key"; + public static final String CONF_SMS_SENDER = "sender"; + public static final String CONF_SMS_COUNTRY = "country"; + public static final String CONF_SMS_ROUTE = "route"; +} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java deleted file mode 100644 index 0dbf41b1..00000000 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/SmsConfigurationType.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.sunbird.sms; - -public interface SmsConfigurationType { - String CONF_SMS_TOKEN = "token"; - String CONF_SMS_SECRET = "secret"; - String CONF_SMS_BASE_URL = "sms_base_url"; - String CONF_SMS_GET_URL = "sms_get_url"; - String CONF_SMS_POST_URL = "sms_post_url"; - String CONF_SMS_METHOD_TYPE = "sms_method_type"; - String CONF_SMS_USERNAME = "sms_username"; - String CONF_SMS_PASSWORD = "sms_password"; - String CONF_SMS_AUTHTYPE = "sms_authtype"; - String CONF_SMS_CONTENT_TYPE = "sms_content_type"; - String CONF_SMS_PROXY_URL = "sms_proxy_url"; - String CONF_SMS_PROXY_USERNAME = "sms_proxy_username"; - String CONF_SMS_PROXY_PASSWORD = "sms_proxy_password"; - String CONF_AUTH_METHOD_BASIC = "basic_authentication"; - String CONF_AUTH_METHOD_INMESSAGE = "in_message_authentication"; - String CONF_AUTH_KEY = "auth_key"; - String CONF_SMS_SENDER = "sender"; - String CONF_SMS_COUNTRY = "country"; - String CONF_SMS_ROUTE = "route"; -} diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsProvider.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsProvider.java index 632d9598..314ba57b 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsProvider.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/amazonsns/AmazonSnsProvider.java @@ -4,8 +4,8 @@ import com.amazonaws.services.sns.model.PublishRequest; import org.jboss.logging.Logger; import org.sunbird.aws.snsclient.SnsClientFactory; -import org.sunbird.sms.SMSAuthenticatorUtil; -import org.sunbird.sms.SmsConfigurationType; +import org.sunbird.sms.SMSConfigurationUtil; +import org.sunbird.sms.SmsConfigurationConstants; import org.sunbird.sms.provider.ISmsProvider; import java.util.HashMap; @@ -26,8 +26,8 @@ public boolean send(String phoneNumber, String smsText) { .withStringValue("HomeOffice") .withDataType("String")); - String clientToken = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_TOKEN); - String clientSecret = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_SECRET); + String clientToken = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_TOKEN); + String clientSecret = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_SECRET); logger.debug("AmazonSnsProvider@send : clientToken - " + clientToken + " & clientSecret - " + clientSecret); diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java index 3e7d2fe6..13f27cb4 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/msg91/Msg91SmsProvider.java @@ -17,8 +17,8 @@ import org.apache.http.impl.client.HttpClients; import org.jboss.logging.Logger; import org.sunbird.keycloak.KeycloakSmsAuthenticatorUtil; -import org.sunbird.sms.SMSAuthenticatorUtil; -import org.sunbird.sms.SmsConfigurationType; +import org.sunbird.sms.SMSConfigurationUtil; +import org.sunbird.sms.SmsConfigurationConstants; import org.sunbird.sms.provider.ISmsProvider; import org.sunbird.utils.JsonUtil; @@ -51,15 +51,15 @@ private boolean sendSms(String mobileNumber, String smsText) { // Send an SMS logger.debug("Msg91SmsProvider@Sending " + smsText + " to mobileNumber " + mobileNumber); - String gateWayUrl = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_BASE_URL); - String authKey = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_AUTH_KEY); - String sender = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_SENDER); - String country = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_COUNTRY); - String smsMethodType = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_METHOD_TYPE); - String smsRoute = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_ROUTE); - String httpMethod = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_METHOD_TYPE); - String getUrlPoint = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_GET_URL); - String getPostPoint = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_POST_URL); + String gateWayUrl = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_BASE_URL); + String authKey = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_AUTH_KEY); + String sender = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_SENDER); + String country = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_COUNTRY); + String smsMethodType = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_METHOD_TYPE); + String smsRoute = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_ROUTE); + String httpMethod = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_METHOD_TYPE); + String getUrlPoint = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_GET_URL); + String getPostPoint = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_POST_URL); logger.debug("Msg91SmsProvider@SMS Provider parameters \n" + "Gateway - " + gateWayUrl + "\n" + @@ -184,14 +184,14 @@ private boolean sendSmsCode(String mobileNumber, String smsText) { // Send an SMS logger.debug("Sending " + smsText + " to mobileNumber " + mobileNumber); - String smsUrl = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_BASE_URL); - String smsUsr = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_USERNAME); - String smsPwd = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_PASSWORD); + String smsUrl = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_BASE_URL); + String smsUsr = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_USERNAME); + String smsPwd = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_PASSWORD); - String proxyUrl = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_PROXY_URL); - String proxyUsr = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_PROXY_USERNAME); - String proxyPwd = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_PROXY_PASSWORD); - String contentType = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_CONTENT_TYPE); + String proxyUrl = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_PROXY_URL); + String proxyUsr = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_PROXY_USERNAME); + String proxyPwd = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_PROXY_PASSWORD); + String contentType = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_CONTENT_TYPE); CloseableHttpClient httpClient = null; try { @@ -205,7 +205,7 @@ private boolean sendSmsCode(String mobileNumber, String smsText) { CredentialsProvider credsProvider; - if (SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_AUTHTYPE, "").equals(SmsConfigurationType.CONF_AUTH_METHOD_INMESSAGE)) { + if (SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_AUTHTYPE, "").equals(SmsConfigurationConstants.CONF_AUTH_METHOD_INMESSAGE)) { credsProvider = getCredentialsProvider(null, null, proxyUsr, proxyPwd, smsURL, proxyURL); } else { credsProvider = getCredentialsProvider(smsUsr, smsPwd, proxyUsr, proxyPwd, smsURL, proxyURL); @@ -223,7 +223,7 @@ private boolean sendSmsCode(String mobileNumber, String smsText) { .setProxy(proxy) .build(); - String httpMethod = SMSAuthenticatorUtil.getConfigString(configurations, SmsConfigurationType.CONF_SMS_METHOD_TYPE); + String httpMethod = SMSConfigurationUtil.getConfigString(configurations, SmsConfigurationConstants.CONF_SMS_METHOD_TYPE); if (httpMethod.equals(HttpMethod.GET)) { String path = getPath(mobileNumber, smsURL, smsText); diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java index 91dda602..987d926a 100644 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java +++ b/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProvider.java @@ -1,6 +1,10 @@ package org.sunbird.sms.provider; -public interface ISmsProvider extends ISmsProviderConfigurations { +import java.util.Map; + +public interface ISmsProvider { + + void configure(Map configurations); boolean send(String phoneNumber, String smsText); } diff --git a/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderConfigurations.java b/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderConfigurations.java deleted file mode 100644 index 1944bc1c..00000000 --- a/keycloak/sms-provider/src/main/java/org/sunbird/sms/provider/ISmsProviderConfigurations.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.sunbird.sms.provider; - -import java.util.Map; - -public interface ISmsProviderConfigurations { - void configure(Map configurations); -} From 30c579676e6a998c58f8363070f4d4f7af2ac824 Mon Sep 17 00:00:00 2001 From: shriharsh Date: Mon, 6 Nov 2017 17:18:03 +0530 Subject: [PATCH 5/5] Issue #10 feat: Credentials are removed from project --- keycloak/sms-provider/Msg91Creds.json | 10 ---------- keycloak/sms-provider/awsSnsCreds.json | 4 ---- 2 files changed, 14 deletions(-) delete mode 100644 keycloak/sms-provider/Msg91Creds.json delete mode 100644 keycloak/sms-provider/awsSnsCreds.json diff --git a/keycloak/sms-provider/Msg91Creds.json b/keycloak/sms-provider/Msg91Creds.json deleted file mode 100644 index 8e96a44d..00000000 --- a/keycloak/sms-provider/Msg91Creds.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "auth_key": "181585AvzynW0NSmU59f84bd6", - "sender": "TesSun", - "country": "91", - "route": "4", - "sms_method_type": "POST", - "sms_base_url": "http://api.msg91.com/", - "sms_get_url": "api/sendhttp.php?", - "sms_post_url": "api/v2/sendsms" -} \ No newline at end of file diff --git a/keycloak/sms-provider/awsSnsCreds.json b/keycloak/sms-provider/awsSnsCreds.json deleted file mode 100644 index 4887665e..00000000 --- a/keycloak/sms-provider/awsSnsCreds.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "token": "AKIAI4XIRSGGFIW5VOKQ", - "secret": "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" -} \ No newline at end of file