-
-
Notifications
You must be signed in to change notification settings - Fork 130
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #175 from jazzband/simplify
Simplify middleware and db backend
- Loading branch information
Showing
4 changed files
with
45 additions
and
146 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,68 +1,17 @@ | ||
import time | ||
|
||
from django.conf import settings | ||
from django.utils.cache import patch_vary_headers | ||
from django.utils.http import http_date | ||
|
||
try: | ||
from importlib import import_module | ||
except ImportError: | ||
from django.utils.importlib import import_module | ||
from django.contrib.sessions.middleware import ( | ||
SessionMiddleware as DjangoSessionMiddleware, | ||
) | ||
|
||
try: | ||
from django.utils.deprecation import MiddlewareMixin | ||
except ImportError: | ||
class MiddlewareMixin: | ||
pass | ||
|
||
|
||
class SessionMiddleware(MiddlewareMixin): | ||
class SessionMiddleware(DjangoSessionMiddleware): | ||
""" | ||
Middleware that provides ip and user_agent to the session store. | ||
""" | ||
def process_request(self, request): | ||
engine = import_module(settings.SESSION_ENGINE) | ||
session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None) | ||
request.session = engine.SessionStore( | ||
request.session = self.SessionStore( | ||
ip=request.META.get('REMOTE_ADDR', ''), | ||
user_agent=request.META.get('HTTP_USER_AGENT', ''), | ||
session_key=session_key | ||
) | ||
|
||
def process_response(self, request, response): | ||
""" | ||
If request.session was modified, or if the configuration is to save the | ||
session every time, save the changes and set a session cookie. | ||
""" | ||
try: | ||
accessed = request.session.accessed | ||
modified = request.session.modified | ||
except AttributeError: | ||
pass | ||
else: | ||
if accessed: | ||
patch_vary_headers(response, ('Cookie',)) | ||
if modified or settings.SESSION_SAVE_EVERY_REQUEST: | ||
if request.session.get_expire_at_browser_close(): | ||
max_age = None | ||
expires = None | ||
else: | ||
max_age = request.session.get_expiry_age() | ||
expires_time = time.time() + max_age | ||
expires = http_date(expires_time) | ||
# Save the session data and refresh the client cookie. | ||
# Skip session save for 500 responses, refs #3881. | ||
if response.status_code != 500: | ||
request.session.save() | ||
response.set_cookie( | ||
settings.SESSION_COOKIE_NAME, | ||
request.session.session_key, | ||
max_age=max_age, | ||
expires=expires, | ||
domain=settings.SESSION_COOKIE_DOMAIN, | ||
path=settings.SESSION_COOKIE_PATH, | ||
secure=settings.SESSION_COOKIE_SECURE or None, | ||
httponly=settings.SESSION_COOKIE_HTTPONLY or None, | ||
samesite=settings.SESSION_COOKIE_SAMESITE, | ||
) | ||
return response |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters