diff --git a/src/main/java/org/scribe/extractors/TokenExtractor20Impl.java b/src/main/java/org/scribe/extractors/TokenExtractor20Impl.java index 5753f98..cf75b13 100644 --- a/src/main/java/org/scribe/extractors/TokenExtractor20Impl.java +++ b/src/main/java/org/scribe/extractors/TokenExtractor20Impl.java @@ -12,7 +12,7 @@ import org.scribe.utils.*; */ public class TokenExtractor20Impl implements AccessTokenExtractor { - private static final String TOKEN_REGEX = "access_token=(\\S*?)(&(\\S*))?"; + private static final String TOKEN_REGEX = "access_token=([^&]+)"; private static final String EMPTY_SECRET = ""; /** @@ -23,7 +23,7 @@ public class TokenExtractor20Impl implements AccessTokenExtractor Preconditions.checkEmptyString(response, "Response body is incorrect. Can't extract a token from an empty string"); Matcher matcher = Pattern.compile(TOKEN_REGEX).matcher(response); - if (matcher.matches()) + if (matcher.find()) { String token = URLUtils.formURLDecode(matcher.group(1)); return new Token(token, EMPTY_SECRET, response); diff --git a/src/test/java/org/scribe/extractors/TokenExtractor20Test.java b/src/test/java/org/scribe/extractors/TokenExtractor20Test.java index 17f1a01..0fde22f 100644 --- a/src/test/java/org/scribe/extractors/TokenExtractor20Test.java +++ b/src/test/java/org/scribe/extractors/TokenExtractor20Test.java @@ -35,6 +35,15 @@ public class TokenExtractor20Test assertEquals("", extracted.getSecret()); } + @Test + public void shouldExtractTokenFromResponseWithManyParameters() + { + String response = "access_token=foo1234&other_stuff=yeah_we_have_this_too&number=42"; + Token extracted = extractor.extract(response); + assertEquals("foo1234", extracted.getToken()); + assertEquals("", extracted.getSecret()); + } + @Test(expected = OAuthException.class) public void shouldThrowExceptionIfTokenIsAbsent() {