manage.get.gov/src/djangooidc/exceptions.py

46 lines
1.4 KiB
Python

from oic import rndstr
from http import HTTPStatus as status
class OIDCException(Exception):
"""
Base class for django oidc exceptions.
Subclasses should provide `.status` and `.friendly_message` properties.
`.locator`, if used, should be a useful, unique identifier for
locating related log messages.
"""
status = status.INTERNAL_SERVER_ERROR
friendly_message = "A server error occurred."
locator = None
def __init__(self, friendly_message=None, status=None, locator=None):
if friendly_message is not None:
self.friendly_message = friendly_message
if status is not None:
self.status = status
if locator is not None:
self.locator = locator
else:
self.locator = rndstr(size=12)
def __str__(self):
return f"[{self.locator}] {self.friendly_message}"
class AuthenticationFailed(OIDCException):
status = status.UNAUTHORIZED
friendly_message = "This login attempt didn't work."
class StateMismatch(AuthenticationFailed):
friendly_message = "State mismatch. This login attempt didn't work."
class InternalError(OIDCException):
status = status.INTERNAL_SERVER_ERROR
friendly_message = "The system broke while trying to log you in."
class BannedUser(AuthenticationFailed):
friendly_message = "Your user is not valid in this application."