From edeefe072dd419a7dac592a62437a9f3d19fdfa1 Mon Sep 17 00:00:00 2001 From: David Rodenkirchen Date: Thu, 28 May 2026 13:08:48 +0200 Subject: [PATCH 1/3] Cleanup requirements --- requirements.txt | Bin 1170 -> 450 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/requirements.txt b/requirements.txt index ab1758b8789c669bb53f4124b652a4639803a1cc..ca2bf4a7237a6e7107ed9cd4f8365863655e74df 100644 GIT binary patch literal 450 zcmY+BL2rUU5QX2_q(22CpiM75^xh_3J*r?dwJZwS`sZ!G8QiUgz%KLNeESA|uS@L| z)agsTTJ3pT>6L4yv2yN-o;0FXYpDjccC~m=Yr2iISEe&Nqg1RtyAa?GV;CV@$==n)n;cD)gTT-;H6ndt|_))pQ-NJ3iP_g#R)sQ{r zu=xt7%yrR1Z~D-?t46XErK<-fSkqtKzKdlW`i@i%I`QnF59y6sYI^6fZ=d1Xr3rHS VBjcOy6}^EoKG{c3?(++@FfP13Q;?(*K-ho)Gj znmk>H;V6}Cg$^NBU7c-gG{ex!R`&lT>zZ8Q^p~x6r8o?|R0l*?rvtfR=(agm?@DoY z7?kWg+!~iF-3ZrhcalfhAvNl3T^)umvX=*8Jek*FI3vJa^fBv6^HaS%36u5W9hW-DHD*pTR2R&%5tI?%bg4Q4Tq{*~ zmS=IxacXjmcuH*@cdB#`F}s(fb8(o2Qt%d|Qrr22F=MUCpoW`TdD-F`BLif?)RuVX z0FNj^)`d!SZA=VRQ*arD7>Y?`1E?RsO3<`^wo|A%mIMWeDWa5hqZ0EbA~X3z;hj~7 z;TOb5+7?bA>(-_3q1jELlxWEfhvaHiD~wgEV0(74f>V<_opIC1f7>r z@8Wj~EfL$v@J->B!V?&tbR8R-5&%A_bs~}XaRK^HvM-X?^%nDFiP`t^f@P;1lhI~` zkS$w9q}6Ij1wUfZ2N?1*@v_U^$^Nuurx@DU zDcl>v7x**?Z@7D2ytsD|Eild|^Y&flKt}t`3hb9%7bM|tX3FhK%nyRdup2_gIX`@i ziNlV8ExMZVM)>W!hOJo4Lbi@v!CV%1Ez!KX%>n#NR&d*D8C-U6vnzaupUH{8&?aKz -- 2.52.0 From 11724ad0d953c52ea48d6a17b2a74c2ac9ef76d0 Mon Sep 17 00:00:00 2001 From: David Rodenkirchen Date: Thu, 28 May 2026 13:10:01 +0200 Subject: [PATCH 2/3] improve error handling --- src/elm/services/DatabaseService.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/elm/services/DatabaseService.py b/src/elm/services/DatabaseService.py index 4fa5985..2ea6e11 100644 --- a/src/elm/services/DatabaseService.py +++ b/src/elm/services/DatabaseService.py @@ -1,8 +1,10 @@ import logging +import sys from beanie import init_beanie from pymongo import AsyncMongoClient from pymongo.asynchronous.collection import AsyncCollection +from pymongo.errors import ServerSelectionTimeoutError, OperationFailure from elm.types import User, Transaction, Ticket, Seat, CateringTypes from elm.types.ConfigurationTypes import DatabaseConfiguration @@ -30,6 +32,15 @@ class DatabaseService: if self._client is None: self._client = AsyncMongoClient(mongo_uri) + try: + await self._client.admin.command("ping") + except ServerSelectionTimeoutError: + print("Could not connect to mongodb") + sys.exit(1) + except OperationFailure: + print("Authentication with mongodb failed") + sys.exit(1) + self._database = self._client[ self._db_config.database_name ] -- 2.52.0 From 36418470a6c3a25f415063d6dfce1453029aa498 Mon Sep 17 00:00:00 2001 From: David Rodenkirchen Date: Thu, 28 May 2026 13:16:00 +0200 Subject: [PATCH 3/3] make login more sturdy --- src/elm/pages/LoginPage.py | 3 +++ src/elm/services/UserService.py | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/elm/pages/LoginPage.py b/src/elm/pages/LoginPage.py index 0d2df31..0681520 100644 --- a/src/elm/pages/LoginPage.py +++ b/src/elm/pages/LoginPage.py @@ -32,6 +32,9 @@ class LoginPage(Component): self.login_in_progress = True user_name = copy(self.user_name) # Prevents race condition name swap is_valid = await self.session[UserService].is_login_valid(user_name, self.password) + if not is_valid: # Migrated users + user_name = user_name.lower().capitalize() + is_valid = await self.session[UserService].is_login_valid(user_name, self.password) if is_valid: user: User = await self.session[UserService].get_user(user_name) self.error_on_last_attempt = False diff --git a/src/elm/services/UserService.py b/src/elm/services/UserService.py index d34d9eb..dabc855 100644 --- a/src/elm/services/UserService.py +++ b/src/elm/services/UserService.py @@ -1,4 +1,3 @@ -from asyncio import sleep from hashlib import sha256 from typing import Optional from string import ascii_letters, digits @@ -69,8 +68,6 @@ class UserService: async def is_login_valid(self, user_name: str, password_clear_text: str) -> bool: user = await self.get_user(user_name) - if not user: - user = await self.get_user(user_name.lower()) # Migrated users had all lowercase names user_password_hash = sha256(password_clear_text.encode(encoding="utf-8")).hexdigest() if not user: return False -- 2.52.0