|
@@ -7,49 +7,48 @@ from django.utils.translation import gettext as _
|
|
|
|
|
|
from ..conf import settings
|
|
from ..conf import settings
|
|
|
|
|
|
-KEY_TOKEN = "misago_admin_session_token"
|
|
|
|
-KEY_UPDATED = "misago_admin_session_updated"
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-def make_user_admin_token(user):
|
|
|
|
- formula = (str(user.pk), user.email, user.password, settings.SECRET_KEY)
|
|
|
|
- return md5(":".join(formula).encode()).hexdigest()
|
|
|
|
-
|
|
|
|
|
|
+TOKEN_KEY = "misago_admin_session_token"
|
|
|
|
+UPDATED_KEY = "misago_admin_session_updated"
|
|
|
|
|
|
# Admin session state controls
|
|
# Admin session state controls
|
|
-def is_admin_session(request):
|
|
|
|
|
|
+def is_admin_authorized(request):
|
|
if request.user.is_anonymous:
|
|
if request.user.is_anonymous:
|
|
return False
|
|
return False
|
|
|
|
|
|
if not request.user.is_staff:
|
|
if not request.user.is_staff:
|
|
return False
|
|
return False
|
|
|
|
|
|
- admin_token = request.session.get(KEY_TOKEN)
|
|
|
|
|
|
+ admin_token = request.session.get(TOKEN_KEY)
|
|
if not admin_token == make_user_admin_token(request.user):
|
|
if not admin_token == make_user_admin_token(request.user):
|
|
return False
|
|
return False
|
|
|
|
|
|
- updated = request.session.get(KEY_UPDATED, 0)
|
|
|
|
|
|
+ updated = request.session.get(UPDATED_KEY, 0)
|
|
if updated < time() - (settings.MISAGO_ADMIN_SESSION_EXPIRATION * 60):
|
|
if updated < time() - (settings.MISAGO_ADMIN_SESSION_EXPIRATION * 60):
|
|
if updated:
|
|
if updated:
|
|
- request.session.pop(KEY_UPDATED, None)
|
|
|
|
|
|
+ request.session.pop(UPDATED_KEY, None)
|
|
messages.info(request, _("Your admin session has expired."))
|
|
messages.info(request, _("Your admin session has expired."))
|
|
return False
|
|
return False
|
|
|
|
|
|
return True
|
|
return True
|
|
|
|
|
|
|
|
|
|
-def start_admin_session(request, user):
|
|
|
|
- request.session[KEY_TOKEN] = make_user_admin_token(user)
|
|
|
|
- request.session[KEY_UPDATED] = int(time())
|
|
|
|
|
|
+def authorize_admin(request):
|
|
|
|
+ request.session[TOKEN_KEY] = make_user_admin_token(request.user)
|
|
|
|
+ request.session[UPDATED_KEY] = int(time())
|
|
|
|
|
|
|
|
|
|
-def update_admin_session(request):
|
|
|
|
- request.session[KEY_UPDATED] = int(time())
|
|
|
|
|
|
+def update_admin_authorization(request):
|
|
|
|
+ request.session[UPDATED_KEY] = int(time())
|
|
|
|
|
|
|
|
|
|
-def close_admin_session(request):
|
|
|
|
- request.session.pop(KEY_TOKEN, None)
|
|
|
|
- request.session.pop(KEY_UPDATED, None)
|
|
|
|
|
|
+def remove_admin_authorization(request):
|
|
|
|
+ request.session.pop(TOKEN_KEY, None)
|
|
|
|
+ request.session.pop(UPDATED_KEY, None)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def make_user_admin_token(user):
|
|
|
|
+ formula = (str(user.pk), user.email, user.password, settings.SECRET_KEY)
|
|
|
|
+ return md5(":".join(formula).encode()).hexdigest()
|
|
|
|
|
|
|
|
|
|
# Login/logout exposed
|
|
# Login/logout exposed
|
|
@@ -65,14 +64,14 @@ def django_login_handler(sender, **kwargs):
|
|
except AttributeError:
|
|
except AttributeError:
|
|
admin_namespace = False
|
|
admin_namespace = False
|
|
if admin_namespace and user.is_staff:
|
|
if admin_namespace and user.is_staff:
|
|
- start_admin_session(request, user)
|
|
|
|
|
|
+ authorize_admin(request)
|
|
|
|
|
|
|
|
|
|
dj_auth.signals.user_logged_in.connect(django_login_handler)
|
|
dj_auth.signals.user_logged_in.connect(django_login_handler)
|
|
|
|
|
|
|
|
|
|
def django_logout_handler(sender, **kwargs):
|
|
def django_logout_handler(sender, **kwargs):
|
|
- close_admin_session(kwargs["request"])
|
|
|
|
|
|
+ remove_admin_authorization(kwargs["request"])
|
|
|
|
|
|
|
|
|
|
dj_auth.signals.user_logged_out.connect(django_logout_handler)
|
|
dj_auth.signals.user_logged_out.connect(django_logout_handler)
|