Merge pull request #1706 from strikaco/middleware
Converts shared_login view function to a middleware class, updates middleware setting
This commit is contained in:
commit
8fb8ec63eb
3 changed files with 63 additions and 39 deletions
|
|
@ -766,14 +766,15 @@ TEMPLATES = [{
|
||||||
# MiddleWare are semi-transparent extensions to Django's functionality.
|
# MiddleWare are semi-transparent extensions to Django's functionality.
|
||||||
# see http://www.djangoproject.com/documentation/middleware/ for a more detailed
|
# see http://www.djangoproject.com/documentation/middleware/ for a more detailed
|
||||||
# explanation.
|
# explanation.
|
||||||
MIDDLEWARE_CLASSES = (
|
MIDDLEWARE = (
|
||||||
'django.middleware.common.CommonMiddleware',
|
'django.middleware.common.CommonMiddleware',
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
'django.contrib.messages.middleware.MessageMiddleware', # 1.4?
|
'django.contrib.messages.middleware.MessageMiddleware', # 1.4?
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
'django.middleware.csrf.CsrfViewMiddleware',
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
'django.contrib.admindocs.middleware.XViewMiddleware',
|
'django.contrib.admindocs.middleware.XViewMiddleware',
|
||||||
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',)
|
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
|
||||||
|
'evennia.web.utils.middleware.SharedLoginMiddleware',)
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Evennia components
|
# Evennia components
|
||||||
|
|
|
||||||
60
evennia/web/utils/middleware.py
Normal file
60
evennia/web/utils/middleware.py
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
from django.contrib.auth import authenticate, login
|
||||||
|
from evennia.accounts.models import AccountDB
|
||||||
|
from evennia.utils import logger
|
||||||
|
|
||||||
|
class SharedLoginMiddleware(object):
|
||||||
|
"""
|
||||||
|
Handle the shared login between website and webclient.
|
||||||
|
|
||||||
|
"""
|
||||||
|
def __init__(self, get_response):
|
||||||
|
# One-time configuration and initialization.
|
||||||
|
self.get_response = get_response
|
||||||
|
|
||||||
|
def __call__(self, request):
|
||||||
|
# Code to be executed for each request before
|
||||||
|
# the view (and later middleware) are called.
|
||||||
|
|
||||||
|
# Process view
|
||||||
|
response = self.get_response(request)
|
||||||
|
|
||||||
|
# Code to be executed for each request/response after
|
||||||
|
# the view is called.
|
||||||
|
|
||||||
|
# Synchronize credentials
|
||||||
|
self.make_shared_login(request)
|
||||||
|
|
||||||
|
# Return processed view
|
||||||
|
return response
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def make_shared_login(cls, request):
|
||||||
|
csession = request.session
|
||||||
|
account = request.user
|
||||||
|
website_uid = csession.get("website_authenticated_uid", None)
|
||||||
|
webclient_uid = csession.get("webclient_authenticated_uid", None)
|
||||||
|
|
||||||
|
if not csession.session_key:
|
||||||
|
# this is necessary to build the sessid key
|
||||||
|
csession.save()
|
||||||
|
|
||||||
|
if account.is_authenticated():
|
||||||
|
# Logged into website
|
||||||
|
if not website_uid:
|
||||||
|
# fresh website login (just from login page)
|
||||||
|
csession["website_authenticated_uid"] = account.id
|
||||||
|
if webclient_uid is None:
|
||||||
|
# auto-login web client
|
||||||
|
csession["webclient_authenticated_uid"] = account.id
|
||||||
|
|
||||||
|
elif webclient_uid:
|
||||||
|
# Not logged into website, but logged into webclient
|
||||||
|
if not website_uid:
|
||||||
|
csession["website_authenticated_uid"] = account.id
|
||||||
|
account = AccountDB.objects.get(id=webclient_uid)
|
||||||
|
try:
|
||||||
|
# calls our custom authenticate, in web/utils/backend.py
|
||||||
|
authenticate(autologin=account)
|
||||||
|
login(request, account)
|
||||||
|
except AttributeError:
|
||||||
|
logger.log_trace()
|
||||||
|
|
@ -31,43 +31,6 @@ from django.utils.text import slugify
|
||||||
|
|
||||||
_BASE_CHAR_TYPECLASS = settings.BASE_CHARACTER_TYPECLASS
|
_BASE_CHAR_TYPECLASS = settings.BASE_CHARACTER_TYPECLASS
|
||||||
|
|
||||||
|
|
||||||
def _shared_login(request):
|
|
||||||
"""
|
|
||||||
Handle the shared login between website and webclient.
|
|
||||||
|
|
||||||
"""
|
|
||||||
csession = request.session
|
|
||||||
account = request.user
|
|
||||||
website_uid = csession.get("website_authenticated_uid", None)
|
|
||||||
webclient_uid = csession.get("webclient_authenticated_uid", None)
|
|
||||||
|
|
||||||
if not csession.session_key:
|
|
||||||
# this is necessary to build the sessid key
|
|
||||||
csession.save()
|
|
||||||
|
|
||||||
if account.is_authenticated():
|
|
||||||
# Logged into website
|
|
||||||
if not website_uid:
|
|
||||||
# fresh website login (just from login page)
|
|
||||||
csession["website_authenticated_uid"] = account.id
|
|
||||||
if webclient_uid is None:
|
|
||||||
# auto-login web client
|
|
||||||
csession["webclient_authenticated_uid"] = account.id
|
|
||||||
|
|
||||||
elif webclient_uid:
|
|
||||||
# Not logged into website, but logged into webclient
|
|
||||||
if not website_uid:
|
|
||||||
csession["website_authenticated_uid"] = account.id
|
|
||||||
account = AccountDB.objects.get(id=webclient_uid)
|
|
||||||
try:
|
|
||||||
# calls our custom authenticate, in web/utils/backend.py
|
|
||||||
authenticate(autologin=account)
|
|
||||||
login(request, account)
|
|
||||||
except AttributeError:
|
|
||||||
logger.log_trace()
|
|
||||||
|
|
||||||
|
|
||||||
def _gamestats():
|
def _gamestats():
|
||||||
# Some misc. configurable stuff.
|
# Some misc. configurable stuff.
|
||||||
# TODO: Move this to either SQL or settings.py based configuration.
|
# TODO: Move this to either SQL or settings.py based configuration.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue