X-Git-Url: https://projects.mako.cc/source/twitter-api-cdsw/blobdiff_plain/b5d973d7a0a14eca21b2981ffacf4fb9ea77ba41..HEAD:/oauthlib/oauth2/rfc6749/grant_types/implicit.py diff --git a/oauthlib/oauth2/rfc6749/grant_types/implicit.py b/oauthlib/oauth2/rfc6749/grant_types/implicit.py index 27bcb24..2a92a02 100644 --- a/oauthlib/oauth2/rfc6749/grant_types/implicit.py +++ b/oauthlib/oauth2/rfc6749/grant_types/implicit.py @@ -260,6 +260,15 @@ class ImplicitGrant(GrantTypeBase): # error and MUST NOT automatically redirect the user-agent to the # invalid redirection URI. + # First check duplicate parameters + for param in ('client_id', 'response_type', 'redirect_uri', 'scope', 'state'): + try: + duplicate_params = request.duplicate_params + except ValueError: + raise errors.InvalidRequestFatalError(description='Unable to parse query string', request=request) + if param in duplicate_params: + raise errors.InvalidRequestFatalError(description='Duplicate %s parameter.' % param, request=request) + # REQUIRED. The client identifier as described in Section 2.2. # http://tools.ietf.org/html/rfc6749#section-2.2 if not request.client_id: @@ -304,23 +313,21 @@ class ImplicitGrant(GrantTypeBase): # http://tools.ietf.org/html/rfc6749#appendix-B # Note that the correct parameters to be added are automatically - # populated through the use of specific exceptions. - if request.response_type is None: - raise errors.InvalidRequestError(description='Missing response_type parameter.', - request=request) + # populated through the use of specific exceptions - for param in ('client_id', 'response_type', 'redirect_uri', 'scope', 'state'): - if param in request.duplicate_params: - raise errors.InvalidRequestError(description='Duplicate %s parameter.' % param, request=request) - - # REQUIRED. Value MUST be set to "token". - if request.response_type != 'token': + # REQUIRED. + if request.response_type is None: + raise errors.MissingResponseTypeError(request=request) + # Value MUST be set to "token". + elif request.response_type != 'token': raise errors.UnsupportedResponseTypeError(request=request) log.debug('Validating use of response_type token for client %r (%r).', request.client_id, request.client) if not self.request_validator.validate_response_type(request.client_id, - request.response_type, request.client, request): + request.response_type, + request.client, request): + log.debug('Client %s is not authorized to use response_type %s.', request.client_id, request.response_type) raise errors.UnauthorizedClientError(request=request)