33import com .github .scribejava .core .extractors .OAuth2AccessTokenJsonExtractor ;
44import com .github .scribejava .core .model .OAuth2AccessTokenErrorResponse ;
55import com .github .scribejava .core .oauth2 .OAuth2Error ;
6-
7- import java .util .regex .Pattern ;
6+ import java .io .IOException ;
7+ import java .util .List ;
8+ import java .util .Map ;
89
910public class FitBitJsonTokenExtractor extends OAuth2AccessTokenJsonExtractor {
1011
11- private static final Pattern USER_ID_REGEX_PATTERN = Pattern .compile ("\" user_id\" \\ s*:\\ s*\" (\\ S*?)\" " );
12- private static final Pattern ERROR_REGEX_PATTERN = Pattern .compile ("\" errorType\" \\ s*:\\ s*\" (\\ S*?)\" " );
13- private static final Pattern ERROR_DESCRIPTION_REGEX_PATTERN = Pattern .compile ("\" message\" \\ s*:\\ s*\" ([^\" ]*?)\" " );
1412 protected FitBitJsonTokenExtractor () {
1513 }
1614
@@ -25,27 +23,29 @@ public static FitBitJsonTokenExtractor instance() {
2523
2624 @ Override
2725 protected FitBitOAuth2AccessToken createToken (String accessToken , String tokenType , Integer expiresIn ,
28- String refreshToken , String scope , String response ) {
26+ String refreshToken , String scope , Map < String , String > response , String rawResponse ) {
2927 return new FitBitOAuth2AccessToken (accessToken , tokenType , expiresIn , refreshToken , scope ,
30- extractParameter ( response , USER_ID_REGEX_PATTERN , false ), response );
28+ response . get ( "user_id" ), rawResponse );
3129 }
3230
3331 /**
3432 * Related documentation: https://dev.fitbit.com/build/reference/web-api/oauth2/
3533 */
3634 @ Override
37- public void generateError (String response ) {
38- final String errorInString = extractParameter (response , ERROR_REGEX_PATTERN , true );
39- final String errorDescription = extractParameter (response , ERROR_DESCRIPTION_REGEX_PATTERN , false );
35+ public void generateError (String rawResponse ) throws IOException {
36+ @ SuppressWarnings ("unchecked" )
37+ final Map <String , List <Map <String , String >>> response = OAuth2AccessTokenJsonExtractor .OBJECT_MAPPER
38+ .readValue (rawResponse , Map .class );
4039
40+ final Map <String , String > errorResponse = response .get ("errors" ).get (0 );
4141 OAuth2Error errorCode ;
4242 try {
43- errorCode = OAuth2Error .parseFrom (errorInString );
43+ errorCode = OAuth2Error .parseFrom (extractRequiredParameter ( errorResponse , "errorType" , rawResponse ) );
4444 } catch (IllegalArgumentException iaE ) {
4545 //non oauth standard error code
4646 errorCode = null ;
4747 }
4848
49- throw new OAuth2AccessTokenErrorResponse (errorCode , errorDescription , null , response );
49+ throw new OAuth2AccessTokenErrorResponse (errorCode , errorResponse . get ( "message" ) , null , rawResponse );
5050 }
5151}
0 commit comments