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,11 +1047,20 @@ 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:
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("Es wurde kein Administrationsbenutzer ausgewählt. Mindestens ein Benutzer muss Administrationsrechte haben.")
ui.button("OK", on_click=dialog.close)
dialog.open()
else: else:
write_adminsetting("admin_password", data["admin_password"])
write_adminsetting("admin_user", admin_users)
write_adminsetting("port", port.value) write_adminsetting("port", port.value)
write_adminsetting("secret", secret) write_adminsetting("secret", secret)
write_adminsetting("touchscreen", touchscreen_switch.value) write_adminsetting("touchscreen", touchscreen_switch.value)

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)
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 app.storage.user['admin_authenticated'] = True
ui.navigate.to("/admin") 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,