handle_access_token_response library
Functions
Credentials handleAccessTokenResponse(Response response, Uri tokenEndpoint, DateTime startTime, List<String> scopes) #
Handles a response from the authorization server that contains an access token. This response format is common across several different components of the OAuth2 flow.
Credentials handleAccessTokenResponse( http.Response response, Uri tokenEndpoint, DateTime startTime, List<String> scopes) { if (response.statusCode != 200) _handleErrorResponse(response, tokenEndpoint); void validate(bool condition, String message) => _validate(response, tokenEndpoint, condition, message); var contentType = response.headers['content-type']; if (contentType != null) { contentType = ContentType.parse(contentType); } validate(contentType != null && contentType.value == "application/json", 'content-type was "$contentType", expected "application/json"'); var parameters; try { parameters = JSON.parse(response.body); } catch (e) { // TODO(nweiz): narrow this catch clause once issue 6775 is fixed. validate(false, 'invalid JSON'); } for (var requiredParameter in ['access_token', 'token_type']) { validate(parameters.containsKey(requiredParameter), 'did not contain required parameter "$requiredParameter"'); validate(parameters[requiredParameter] is String, 'required parameter "$requiredParameter" was not a string, was ' '"${parameters[requiredParameter]}"'); } // TODO(nweiz): support the "mac" token type // (http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01) validate(parameters['token_type'].toLowerCase() == 'bearer', '"$tokenEndpoint": unknown token type "${parameters['token_type']}"'); var expiresIn = parameters['expires_in']; validate(expiresIn == null || expiresIn is int, 'parameter "expires_in" was not an int, was "$expiresIn"'); for (var name in ['refresh_token', 'scope']) { var value = parameters[name]; validate(value == null || value is String, 'parameter "$name" was not a string, was "$value"'); } var scope = parameters['scope']; if (scope != null) scopes = scope.split(" "); var expiration = expiresIn == null ? null : startTime.add(new Duration(seconds: expiresIn - _EXPIRATION_GRACE)); return new Credentials( parameters['access_token'], parameters['refresh_token'], tokenEndpoint, scopes, expiration); }