diff --git a/requirements.txt b/requirements.txt index ab1758b..ca2bf4a 100644 Binary files a/requirements.txt and b/requirements.txt differ 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/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 ] 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