56 lines
2 KiB
Python
56 lines
2 KiB
Python
from enum import Enum
|
|
from auth.auth_context_type import ValidatedAuthContext, ContextEntityKind
|
|
|
|
|
|
class AuthKind(Enum):
|
|
cookie = 'cookie'
|
|
basic = 'basic'
|
|
oauth = 'oauth'
|
|
signed_grant = 'signed_grant'
|
|
credentials = 'credentials'
|
|
|
|
|
|
class ValidateResult(object):
|
|
""" A result of validating auth in one form or another. """
|
|
def __init__(self, kind, missing=False, user=None, token=None, oauthtoken=None,
|
|
robot=None, appspecifictoken=None, signed_data=None, error_message=None):
|
|
self.kind = kind
|
|
self.missing = missing
|
|
self.error_message = error_message
|
|
self.context = ValidatedAuthContext(user=user, token=token, oauthtoken=oauthtoken, robot=robot,
|
|
appspecifictoken=appspecifictoken, signed_data=signed_data)
|
|
|
|
def tuple(self):
|
|
return (self.kind, self.missing, self.error_message, self.context.tuple())
|
|
|
|
def __eq__(self, other):
|
|
return self.tuple() == other.tuple()
|
|
|
|
def apply_to_context(self):
|
|
""" Applies this auth result to the auth context and Flask-Principal. """
|
|
self.context.apply_to_request_context()
|
|
|
|
def with_kind(self, kind):
|
|
""" Returns a copy of this result, but with the kind replaced. """
|
|
result = ValidateResult(kind, missing=self.missing, error_message=self.error_message)
|
|
result.context = self.context
|
|
return result
|
|
|
|
def __repr__(self):
|
|
return 'ValidateResult: %s (missing: %s, error: %s)' % (self.kind, self.missing,
|
|
self.error_message)
|
|
|
|
@property
|
|
def authed_user(self):
|
|
""" Returns the authenticated user, whether directly, or via an OAuth token. """
|
|
return self.context.authed_user
|
|
|
|
@property
|
|
def has_nonrobot_user(self):
|
|
""" Returns whether a user (not a robot) was authenticated successfully. """
|
|
return self.context.has_nonrobot_user
|
|
|
|
@property
|
|
def auth_valid(self):
|
|
""" Returns whether authentication successfully occurred. """
|
|
return self.context.entity_kind != ContextEntityKind.anonymous
|