90 lines
2.2 KiB
Python
90 lines
2.2 KiB
Python
"""authlib.oauth1.rfc5849.errors.
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
RFC5849 has no definition on errors. This module is designed by
|
|
Authlib based on OAuth 1.0a `Section 10`_ with some changes.
|
|
|
|
.. _`Section 10`: https://oauth.net/core/1.0a/#rfc.section.10
|
|
"""
|
|
|
|
from authlib.common.errors import AuthlibHTTPError
|
|
from authlib.common.security import is_secure_transport
|
|
|
|
|
|
class OAuth1Error(AuthlibHTTPError):
|
|
def __init__(self, description=None, uri=None, status_code=None):
|
|
super().__init__(None, description, uri, status_code)
|
|
|
|
def get_headers(self):
|
|
"""Get a list of headers."""
|
|
return [
|
|
("Content-Type", "application/x-www-form-urlencoded"),
|
|
("Cache-Control", "no-store"),
|
|
("Pragma", "no-cache"),
|
|
]
|
|
|
|
|
|
class InsecureTransportError(OAuth1Error):
|
|
error = "insecure_transport"
|
|
description = "OAuth 2 MUST utilize https."
|
|
|
|
@classmethod
|
|
def check(cls, uri):
|
|
if not is_secure_transport(uri):
|
|
raise cls()
|
|
|
|
|
|
class InvalidRequestError(OAuth1Error):
|
|
error = "invalid_request"
|
|
|
|
|
|
class UnsupportedParameterError(OAuth1Error):
|
|
error = "unsupported_parameter"
|
|
|
|
|
|
class UnsupportedSignatureMethodError(OAuth1Error):
|
|
error = "unsupported_signature_method"
|
|
|
|
|
|
class MissingRequiredParameterError(OAuth1Error):
|
|
error = "missing_required_parameter"
|
|
|
|
def __init__(self, key):
|
|
description = f'missing "{key}" in parameters'
|
|
super().__init__(description=description)
|
|
|
|
|
|
class DuplicatedOAuthProtocolParameterError(OAuth1Error):
|
|
error = "duplicated_oauth_protocol_parameter"
|
|
|
|
|
|
class InvalidClientError(OAuth1Error):
|
|
error = "invalid_client"
|
|
status_code = 401
|
|
|
|
|
|
class InvalidTokenError(OAuth1Error):
|
|
error = "invalid_token"
|
|
description = 'Invalid or expired "oauth_token" in parameters'
|
|
status_code = 401
|
|
|
|
|
|
class InvalidSignatureError(OAuth1Error):
|
|
error = "invalid_signature"
|
|
status_code = 401
|
|
|
|
|
|
class InvalidNonceError(OAuth1Error):
|
|
error = "invalid_nonce"
|
|
status_code = 401
|
|
|
|
|
|
class AccessDeniedError(OAuth1Error):
|
|
error = "access_denied"
|
|
description = "The resource owner or authorization server denied the request"
|
|
|
|
|
|
class MethodNotAllowedError(OAuth1Error):
|
|
error = "method_not_allowed"
|
|
status_code = 405
|