Authentication : provide a way to use refresh_token mode in addition to 
password method


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/d945b860
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/d945b860
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/d945b860

Branch: refs/heads/master
Commit: d945b860ee151d1d5a123e4ce4326c6d96a6708d
Parents: 2714b4b
Author: Jaira abderrahim <abderrahim.jaira.exte...@capgemini.com>
Authored: Mon Feb 6 15:35:36 2017 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Tue Feb 7 18:28:19 2017 +0100

----------------------------------------------------------------------
 .../camel-salesforce-component/README.md        |  3 +-
 .../salesforce/SalesforceLoginConfig.java       | 23 +++++++++++++
 .../salesforce/internal/SalesforceSession.java  | 21 +++++++++---
 .../component/salesforce/LoginConfigHelper.java | 36 ++++++++++++++------
 .../SalesforceComponentConfiguration.java       | 12 +++++++
 5 files changed, 79 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/d945b860/components/camel-salesforce/camel-salesforce-component/README.md
----------------------------------------------------------------------
diff --git a/components/camel-salesforce/camel-salesforce-component/README.md 
b/components/camel-salesforce/camel-salesforce-component/README.md
index ef3dc12..44285b2 100644
--- a/components/camel-salesforce/camel-salesforce-component/README.md
+++ b/components/camel-salesforce/camel-salesforce-component/README.md
@@ -88,7 +88,7 @@ Install the Warehouse package, tested with _Spring 2013_ 
(version 1.2) that can
 
 You'll need to access a Merchandise record and run a `Test Report` in order 
for them to appear in _Recent Items_ and _Recent Reports_. Do this by accessing 
_Warehouse_ application from the menu in the top right, and selecting 
_Merchandise_ click _Go!_ (preselected is View: _All_) and click on the single 
Merchandise item available. Next go to Reports and select and run _Test Report_ 
from _Test Reports_. This is needed by the integration tests as they access 
recent items and recently run reports.
 
-Create `Camel` connected application by selecting under _Apps_ in _Build_ and 
_Create_ sections by clicking _New_ in _Connected Apps_ section. Fill in the 
required fields and in the _API (Enable OAuth Settings)_ section thick _Enable 
OAuth Settings_ and move all scopes from _Available OAuth Scopes_ to _Selected 
OAuth Scopes_. For _Callback URL_ you can use any URL it's not needed by the 
REST API used by the Camel Salesforce component. Make note of _Consumer Key_ 
and _Consumer Secret_ you'll need to specify them in 
`test-salesforce-login.properties`, more on that below.
+Create `Camel` connected application by selecting under _Apps_ in _Build_ and 
_Create_ sections by clicking _New_ in _Connected Apps_ section. Fill in the 
required fields and in the _API (Enable OAuth Settings)_ section thick _Enable 
OAuth Settings_ and move all scopes from _Available OAuth Scopes_ to _Selected 
OAuth Scopes_. For _Callback URL_ you can use any URL it's not needed by the 
REST API used by the Camel Salesforce component. Make note of _Consumer Key_ 
and _Consumer Secret_, or if your partner provide just _Consumer Refresh Token_ 
you'll need to specify them in `test-salesforce-login.properties`,  more on 
that below.
 
 Next enable relaxed IP restrictions, by editing the policy of the _Camel_ 
connected application in _Connected Apps_ under _Administer_ and _Manage Apps_ 
pick _Relax IP restrictions_ for _IP Relaxation_.  
 
@@ -96,6 +96,7 @@ Create `test-salesforce-login.properties` in 
`camel-salesforce` directory (one u
 
     clientId=<Consumer Key of the `Camel` connected App>
     clientSecret=<Consumer Secret of the `Camel` connected app>
+    refreshToken=<Consumer Refresh Token of the `Camel` connected app>
     userName=<Username of the user with the `System Administrator With Hard 
Delete` profile>
     password=<Password of the above user>
     loginUrl=https://login.salesforce.com/

http://git-wip-us.apache.org/repos/asf/camel/blob/d945b860/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceLoginConfig.java
----------------------------------------------------------------------
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceLoginConfig.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceLoginConfig.java
index f363468..7e1c365 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceLoginConfig.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceLoginConfig.java
@@ -26,6 +26,7 @@ public class SalesforceLoginConfig {
     private String loginUrl;
     private String clientId;
     private String clientSecret;
+    private String refreshToken;
     private String userName;
     private String password;
     // allow lazy login into Salesforce
@@ -48,6 +49,16 @@ public class SalesforceLoginConfig {
         this.lazyLogin = lazyLogin;
     }
 
+    public SalesforceLoginConfig(String loginUrl,
+            String clientId, String clientSecret,
+            String refreshToken, boolean lazyLogin) {
+        this.loginUrl = loginUrl;
+        this.clientId = clientId;
+        this.clientSecret = clientSecret;
+        this.refreshToken = refreshToken;
+        this.lazyLogin = lazyLogin;
+    }
+
     public String getLoginUrl() {
         return loginUrl;
     }
@@ -81,6 +92,18 @@ public class SalesforceLoginConfig {
         this.clientSecret = clientSecret;
     }
 
+
+    public String getRefreshToken() {
+        return refreshToken;
+    }
+
+    /**
+     * Salesforce connected application Consumer token
+     */
+    public void setRefreshToken(String refreshToken) {
+        this.refreshToken = refreshToken;
+    }
+
     public String getUserName() {
         return userName;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/d945b860/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java
----------------------------------------------------------------------
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java
 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java
index ae0d13b..22e0d14 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java
@@ -72,8 +72,13 @@ public class SalesforceSession implements Service {
         ObjectHelper.notNull(config.getLoginUrl(), "loginUrl");
         ObjectHelper.notNull(config.getClientId(), "clientId");
         ObjectHelper.notNull(config.getClientSecret(), "clientSecret");
-        ObjectHelper.notNull(config.getUserName(), "userName");
-        ObjectHelper.notNull(config.getPassword(), "password");
+
+        if (config.getRefreshToken() == null) {
+            ObjectHelper.notNull(config.getUserName(), "userName");
+            ObjectHelper.notNull(config.getPassword(), "password");
+        } else {
+            ObjectHelper.notNull(config.getRefreshToken(), "refreshToken");
+        }
 
         this.httpClient = httpClient;
         this.timeout = timeout;
@@ -132,13 +137,19 @@ public class SalesforceSession implements Service {
         LOG.info("Login user {} at Salesforce loginUrl: {}", 
config.getUserName(), loginUrl);
         final Fields fields = new Fields(true);
 
-        fields.put("grant_type", "password");
         fields.put("client_id", config.getClientId());
         fields.put("client_secret", config.getClientSecret());
-        fields.put("username", config.getUserName());
-        fields.put("password", config.getPassword());
         fields.put("format", "json");
 
+        if (config.getRefreshToken() == null) {
+            fields.put("grant_type", "password");
+            fields.put("username", config.getUserName());
+            fields.put("password", config.getPassword());
+        } else {
+            fields.put("grant_type", "refresh_token");
+            fields.put("refresh_token", config.getRefreshToken());
+        }
+
         final Request post;
         if (conversation == null) {
             post = httpClient.POST(loginUrl);

http://git-wip-us.apache.org/repos/asf/camel/blob/d945b860/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/LoginConfigHelper.java
----------------------------------------------------------------------
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/LoginConfigHelper.java
 
b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/LoginConfigHelper.java
index 28c6a5b..7a51470 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/LoginConfigHelper.java
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/LoginConfigHelper.java
@@ -34,28 +34,44 @@ public class LoginConfigHelper extends Assert {
         Properties properties = new Properties();
         InputStream stream = null;
         try {
+            final SalesforceLoginConfig config;
             stream = new FileInputStream(TEST_LOGIN_PROPERTIES);
             properties.load(stream);
 
-            final SalesforceLoginConfig config = new SalesforceLoginConfig(
-                properties.getProperty("loginUrl", 
SalesforceLoginConfig.DEFAULT_LOGIN_URL),
-                properties.getProperty("clientId"),
-                properties.getProperty("clientSecret"),
-                properties.getProperty("userName"),
-                properties.getProperty("password"),
-                Boolean.parseBoolean(properties.getProperty("lazyLogin", 
"false")));
+            if (properties.getProperty("refreshToken")== null) {
+                config = new SalesforceLoginConfig(
+                        properties.getProperty("loginUrl", 
SalesforceLoginConfig.DEFAULT_LOGIN_URL),
+                        properties.getProperty("clientId"),
+                        properties.getProperty("clientSecret"),
+                        properties.getProperty("userName"),
+                        properties.getProperty("password"),
+                        
Boolean.parseBoolean(properties.getProperty("lazyLogin", "false")));
+            } else {
+                config = new SalesforceLoginConfig(
+                        properties.getProperty("loginUrl", 
SalesforceLoginConfig.DEFAULT_LOGIN_URL),
+                        properties.getProperty("clientId"), //
+                        properties.getProperty("clientSecret"), //
+                        properties.getProperty("refreshToken"), //
+                        
Boolean.parseBoolean(properties.getProperty("lazyLogin", "false")));
+            }
+
 
             assertNotNull("Null loginUrl", config.getLoginUrl());
             assertNotNull("Null clientId", config.getClientId());
             assertNotNull("Null clientSecret", config.getClientSecret());
-            assertNotNull("Null userName", config.getUserName());
-            assertNotNull("Null password", config.getPassword());
+            if (properties.getProperty("refreshToken")== null) {
+                assertNotNull("Null userName", config.getUserName());
+                assertNotNull("Null password", config.getPassword());
+            } else {
+                assertNotNull("Null refreshToken", config.getRefreshToken());
+            }
+
 
             return config;
 
         } catch (FileNotFoundException e) {
             throw new FileNotFoundException("Create a properties file named "
-                + TEST_LOGIN_PROPERTIES + " with clientId, clientSecret, 
userName, and password"
+                + TEST_LOGIN_PROPERTIES + " with clientId, clientSecret, 
userName, and password or with clientId, clientSecret and refreshToken"
                 + " for a Salesforce account with Merchandise and Invoice 
objects from Salesforce Guides.");
         } finally {
             if (stream != null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/d945b860/platforms/spring-boot/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
index 9a296f7..55e2279 100644
--- 
a/platforms/spring-boot/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java
@@ -832,6 +832,10 @@ public class SalesforceComponentConfiguration {
          */
         private String clientSecret;
         /**
+         * Salesforce connected application Consumer token
+         */
+        private String refreshToken;
+        /**
          * Salesforce account user name
          */
         private String userName;
@@ -870,6 +874,14 @@ public class SalesforceComponentConfiguration {
             this.clientSecret = clientSecret;
         }
 
+        public String getRefreshToken() {
+            return refreshToken;
+        }
+
+        public void setRefreshToken(String refreshToken) {
+            this.refreshToken = refreshToken;
+        }
+
         public String getUserName() {
             return userName;
         }

Reply via email to