From a121b90d7fc30d32a73a69e8d5e37c377f42fea2 Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Wed, 22 Jan 2025 16:35:53 +0530 Subject: [PATCH] feat: allow created a session for a fixed duration via `bench browse` Signed-off-by: Akhil Narang --- frappe/auth.py | 5 ++++- frappe/commands/site.py | 5 ++++- frappe/sessions.py | 7 ++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/frappe/auth.py b/frappe/auth.py index c77d50ab93..fde5af0031 100644 --- a/frappe/auth.py +++ b/frappe/auth.py @@ -219,7 +219,10 @@ class LoginManager: def make_session(self, resume=False): # start session frappe.local.session_obj = Session( - user=self.user, resume=resume, full_name=self.full_name, user_type=self.user_type + user=self.user, + resume=resume, + full_name=self.full_name, + user_type=self.user_type, ) # reset user if changed to Guest diff --git a/frappe/commands/site.py b/frappe/commands/site.py index 5a8c53e840..6cc2440dc1 100644 --- a/frappe/commands/site.py +++ b/frappe/commands/site.py @@ -1175,8 +1175,9 @@ def publish_realtime(context: CliCtxObj, event, message, room, user, doctype, do @click.command("browse") @click.argument("site", required=False) @click.option("--user", required=False, help="Login as user") +@click.option("--duration", required=False, help="Session duration (in hh:mm:ss format)") @pass_context -def browse(context: CliCtxObj, site, user=None): +def browse(context: CliCtxObj, site, user=None, duration=None): """Opens the site on web browser""" from frappe.auth import CookieManager, LoginManager @@ -1192,6 +1193,8 @@ def browse(context: CliCtxObj, site, user=None): frappe.init(site) frappe.connect() + frappe.flags.session_duration = duration + sid = "" if user: if not frappe.db.exists("User", user): diff --git a/frappe/sessions.py b/frappe/sessions.py index 6329b1320d..9c1d8752d5 100644 --- a/frappe/sessions.py +++ b/frappe/sessions.py @@ -246,11 +246,13 @@ class Session: self.sid = self.data.sid = sid self.data.data.user = self.user self.data.data.session_ip = frappe.local.request_ip + if frappe.flags.session_duration: + self.data.data.fixed_duration = True if self.user != "Guest": self.data.data.update( { "last_updated": frappe.utils.now(), - "session_expiry": get_expiry_period(), + "session_expiry": frappe.flags.session_duration or get_expiry_period(), "full_name": self.full_name, "user_type": self.user_type, } @@ -386,6 +388,9 @@ class Session: if frappe.session.user == "Guest": return + if self.data.data.fixed_duration: + return + now = frappe.utils.now_datetime() # update session in db