diff --git a/authentication/context_processors.py b/authentication/context_processors.py index d403df83..7f1c39f1 100644 --- a/authentication/context_processors.py +++ b/authentication/context_processors.py @@ -1,14 +1,11 @@ from __future__ import unicode_literals -from authentication.models import AuthServicesInfo from authentication.states import NONE_STATE, BLUE_STATE, MEMBER_STATE +from authentication.managers import UserState from django.conf import settings def membership_state(request): - if request.user.is_authenticated: - auth = AuthServicesInfo.objects.get_or_create(user=request.user)[0] - return {'STATE': auth.state} - return {'STATE': NONE_STATE} + return UserState.get_membership_state(request) def states(request): @@ -19,6 +16,7 @@ def states(request): 'MEMBER_BLUE_STATE': [MEMBER_STATE, BLUE_STATE], } + def sso(request): return { 'EVE_SSO_CALLBACK_URL': settings.EVE_SSO_CALLBACK_URL, diff --git a/authentication/decorators.py b/authentication/decorators.py index 1d3167cb..c08fc8cb 100644 --- a/authentication/decorators.py +++ b/authentication/decorators.py @@ -1,33 +1,23 @@ from __future__ import unicode_literals from django.contrib.auth.decorators import user_passes_test -from authentication.models import AuthServicesInfo -from authentication.states import MEMBER_STATE, BLUE_STATE, NONE_STATE -from django.conf import settings +from authentication.managers import UserState -def _state_required(states, *args, **kwargs): - def test_func(user): - if user.is_superuser and settings.SUPERUSER_STATE_BYPASS: - return True - if user.is_authenticated: - auth = AuthServicesInfo.objects.get_or_create(user=user)[0] - return auth.state in states - return False - - return user_passes_test(test_func, *args, **kwargs) +def _state_required(state_test, *args, **kwargs): + return user_passes_test(state_test, *args, **kwargs) def members(*args, **kwargs): - return _state_required([MEMBER_STATE], *args, **kwargs) + return _state_required(UserState.member_state, *args, **kwargs) def blues(*args, **kwargs): - return _state_required([BLUE_STATE], *args, **kwargs) + return _state_required(UserState.blue_state, *args, **kwargs) def members_and_blues(*args, **kwargs): - return _state_required([MEMBER_STATE, BLUE_STATE], *args, **kwargs) + return _state_required(UserState.member_or_blue_state, *args, **kwargs) def none_state(*args, **kwargs): - return _state_required([NONE_STATE], *args, **kwargs) + return _state_required(UserState.none_state, *args, **kwargs) diff --git a/authentication/managers.py b/authentication/managers.py index 6471880b..a577a05a 100755 --- a/authentication/managers.py +++ b/authentication/managers.py @@ -1,6 +1,7 @@ from __future__ import unicode_literals from django.contrib.auth.models import User - +from django.conf import settings +from authentication.states import NONE_STATE, BLUE_STATE, MEMBER_STATE from authentication.models import AuthServicesInfo import logging @@ -143,3 +144,44 @@ class AuthServicesInfoManager: logger.info("Updated user %s market info in authservicesinfo model." % user) else: logger.error("Failed to update user %s market info: user does not exist." % user) + + +class UserState: + def __init__(self): + pass + + MEMBER_STATE = MEMBER_STATE + BLUE_STATE = BLUE_STATE + NONE_STATE = NONE_STATE + + @classmethod + def member_state(cls, user): + return cls.state_required(user, [cls.MEMBER_STATE]) + + @classmethod + def member_or_blue_state(cls, user): + return cls.state_required(user, [cls.MEMBER_STATE, cls.BLUE_STATE]) + + @classmethod + def blue_state(cls, user): + return cls.state_required(user, [cls.BLUE_STATE]) + + @classmethod + def none_state(cls, user): + return cls.state_required(user, [cls.NONE_STATE]) + + @classmethod + def get_membership_state(cls, request): + if request.user.is_authenticated: + auth = AuthServicesInfo.objects.get_or_create(user=request.user)[0] + return {'STATE': auth.state} + return {'STATE': cls.NONE_STATE} + + @staticmethod + def state_required(user, states): + if user.is_superuser and settings.SUPERUSER_STATE_BYPASS: + return True + if user.is_authenticated: + auth = AuthServicesInfo.objects.get_or_create(user=user)[0] + return auth.state in states + return False