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')
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():

View File

@ -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": { }
}

View File

@ -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:

View File

@ -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()

View File

@ -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:

View File

@ -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}')

View File

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