Commit 4f770788461fe65cfbc3aa8fd859cbfcfe4e7874
1 parent
3d665298
Exists in
master
and in
3 other branches
Adding session expire for inactivity with log event
Showing
5 changed files
with
47 additions
and
1 deletions
Show diff stats
amadeus/settings.py
| ... | ... | @@ -51,6 +51,7 @@ INSTALLED_APPS = [ |
| 51 | 51 | 'django_bootstrap_breadcrumbs', |
| 52 | 52 | 's3direct', |
| 53 | 53 | 'django_summernote', |
| 54 | + 'session_security', | |
| 54 | 55 | |
| 55 | 56 | 'amadeus', |
| 56 | 57 | 'users', |
| ... | ... | @@ -76,6 +77,8 @@ MIDDLEWARE_CLASSES = [ |
| 76 | 77 | 'django.middleware.csrf.CsrfViewMiddleware', |
| 77 | 78 | 'django.contrib.auth.middleware.AuthenticationMiddleware', |
| 78 | 79 | 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', |
| 80 | + 'users.middleware.SessionExpireMiddleware', | |
| 81 | + 'session_security.middleware.SessionSecurityMiddleware', | |
| 79 | 82 | 'django.contrib.messages.middleware.MessageMiddleware', |
| 80 | 83 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', |
| 81 | 84 | 'django.middleware.locale.LocaleMiddleware', |
| ... | ... | @@ -106,7 +109,9 @@ TEMPLATES = [ |
| 106 | 109 | |
| 107 | 110 | WSGI_APPLICATION = 'amadeus.wsgi.application' |
| 108 | 111 | |
| 109 | - | |
| 112 | +SESSION_SECURITY_WARN_AFTER = 1140 | |
| 113 | +SESSION_SECURITY_EXPIRE_AFTER = 1200 | |
| 114 | +SESSION_EXPIRE_AT_BROWSER_CLOSE = True | |
| 110 | 115 | # Database |
| 111 | 116 | # https://docs.djangopr/*oject.com/en/1.9/ref/settings/#databases |
| 112 | 117 | ... | ... |
amadeus/templates/base.html
| ... | ... | @@ -59,6 +59,7 @@ |
| 59 | 59 | <link rel="stylesheet" type="text/css" href="{% static theme_selected %}"> |
| 60 | 60 | {% endwith %} |
| 61 | 61 | |
| 62 | + | |
| 62 | 63 | </head> |
| 63 | 64 | <body> |
| 64 | 65 | {% block nav %} |
| ... | ... | @@ -215,6 +216,8 @@ |
| 215 | 216 | </div> |
| 216 | 217 | {% endblock %} |
| 217 | 218 | |
| 219 | + {% include 'session_security/all.html' %} | |
| 220 | + | |
| 218 | 221 | <!-- Init material Bootstrap --> |
| 219 | 222 | <script type="text/javascript">$.material.init()</script> |
| 220 | 223 | <script src="{% static 'js/main.js' %}"></script> | ... | ... |
amadeus/urls.py
requirements.txt
| ... | ... | @@ -0,0 +1,36 @@ |
| 1 | +""" | |
| 2 | + Middleware to register a log event for a session expire | |
| 3 | + Called before session_security package clears the session and log out the user | |
| 4 | +""" | |
| 5 | + | |
| 6 | +from datetime import datetime, timedelta | |
| 7 | +from session_security.settings import EXPIRE_AFTER | |
| 8 | +from session_security.utils import get_last_activity, set_last_activity | |
| 9 | + | |
| 10 | +from log.models import Log | |
| 11 | + | |
| 12 | +class SessionExpireMiddleware(object): | |
| 13 | + | |
| 14 | + def process_request(self, request): | |
| 15 | + if not request.user.is_authenticated(): | |
| 16 | + return | |
| 17 | + | |
| 18 | + now = datetime.now() | |
| 19 | + | |
| 20 | + if '_session_security' not in request.session: | |
| 21 | + return | |
| 22 | + | |
| 23 | + delta = now - get_last_activity(request.session) | |
| 24 | + expire_seconds = EXPIRE_AFTER | |
| 25 | + | |
| 26 | + if delta >= timedelta(seconds = expire_seconds): | |
| 27 | + log = Log() | |
| 28 | + log.user = str(request.user) | |
| 29 | + log.user_id = request.user.id | |
| 30 | + log.user_email = request.user.email | |
| 31 | + log.context = {'condition': 'session_expire'} | |
| 32 | + log.component = "user" | |
| 33 | + log.action = "logout" | |
| 34 | + log.resource = "system" | |
| 35 | + | |
| 36 | + log.save() | |
| 0 | 37 | \ No newline at end of file | ... | ... |