fix: simultenous sessions ux (#24387)

* fix: set 2 as simultaneous_sessions by default

* fix: Correct offset for simultaneous_sessions

* refactor: use freeze_time instead of patching

* chore: misleading docstring

* test: set lower simultaneous_sessions for test
This commit is contained in:
Ankush Menat 2024-01-16 19:06:05 +05:30 committed by GitHub
parent ed09885eb4
commit 484049c5ae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 8 additions and 6 deletions

View file

@ -462,7 +462,7 @@
"read_only": 1
},
{
"default": "1",
"default": "2",
"fieldname": "simultaneous_sessions",
"fieldtype": "Int",
"label": "Simultaneous Sessions"

View file

@ -783,7 +783,7 @@ class Database:
Example:
# Update the `deny_multiple_sessions` field in System Settings DocType.
company = frappe.db.set_single_value("System Settings", "deny_multiple_sessions", True)
frappe.db.set_single_value("System Settings", "deny_multiple_sessions", True)
"""
to_update = self._get_update_dict(

View file

@ -59,11 +59,12 @@ def get_sessions_to_clear(user=None, keep_current=False):
offset = 0
if user == frappe.session.user:
simultaneous_sessions = frappe.db.get_value("User", user, "simultaneous_sessions") or 1
offset = simultaneous_sessions - 1
offset = simultaneous_sessions
session = frappe.qb.DocType("Sessions")
session_id = frappe.qb.from_(session).where(session.user == user)
if keep_current:
offset = max(0, offset - 1)
session_id = session_id.where(session.sid != frappe.session.sid)
query = (

View file

@ -22,6 +22,7 @@ def add_user(email, password, username=None, mobile_no=None):
dict(doctype="User", email=email, first_name=first_name, username=username, mobile_no=mobile_no)
).insert()
user.new_password = password
user.simultaneous_sessions = 1
user.add_roles("System Manager")
frappe.db.commit()
@ -212,12 +213,12 @@ class TestSessionExpirty(FrappeAPITestCase):
seconds_elapsed = expiry_in * step / 100
time_now = add_to_date(session_created, seconds=seconds_elapsed, as_string=True)
with patch("frappe.utils.now", return_value=time_now):
with self.freeze_time(time_now):
data = s.get_session_data_from_db()
self.assertEqual(data.user, "Administrator")
# 1% higher should immediately expire
time_now = add_to_date(session_created, seconds=expiry_in * 1.01, as_string=True)
with patch("frappe.utils.now", return_value=time_now):
time_of_expiry = add_to_date(session_created, seconds=expiry_in * 1.01, as_string=True)
with self.freeze_time(time_of_expiry):
self.assertIn(sid, get_expired_sessions())
self.assertFalse(s.get_session_data_from_db())