from nicegui import ui, app from users import * from definitions import * import hashlib class pageheader: def __init__(self, heading): self.heading = heading ui.markdown(f"##{app_title} {app_version}") ui.markdown(f"###{self.heading}") def cookie_hash(user, password): return hashlib.sha256(b"{user}{app.storage.user['id']}{password}").hexdigest() def adminsettings(): # Settingsdatei einlesen try: with open(f"{scriptpath}/{usersettingsfilename}") as json_file: data = json.load(json_file) json_file.close() return(data) except: return(-1) @ui.page('/login') def page_login(): # Settingsdatei einlesen data = adminsettings() def login(): nonlocal data if username.value == data["admin_user"]: if password.value == data["admin_password"]: active_login = cookie_hash(data["admin_user"], data["admin_password"]) app.storage.user['secret'] = active_login 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()) @ui.page('/admin') def page_admin(): data = adminsettings() active_login = cookie_hash(data["admin_user"], data["admin_password"]) try: browser_cookie = app.storage.user['secret'] except: browser_cookie = "" # Adminseite if browser_cookie == active_login: pageheader("Administration") with ui.tabs() as tabs: admin_user = ui.tab('Admin Benutzer') users = ui.tab('Benutzer') settings = ui.tab('Einstellungen') with ui.tab_panels(tabs, value=admin_user): with ui.tab_panel(admin_user): with ui.grid(columns=2): ui.label("Benutzername des Adminstrators") admin_user = ui.input() admin_user.value = data["admin_user"] ui.label("Passwort des Adminsistrators") admin_password = ui.input(password=True) admin_password.value = data["admin_password"] with ui.tab_panel(users): ui.markdown("###Benutzerverwaltung") userlist = list_users() workhours = [ ] with ui.row(): def user_selection_changed(value): current_user = user(value) username_input.value = current_user.username fullname_input.value = current_user.fullname password_input.value = current_user.password usersettingscard.visible = True workhours_select.set_options(list(current_user.workhours)) workhours_select.value = list(current_user.workhours)[0] workinghourscard.visible = True with ui.column(): ui.select(options=userlist, with_input=True, on_change=lambda e: user_selection_changed(e.value)) ui.button("Neu") with ui.column(): with ui.card() as usersettingscard: ui.markdown("**Benutzereisntellungen**") with ui.grid(columns=2): ui.label("Benutzername:") username_input = ui.input() ui.label("Voller Name:") fullname_input = ui.input() ui.label("Passwort") password_input = ui.input(password=True) with ui.row(): ui.button("Speichern") ui.button("Löschen") with ui.card() as workinghourscard: workhours = [ ] ui.markdown("**Arbeitszeiten**") with ui.grid(columns=2): ui.markdown("gültig ab:") workhours_select = ui.select(options=workhours) days = [ ] weekdays = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"] counter = 0 for day in weekdays: ui.markdown(day) days.append(ui.input()) counter = counter + 1 ui.separator() with ui.grid(columns=2): ui.markdown("Urlaubstage") vacation_input = ui.input() with ui.row(): ui.button("Speichern") ui.button("Löschen") ui.button("Neu") # Initial das Benutzerfeld unsichtbar machen usersettingscard.visible = False workinghourscard.visible = False # Alternativ zur Loginseite navigieren else: ui.navigate.to("/login") @ui.page('/stamping') def page_stamping(): ui.label('Stempelsteite') @ui.page('/touchscreen') def page_touchscreen(): def button_click(name): nonlocal buttons current_user = user(name) current_user.timestamp() if current_user.stamp_status() == status_in: buttons[name].props('color=green') ui.notify(status_in) else: buttons[name].props('color=red') ui.notify(status_out) ui.markdown(f"##{app_title} {app_version}") userlist = list_users() number_of_users = len(userlist) buttons = { } if number_of_users > 5: number_of_columns = 5 else: number_of_columns = number_of_users with ui.grid(columns=number_of_columns): for name in userlist: current_user = user(name) current_button = ui.button(on_click=lambda name=name: button_click(name)) with current_button: try: with open(current_user.photofile, 'r') as file: pass file.close() ui.image(current_user.photofile) except: pass ui.label(current_user.fullname) if current_user.stamp_status() == status_in: current_button.props('color=green') else: current_button.props('color=red') buttons[name] = current_button @ui.page('/userlist') def page_userlist(): def click_button(button): ui.notify(button) ui.markdown(f"#{app_title} {app_version}") userlist = list_users() buttons = { } for name in userlist: button = ui.button(text=name, on_click=lambda name=name:click_button(name) ) buttons[name] = button ui.run(port=8090, storage_secret="test")