From 47a71ebf445f492ff720b426eba5757091d838d1 Mon Sep 17 00:00:00 2001 From: Alexander Malzkuhn Date: Mon, 27 Oct 2025 09:37:59 +0100 Subject: [PATCH] =?UTF-8?q?Login=20Seite=20entfernt.=20Ist=20in=20Hauptsei?= =?UTF-8?q?te=20integriert=20L=C3=B6schsperre=20f=C3=BCr=20Adminuser=20ein?= =?UTF-8?q?gef=C3=BCgt=20Kommandozeilenfunktion=20f=C3=BCr=20Adminanlage?= =?UTF-8?q?=20angepasst.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/admin.py | 19 +++++++++++++++---- lib/login.py | 42 ------------------------------------------ main.py | 34 ++++++++++++++++++++++++++++------ settings.json | 3 ++- 4 files changed, 45 insertions(+), 53 deletions(-) delete mode 100644 lib/login.py diff --git a/lib/admin.py b/lib/admin.py index d6406fc..17c3df9 100644 --- a/lib/admin.py +++ b/lib/admin.py @@ -44,6 +44,10 @@ def page_admin(): updates_available = ValueBinder() updates_available.value = False + delete_binder = ValueBinder() + delete_binder.value = True + delete_info = ValueBinder() + delete_info.value = False enabled_because_not_docker = ValueBinder if is_docker(): @@ -1091,7 +1095,6 @@ def page_admin(): workhours = [ ] with ui.row(): - def user_selection_changed(): try: if user_selection.value != None: @@ -1100,7 +1103,14 @@ def page_admin(): fullname_input.value = current_user.fullname #password_input.value = current_user.password usersettingscard.visible = True - + if current_user.username in get_admin_list(): + delete_info.value = True + delete_binder.value = False + else: + delete_info.value = False + delete_binder.value = True + print(delete_info.value) + print(delete_binder.value) api_key_input.value = current_user.api_key api_link_column.clear() @@ -1338,10 +1348,11 @@ def page_admin(): for i in app.urls: stamp_link.append(ui.link(f'{i}/api/stamp/"API-Schüssel"')) - + ui.label("Administratoren können nicht gelöscht werden. Um das Konto zu löschen, müssen Sie ihm zuerst die Administrationsrechte entziehen.").bind_visibility_from(delete_info, 'value').classes('font-bold text-red') with ui.grid(columns=2): ui.button("Speichern", on_click=save_user_settings).tooltip("Klicken Sie hier um die Änderungen zu speichern.") - ui.button("Löschen", on_click=del_user) + ui.button("Löschen", on_click=del_user).bind_enabled_from(delete_binder, 'value') + usersettings_card() diff --git a/lib/login.py b/lib/login.py deleted file mode 100644 index 2aca6f0..0000000 --- a/lib/login.py +++ /dev/null @@ -1,42 +0,0 @@ -from datetime import datetime - -from nicegui import ui, app -from lib.web_ui import * - -from lib.users import * -from lib.definitions import * -from calendar import monthrange - -import hashlib -import calendar -import locale - -@ui.page('/login') -def page_login(): - - # Settingsdatei einlesen - data = load_adminsettings() - - def login(): - nonlocal data - print(username.value) - if username.value in get_admin_list(): - #TODO Loginprozess anpassen_ - if hash_password(password.value) == data["admin_password"]: - app.storage.user['admin_authenticated'] = True - #TODO Weiterleitungsauswahl ob zum Stempeln oder Administration - ui.navigate.to("/admin") - else: - ui.notify("Login fehlgeschlagen") - - #ui.markdown(f"## {app_title} {app_version}") - #ui.markdown("Bitte einloggen") - - pageheader("Bitte einloggen:") - - with ui.grid(columns=2): - ui.markdown("Benutzer:") - username = ui.input('Benutzername') - ui.markdown("Passwort:") - password = ui.input('Passwort', password=True) - ui.button(text="Login", on_click=lambda: login()) \ No newline at end of file diff --git a/main.py b/main.py index d9b50cb..2e524e8 100644 --- a/main.py +++ b/main.py @@ -4,7 +4,6 @@ import os.path from lib.web_ui import * from lib.admin import * -from lib.login import * from lib.users import * from lib.touchscreen import * from lib.definitions import * @@ -85,11 +84,34 @@ if __name__ in ("__main__", "__mp_main__"): print("Sollen diese Einstellungen übernommen werden? j=Ja") question = input() if question == "j": - admin_settings["admin_user"] = admin_user - admin_settings["admin_password"] = hash_password(admin_password) - json_dict = json.dumps(admin_settings, indent=4) - with open(os.path.join(scriptpath, usersettingsfilename), "w") as outputfile: - outputfile.write(json_dict) + if not os.path.exists(userfolder): + os.makedirs(userfolder) + print("Kein Ordner mit Benutzerdaten gefunden. Lege ihn an.") + if not os.path.exists(os.path.join(userfolder, admin_user)): + print("Benutzer existiert noch nicht. Lege ihn an.") + os.makedirs(os.path.join(userfolder, admin_user)) + start_date_dt = datetime.datetime.now() + start_date = start_date_dt.strftime("%Y-%m-%d") + settings_to_write = standard_usersettings + settings_to_write["workhours"][start_date] = {} + settings_to_write["fullname"] = "Administrator" + settings_to_write["username"] = admin_user + # API-Key erzeugen + string_to_hash = f'{admin_user}_{datetime.datetime.now().timestamp()}' + hash_string = hashlib.shake_256(bytes(string_to_hash, 'utf-8')).hexdigest(20) + settings_to_write["api_key"] = hash_string + for i in range(1, 8): + settings_to_write["workhours"][start_date][str(i)] = 0 + settings_to_write["workhours"][start_date]["vacation"] = 0 + with open(f"{userfolder}/{admin_user}/{usersettingsfilename}", 'w') as json_file: + json_dict = json.dumps(standard_usersettings, indent=4) + json_file.write(json_dict) + current_user = user(admin_user) + current_user.password = hash_password(admin_password) + current_user.write_settings() + admin_users_list = load_adminsettings()["admin_user"] + admin_users_list[str(len(admin_users_list))] = admin_user + write_adminsetting("admin_user", admin_users_list) print("Daten geschrieben") quit() else: diff --git a/settings.json b/settings.json index 77397c6..68532ee 100644 --- a/settings.json +++ b/settings.json @@ -1,6 +1,7 @@ { "admin_user": { - "0": "admin" + "0": "admin", + "1": "admin2" }, "port": "8090", "secret": "ftgzuhjikg,mt5jn46uzer8sfi9okrmtzjhndfierko5zltjhdgise",