diff --git a/lib/admin.py b/lib/admin.py index bd27e74..d6406fc 100644 --- a/lib/admin.py +++ b/lib/admin.py @@ -762,12 +762,14 @@ def page_admin(): ui.label("Administrationsbenutzer:").classes('text-bold') with ui.grid(columns=2).classes('items-baseline'): - ui.label("Benutzername des Adminstrators:") - admin_user = ui.input().tooltip("Geben Sie hier den Benutzernamen für den Adminstationsnutzer ein") - admin_user.value = data["admin_user"] - ui.label("Passwort des Administrators:") - admin_password = ui.input(password=True).tooltip("Geben Sie hier das Passwort für den Administationsnutzer ein. Merken Sie sich dieses Passwort gut. Es kann nicht über das Webinterface zurückgesetzt werden.") - + ui.label("Benutzer mit Administrationsrechten:") + user_switch_list = [] + with ui.element(): + for i in list_users(): + user_switch_list.append(ui.switch(i)) + for i in user_switch_list: + if i.text in get_admin_list(): + i.value = True secret = data["secret"] with ui.card(): @@ -1045,31 +1047,40 @@ def page_admin(): holiday_section() def save_admin_settings(): - write_adminsetting("admin_user", admin_user.value) - if admin_password.value != "": - write_adminsetting("admin_password", hash_password(admin_password.value)) - else: - write_adminsetting("admin_password", data["admin_password"]) - write_adminsetting("port", port.value) - write_adminsetting("secret", secret) - write_adminsetting("touchscreen", touchscreen_switch.value) - write_adminsetting("times_on_touchscreen", timestamp_switch.value) - write_adminsetting("photos_on_touchscreen", photo_switch.value) - write_adminsetting("picture_height", picture_height_input.value) - write_adminsetting("button_height", button_height_input.value) - write_adminsetting("user_notes", notes_switch.value) - write_adminsetting("holidays", data["holidays"]) - write_adminsetting("vacation_application", va_switch.value) - - if int(old_port) != int(port.value): + admin_users = { } + admin_counter = -1 + for i in user_switch_list: + if i.value == True: + admin_counter += 1 + admin_users[str(admin_counter)] = i.text + if len(admin_users) == 0: with ui.dialog() as dialog, ui.card(): - ui.label( - "Damit die Porteinstellungen wirksam werden, muss der Server neu gestartet werden.") - ui.button("OK", on_click=lambda: dialog.close()) + ui.label("Es wurde kein Administrationsbenutzer ausgewählt. Mindestens ein Benutzer muss Administrationsrechte haben.") + ui.button("OK", on_click=dialog.close) dialog.open() - ui.notify("Einstellungen gespeichert") - reset_visibility.value = False - timetable.refresh() + else: + + write_adminsetting("admin_user", admin_users) + write_adminsetting("port", port.value) + write_adminsetting("secret", secret) + write_adminsetting("touchscreen", touchscreen_switch.value) + write_adminsetting("times_on_touchscreen", timestamp_switch.value) + write_adminsetting("photos_on_touchscreen", photo_switch.value) + write_adminsetting("picture_height", picture_height_input.value) + write_adminsetting("button_height", button_height_input.value) + write_adminsetting("user_notes", notes_switch.value) + write_adminsetting("holidays", data["holidays"]) + write_adminsetting("vacation_application", va_switch.value) + + if int(old_port) != int(port.value): + with ui.dialog() as dialog, ui.card(): + ui.label( + "Damit die Porteinstellungen wirksam werden, muss der Server neu gestartet werden.") + ui.button("OK", on_click=lambda: dialog.close()) + dialog.open() + ui.notify("Einstellungen gespeichert") + reset_visibility.value = False + timetable.refresh() with ui.button("Speichern", on_click=save_admin_settings): with ui.tooltip(): diff --git a/lib/definitions.py b/lib/definitions.py index f695ba5..4b86e79 100644 --- a/lib/definitions.py +++ b/lib/definitions.py @@ -38,7 +38,6 @@ status_out = "ausgestempelt" standard_adminsettings = { "admin_user": { 0: "admin"}, - "admin_password": "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918", "port": "8090", "secret": "ftgzuhjikg,mt5jn46uzer8sfi9okrmtzjhndfierko5zltjhdgise", "times_on_touchscreen": True, @@ -56,9 +55,9 @@ standard_adminsettings = { "admin_user": { # Standard User Settings: standard_usersettings = { - "username": "default", - "fullname": "Standardbenutzer", - "password": "37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f", + "username": "admin", + "fullname": "Administrator", + "password": "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918", "api_key": "1234567890", "workhours": { } } diff --git a/lib/login.py b/lib/login.py index eb001d4..2aca6f0 100644 --- a/lib/login.py +++ b/lib/login.py @@ -19,11 +19,11 @@ def page_login(): 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['authenticated'] = True + app.storage.user['admin_authenticated'] = True #TODO Weiterleitungsauswahl ob zum Stempeln oder Administration ui.navigate.to("/admin") else: diff --git a/lib/users.py b/lib/users.py index d9d8aa1..ae8b92a 100644 --- a/lib/users.py +++ b/lib/users.py @@ -580,6 +580,6 @@ def write_adminsetting(key: str, value): def get_admin_list(): adnin_settings = load_adminsettings() - admin_list = admin_settings["admin_user"] + admin_list = load_adminsettings()["admin_user"] return admin_list.values() diff --git a/lib/web_ui.py b/lib/web_ui.py index 919eb4f..816ac23 100644 --- a/lib/web_ui.py +++ b/lib/web_ui.py @@ -38,10 +38,23 @@ class login_mask: def login(): nonlocal data - if username.value == data["admin_user"]: - if hash_password(password.value) == data["admin_password"]: - app.storage.user['admin_authenticated'] = True - ui.navigate.to("/admin") + if username.value in get_admin_list(): + current_user = user(username.value) + if hash_password(password.value) == current_user.password: + with ui.dialog() as forward_dialog, ui.card(): + ui.label("Wollen Sie den Administrationsbereich oder den Datenbereich aufrufen?") + def admin_area(): + app.storage.user['admin_authenticated'] = True + ui.navigate.to('/admin') + def time_area(): + app.storage.user['active_user'] = current_user.username + ui.navigate.to(self.target) + with ui.grid(columns=2): + ui.button("Administrationsbereich", on_click=admin_area) + ui.button("Datenbereich", on_click=time_area) + + forward_dialog.open() + #ui.navigate.to("/admin") else: ui.notify("Login fehlgeschlagen") else: diff --git a/main.py b/main.py index 6566a6c..d9b50cb 100644 --- a/main.py +++ b/main.py @@ -33,7 +33,7 @@ def main(): list_users() - homepage() + #homepage() def startup_message(): @@ -54,7 +54,7 @@ def main(): ui.toggle.default_props('rounded') ui.row.default_classes('items-baseline') - ui.run(favicon='⏲', port=port, storage_secret=secret, language='de-DE', show_welcome_message=False) + ui.run(root=homepage, favicon='⏲', port=port, storage_secret=secret, language='de-DE', show_welcome_message=False) if __name__ in ("__main__", "__mp_main__"): parser = argparse.ArgumentParser(description=f'{app_title} {app_version}') diff --git a/settings.json b/settings.json index d18eb29..77397c6 100644 --- a/settings.json +++ b/settings.json @@ -1,8 +1,7 @@ { "admin_user": { - 0: "admin" + "0": "admin" }, - "admin_password": "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918", "port": "8090", "secret": "ftgzuhjikg,mt5jn46uzer8sfi9okrmtzjhndfierko5zltjhdgise", "times_on_touchscreen": true,