Update auf Nicegui 3

Umstellung auf admin als User und Auswahl von Adminbenutzer
This commit is contained in:
Alexander Malzkuhn 2025-10-26 21:18:23 +01:00
parent 3035bb384c
commit 0b478b5e2e
7 changed files with 66 additions and 44 deletions

View File

@ -762,12 +762,14 @@ def page_admin():
ui.label("Administrationsbenutzer:").classes('text-bold') ui.label("Administrationsbenutzer:").classes('text-bold')
with ui.grid(columns=2).classes('items-baseline'): with ui.grid(columns=2).classes('items-baseline'):
ui.label("Benutzername des Adminstrators:") ui.label("Benutzer mit Administrationsrechten:")
admin_user = ui.input().tooltip("Geben Sie hier den Benutzernamen für den Adminstationsnutzer ein") user_switch_list = []
admin_user.value = data["admin_user"] with ui.element():
ui.label("Passwort des Administrators:") for i in list_users():
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.") 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"] secret = data["secret"]
with ui.card(): with ui.card():
@ -1045,31 +1047,40 @@ def page_admin():
holiday_section() holiday_section()
def save_admin_settings(): def save_admin_settings():
write_adminsetting("admin_user", admin_user.value) admin_users = { }
if admin_password.value != "": admin_counter = -1
write_adminsetting("admin_password", hash_password(admin_password.value)) for i in user_switch_list:
else: if i.value == True:
write_adminsetting("admin_password", data["admin_password"]) admin_counter += 1
write_adminsetting("port", port.value) admin_users[str(admin_counter)] = i.text
write_adminsetting("secret", secret) if len(admin_users) == 0:
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(): with ui.dialog() as dialog, ui.card():
ui.label( ui.label("Es wurde kein Administrationsbenutzer ausgewählt. Mindestens ein Benutzer muss Administrationsrechte haben.")
"Damit die Porteinstellungen wirksam werden, muss der Server neu gestartet werden.") ui.button("OK", on_click=dialog.close)
ui.button("OK", on_click=lambda: dialog.close())
dialog.open() dialog.open()
ui.notify("Einstellungen gespeichert") else:
reset_visibility.value = False
timetable.refresh() 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.button("Speichern", on_click=save_admin_settings):
with ui.tooltip(): with ui.tooltip():

View File

@ -38,7 +38,6 @@ status_out = "ausgestempelt"
standard_adminsettings = { "admin_user": { standard_adminsettings = { "admin_user": {
0: "admin"}, 0: "admin"},
"admin_password": "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918",
"port": "8090", "port": "8090",
"secret": "ftgzuhjikg,mt5jn46uzer8sfi9okrmtzjhndfierko5zltjhdgise", "secret": "ftgzuhjikg,mt5jn46uzer8sfi9okrmtzjhndfierko5zltjhdgise",
"times_on_touchscreen": True, "times_on_touchscreen": True,
@ -56,9 +55,9 @@ standard_adminsettings = { "admin_user": {
# Standard User Settings: # Standard User Settings:
standard_usersettings = { standard_usersettings = {
"username": "default", "username": "admin",
"fullname": "Standardbenutzer", "fullname": "Administrator",
"password": "37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f", "password": "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918",
"api_key": "1234567890", "api_key": "1234567890",
"workhours": { } "workhours": { }
} }

View File

@ -19,11 +19,11 @@ def page_login():
def login(): def login():
nonlocal data nonlocal data
print(username.value)
if username.value in get_admin_list(): if username.value in get_admin_list():
#TODO Loginprozess anpassen_ #TODO Loginprozess anpassen_
if hash_password(password.value) == data["admin_password"]: 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 #TODO Weiterleitungsauswahl ob zum Stempeln oder Administration
ui.navigate.to("/admin") ui.navigate.to("/admin")
else: else:

View File

@ -580,6 +580,6 @@ def write_adminsetting(key: str, value):
def get_admin_list(): def get_admin_list():
adnin_settings = load_adminsettings() adnin_settings = load_adminsettings()
admin_list = admin_settings["admin_user"] admin_list = load_adminsettings()["admin_user"]
return admin_list.values() return admin_list.values()

View File

@ -38,10 +38,23 @@ class login_mask:
def login(): def login():
nonlocal data nonlocal data
if username.value == data["admin_user"]: if username.value in get_admin_list():
if hash_password(password.value) == data["admin_password"]: current_user = user(username.value)
app.storage.user['admin_authenticated'] = True if hash_password(password.value) == current_user.password:
ui.navigate.to("/admin") 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: else:
ui.notify("Login fehlgeschlagen") ui.notify("Login fehlgeschlagen")
else: else:

View File

@ -33,7 +33,7 @@ def main():
list_users() list_users()
homepage() #homepage()
def startup_message(): def startup_message():
@ -54,7 +54,7 @@ def main():
ui.toggle.default_props('rounded') ui.toggle.default_props('rounded')
ui.row.default_classes('items-baseline') 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__"): if __name__ in ("__main__", "__mp_main__"):
parser = argparse.ArgumentParser(description=f'{app_title} {app_version}') parser = argparse.ArgumentParser(description=f'{app_title} {app_version}')

View File

@ -1,8 +1,7 @@
{ {
"admin_user": { "admin_user": {
0: "admin" "0": "admin"
}, },
"admin_password": "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918",
"port": "8090", "port": "8090",
"secret": "ftgzuhjikg,mt5jn46uzer8sfi9okrmtzjhndfierko5zltjhdgise", "secret": "ftgzuhjikg,mt5jn46uzer8sfi9okrmtzjhndfierko5zltjhdgise",
"times_on_touchscreen": true, "times_on_touchscreen": true,