From 58fa69fc7e7758dd92b4ecf7b5a04369ed9a7ef5 Mon Sep 17 00:00:00 2001 From: cyberbudy Date: Fri, 20 Nov 2020 22:44:32 +0200 Subject: [PATCH 1/2] Add settings to control redirect --- src/django_session_timeout/middleware.py | 8 ++++-- tests/test_middleware.py | 35 ++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/django_session_timeout/middleware.py b/src/django_session_timeout/middleware.py index bda7fcb..df457b0 100644 --- a/src/django_session_timeout/middleware.py +++ b/src/django_session_timeout/middleware.py @@ -29,10 +29,14 @@ def process_request(self, request): if session_is_expired: request.session.flush() redirect_url = getattr(settings, "SESSION_TIMEOUT_REDIRECT", None) - if redirect_url: + to_redirect = getattr(settings, "SESSION_TIMEOUT_TO_REDIRECT", True) + + if redirect_url and to_redirect: return redirect(redirect_url) - else: + elif to_redirect: return redirect_to_login(next=request.path) + else: + return expire_since_last_activity = getattr( settings, "SESSION_EXPIRE_AFTER_LAST_ACTIVITY", False diff --git a/tests/test_middleware.py b/tests/test_middleware.py index 00e49a5..c7cb0f7 100644 --- a/tests/test_middleware.py +++ b/tests/test_middleware.py @@ -144,3 +144,38 @@ def test_session_expire_last_activity_grace_not_update(r, settings): response = middleware.process_request(r) assert SESSION_TIMEOUT_KEY not in r.session assert response["location"] == "/accounts/login/?next=/" + + +def test_session_expire_to_redirect(r, settings): + settings.SESSION_EXPIRE_SECONDS = 3600 + settings.SESSION_TIMEOUT_REDIRECT = "/foobar/" + settings.SESSION_TIMEOUT_TO_REDIRECT = True + middleware = SessionTimeoutMiddleware() + + with freeze_time("2017-08-31 21:46:00"): + assert middleware.process_request(r) is None + + with freeze_time("2017-08-31 22:46:01"): + response = middleware.process_request(r) + assert response["location"] == "/foobar/" + + settings.SESSION_TIMEOUT_TO_REDIRECT = False + response = middleware.process_request(r) + assert response is None + +def test_session_expire_to_redirect_login(r, settings): + settings.SESSION_EXPIRE_SECONDS = 3600 + settings.SESSION_TIMEOUT_TO_REDIRECT = True + settings.SESSION_TIMEOUT_REDIRECT = None + middleware = SessionTimeoutMiddleware() + + with freeze_time("2017-08-31 21:46:00"): + assert middleware.process_request(r) is None + + with freeze_time("2017-08-31 22:46:01"): + response = middleware.process_request(r) + assert response["location"] == "/accounts/login/?next=/" + + settings.SESSION_TIMEOUT_TO_REDIRECT = False + response = middleware.process_request(r) + assert response is None From 4207a363c117d5b30f933ffe2814cbd30b644142 Mon Sep 17 00:00:00 2001 From: cyberbudy Date: Fri, 20 Nov 2020 22:49:17 +0200 Subject: [PATCH 2/2] Update readme --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 0e5863f..54445ef 100644 --- a/README.md +++ b/README.md @@ -54,3 +54,10 @@ To redirect to a custom URL define the following setting: ```python SESSION_TIMEOUT_REDIRECT = 'your_redirect_url_here/' ``` + + +To disable redirect add : + +```python +SESSION_TIMEOUT_TO_REDIRECT = False +```