You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by dh...@apache.org on 2015/09/18 09:43:08 UTC

camel git commit: CAMEL-8898: Added error handling for new LinkedIn OAuth behavior, also added w_share scope

Repository: camel
Updated Branches:
  refs/heads/master 30c735106 -> df556c4a5


CAMEL-8898: Added error handling for new LinkedIn OAuth behavior, also added w_share scope


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

Branch: refs/heads/master
Commit: df556c4a58b9d04aad64a8ce761bbfef8b75da3a
Parents: 30c7351
Author: Dhiraj Bokde <dh...@yahoo.com>
Authored: Fri Sep 18 00:42:58 2015 -0700
Committer: Dhiraj Bokde <dh...@yahoo.com>
Committed: Fri Sep 18 00:42:58 2015 -0700

----------------------------------------------------------------------
 .../api/LinkedInOAuthRequestFilter.java         | 27 +++++++++++++++-----
 .../component/linkedin/api/OAuthScope.java      |  4 ++-
 2 files changed, 24 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/df556c4a/components/camel-linkedin/camel-linkedin-api/src/main/java/org/apache/camel/component/linkedin/api/LinkedInOAuthRequestFilter.java
----------------------------------------------------------------------
diff --git a/components/camel-linkedin/camel-linkedin-api/src/main/java/org/apache/camel/component/linkedin/api/LinkedInOAuthRequestFilter.java b/components/camel-linkedin/camel-linkedin-api/src/main/java/org/apache/camel/component/linkedin/api/LinkedInOAuthRequestFilter.java
index d625bc5..7c5def9 100644
--- a/components/camel-linkedin/camel-linkedin-api/src/main/java/org/apache/camel/component/linkedin/api/LinkedInOAuthRequestFilter.java
+++ b/components/camel-linkedin/camel-linkedin-api/src/main/java/org/apache/camel/component/linkedin/api/LinkedInOAuthRequestFilter.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.linkedin.api;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URL;
+import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.security.SecureRandom;
 import java.util.HashMap;
@@ -131,8 +132,8 @@ public final class LinkedInOAuthRequestFilter implements ClientRequestFilter {
 
     @SuppressWarnings("deprecation")
     private String getRefreshToken() {
-        // authorize application on user's behalf
-        webClient.getOptions().setRedirectEnabled(true);
+        // disable redirect to avoid loading error redirect URL
+        webClient.getOptions().setRedirectEnabled(false);
 
         try {
             final String csrfId = String.valueOf(new SecureRandom().nextLong());
@@ -157,7 +158,24 @@ public final class LinkedInOAuthRequestFilter implements ClientRequestFilter {
                 url = String.format(AUTHORIZATION_URL_WITH_SCOPE, oAuthParams.getClientId(), csrfId,
                     builder.toString(), encodedRedirectUri);
             }
-            final HtmlPage authPage = webClient.getPage(url);
+            HtmlPage authPage;
+            try {
+                authPage = webClient.getPage(url);
+            } catch (FailingHttpStatusCodeException e) {
+                // only handle errors returned with redirects
+                if (e.getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY) {
+                    final URL location = new URL(e.getResponse().getResponseHeaderValue(HttpHeaders.LOCATION));
+                    final String locationQuery = location.getQuery();
+                    if (locationQuery != null && locationQuery.contains("error=")) {
+                        throw new IOException(URLDecoder.decode(locationQuery).replaceAll("&", ", "));
+                    } else {
+                        // follow the redirect to login form
+                        authPage = webClient.getPage(location);
+                    }
+                } else {
+                    throw e;
+                }
+            }
 
             // look for <div role="alert">
             final HtmlDivision div = authPage.getFirstByXPath("//div[@role='alert']");
@@ -173,9 +191,6 @@ public final class LinkedInOAuthRequestFilter implements ClientRequestFilter {
             password.setText(oAuthParams.getUserPassword());
             final HtmlSubmitInput submitInput = loginForm.getInputByName("authorize");
 
-            // disable redirect to avoid loading redirect URL
-            webClient.getOptions().setRedirectEnabled(false);
-
             // validate CSRF and get authorization code
             String redirectQuery;
             try {

http://git-wip-us.apache.org/repos/asf/camel/blob/df556c4a/components/camel-linkedin/camel-linkedin-api/src/main/java/org/apache/camel/component/linkedin/api/OAuthScope.java
----------------------------------------------------------------------
diff --git a/components/camel-linkedin/camel-linkedin-api/src/main/java/org/apache/camel/component/linkedin/api/OAuthScope.java b/components/camel-linkedin/camel-linkedin-api/src/main/java/org/apache/camel/component/linkedin/api/OAuthScope.java
index aadf353..3549061 100644
--- a/components/camel-linkedin/camel-linkedin-api/src/main/java/org/apache/camel/component/linkedin/api/OAuthScope.java
+++ b/components/camel-linkedin/camel-linkedin-api/src/main/java/org/apache/camel/component/linkedin/api/OAuthScope.java
@@ -26,10 +26,12 @@ public enum OAuthScope {
     R_EMAILADDRESS("r_emailaddress"),
     R_NETWORK("r_network"),
     R_CONTACTINFO("r_contactinfo"),
+    @Deprecated // use W_SHARE instead
     RW_NUS("rw_nus"),
     RW_COMPANY_ADMIN("rw_company_admin"),
     RW_GROUPS("rw_groups"),
-    W_MESSAGES("w_messages");
+    W_MESSAGES("w_messages"),
+    W_SHARE("w_share");
 
     private final String value;