Consolidate member state checking for easier code reuse

This commit is contained in:
Basraah 2016-12-05 20:42:47 +10:00
parent 5fb64d8c06
commit 9eba5607d2
3 changed files with 53 additions and 23 deletions

View File

@ -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,

View File

@ -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)

View File

@ -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