about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-07-19 09:35:51 -0500
committerFrederick Muriuki Muriithi2024-07-31 09:30:22 -0500
commit6510dd5175b84c9780dda2fe0d8869efaeb2404b (patch)
tree7f17e90fa9ff4bb9b4ad3a7146f0489119132b93
parentbb66f79d675ad046acdc4e6853416bf7e948d6dc (diff)
downloadgn-auth-6510dd5175b84c9780dda2fe0d8869efaeb2404b.tar.gz
Enable external configuration of session expiry period
Enable passing in the number of minutes that a session can be valid
for. This enables the length of time that the session can last to be
configurable rather than hard-coded.
-rw-r--r--gn_auth/auth/authorisation/users/admin/views.py6
-rw-r--r--gn_auth/session.py4
-rw-r--r--gn_auth/settings.py3
3 files changed, 9 insertions, 4 deletions
diff --git a/gn_auth/auth/authorisation/users/admin/views.py b/gn_auth/auth/authorisation/users/admin/views.py
index 8ca1e51..0ab69e9 100644
--- a/gn_auth/auth/authorisation/users/admin/views.py
+++ b/gn_auth/auth/authorisation/users/admin/views.py
@@ -62,7 +62,8 @@ _FORM_GRANT_TYPES_ = ({
 @admin.before_request
 def update_expires():
     """Update session expiration."""
-    if session.session_info() and not session.update_expiry():
+    if (session.session_info() and not session.update_expiry(
+            int(app.config.get("SESSION_EXPIRY_MINUTES", 10)))):
         flash("Session has expired. Logging out...", "alert-warning")
         session.clear_session_info()
         return redirect(url_for("oauth2.admin.login"))
@@ -96,7 +97,8 @@ def login():
                 session.update_session_info(
                     user=asdict(user),
                     expires=(
-                        datetime.now(tz=timezone.utc) + timedelta(minutes=10)))
+                        datetime.now(tz=timezone.utc) + timedelta(minutes=int(
+                            app.config.get("SESSION_EXPIRY_MINUTES", 10)))))
                 return redirect(url_for(next_uri))
             raise NotFoundError(error_message)
     except NotFoundError as _nfe:
diff --git a/gn_auth/session.py b/gn_auth/session.py
index 7226ac5..39f6959 100644
--- a/gn_auth/session.py
+++ b/gn_auth/session.py
@@ -47,11 +47,11 @@ def session_expired() -> bool:
         return now >= session[__SESSION_KEY__]["expires"]
     return True
 
-def update_expiry() -> bool:
+def update_expiry(minutes: int = 10) -> bool:
     """Update the session expiry and return a boolean indicating success."""
     if not session_expired():
         now = datetime.now(tz=timezone.utc)
-        session[__SESSION_KEY__]["expires"] = now + timedelta(minutes=10)
+        session[__SESSION_KEY__]["expires"] = now + timedelta(minutes=minutes)
         return True
     return False
 
diff --git a/gn_auth/settings.py b/gn_auth/settings.py
index 2cac390..e9bfe23 100644
--- a/gn_auth/settings.py
+++ b/gn_auth/settings.py
@@ -8,6 +8,9 @@ LOGLEVEL = "WARNING"
 SECRET_KEY = ""
 GN_AUTH_SECRETS = None # Set this to path to secrets file
 
+# Session settings
+SESSION_EXPIRY_MINUTES = 10
+
 # Database settings
 SQL_URI = "mysql://webqtlout:webqtlout@localhost/db_webqtl"
 AUTH_DB = f"{os.environ.get('HOME')}/genenetwork/gn3_files/db/auth.db"