diff --git a/admin.py b/admin.py index beb17cd..f6567d1 100644 --- a/admin.py +++ b/admin.py @@ -14,6 +14,7 @@ import os.path import hashlib import calendar import locale +import segno @ui.page('/admin') def page_admin(): @@ -758,9 +759,15 @@ def page_admin(): api_link_column.clear() for i in app.urls: - link = ui.link(f'{i}/api/stamp/"API-Schlüssel"', f'{i}/api/stamp/{api_key_input.value}') - link.tooltip("ACHTUNG: Klick auf den Link löst Stempelaktion aus!") - link.move(api_link_column) + with ui.row() as link_row: + link_string = f'{i}/api/stamp/{api_key_input.value}' + link = ui.link(f'{i}/api/stamp/"API-Schlüssel"', link_string).tooltip(("ACHTUNG: Klick auf den Link löst Stempelaktion aus!")) + qr = segno.make_qr(link_string).svg_data_uri() + with ui.image(qr).classes('w-1/3'): + with ui.tooltip().classes('bg-white border'): + ui.image(qr).classes('w-64') + + link_row.move(api_link_column) workhours_select.clear() workhour_list = list(current_user.workhours) @@ -808,6 +815,7 @@ def page_admin(): user_selection.clear() user_selection.set_options(userlist) user_selection.value = current_user.username + user_selection_changed() dialog.close() ui.notify("Einstellungen gespeichert") @@ -927,32 +935,45 @@ def page_admin(): user_ui() with ui.column(): - with ui.card() as usersettingscard: - ui.markdown("**Benutzereinstellungen**") - with ui.grid(columns="auto 1fr") as usersettingsgrid: + @ui.refreshable + def usersettings_card(): + global usersettingscard + with ui.card() as usersettingscard: + ui.markdown("**Benutzereinstellungen**") + with ui.grid(columns="auto 1fr") as usersettingsgrid: - ui.markdown("Benutzername:") - username_input = ui.input() - ui.markdown("Voller Name:") - fullname_input = ui.input() - ui.markdown("Passwort") - password_input = ui.input(password=True) - password_input.value = "" - ui.markdown("API-Schlüssel:") - with ui.row(): - api_key_input = ui.input().props('size=37') - def new_api_key(): - api_key_input.value = hashlib.shake_256(bytes(f'{username_input.value}_{datetime.datetime.now().timestamp()}', 'utf-8')).hexdigest(20) - ui.button("Neu", on_click=new_api_key) - ui.markdown('Aufruf zum Stempeln:') - with ui.column().classes('gap-0') as api_link_column: - stamp_link = [ ] - for i in app.urls: - stamp_link.append(ui.link(f'{i}/api/stamp/"API-Schüssel"')) + ui.markdown("Benutzername:") + global username_input + username_input = ui.input() + ui.markdown("Voller Name:") + global fullname_input + fullname_input = ui.input() + ui.markdown("Passwort") + global password_input + password_input = ui.input(password=True) + password_input.value = "" + ui.markdown("API-Schlüssel:") + with ui.row(): + global api_key_input + api_key_input = ui.input().props('size=37') + def new_api_key(): + api_key_input.value = hashlib.shake_256(bytes(f'{username_input.value}_{datetime.datetime.now().timestamp()}', 'utf-8')).hexdigest(20) - with ui.grid(columns=2): - ui.button("Speichern", on_click=save_user_settings).tooltip("Klicken Sie hier um die Änderungen zu speichern.") - ui.button("Löschen", on_click=del_user) + ui.button("Neu", on_click=new_api_key).tooltip("Neuen API-Schlüssel erzeugen. Wird erst beim Klick auf Speichern übernommen und entsprechende Links und QR-Codes aktualisiert") + ui.markdown('Aufruf zum Stempeln:') + global api_link_column + with ui.column().classes('gap-0') as api_link_column: + global stamp_link + stamp_link = [ ] + for i in app.urls: + stamp_link.append(ui.link(f'{i}/api/stamp/"API-Schüssel"')) + + + with ui.grid(columns=2): + ui.button("Speichern", on_click=save_user_settings).tooltip("Klicken Sie hier um die Änderungen zu speichern.") + ui.button("Löschen", on_click=del_user) + + usersettings_card() with ui.card() as photocard: ui.markdown('**Foto**') diff --git a/playgound.py b/playgound.py index 6428d72..1800280 100644 --- a/playgound.py +++ b/playgound.py @@ -1,8 +1,12 @@ from nicegui import ui +import segno -test = ('Eintrag 1') +string = "" +for i in range(1000): + string += str(i) -ui.markdown(test) -ui.markdown('Nächstes Element') +qr_code = segno.make_qr(string).svg_data_uri() +#qr_code.save("qr_code.png", scale=5, border=0) +ui.image(qr_code) ui.run(language="de-DE", port=9000) \ No newline at end of file diff --git a/users/testuser1/settings.json b/users/testuser1/settings.json index 1959d9c..7f31cc1 100644 --- a/users/testuser1/settings.json +++ b/users/testuser1/settings.json @@ -1,7 +1,7 @@ { "username": "testuser1", "fullname": "Pia Paulina", - "password": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + "password": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "workhours": { "2025-05-13": { "1": "4", @@ -34,5 +34,5 @@ "vacation": "30" } }, - "api_key": "de4403f629a30450b2df1aa619a1c06112035499" + "api_key": "0d8b1baf9219fe568c0f0ea7c4244927e1c901da" } \ No newline at end of file diff --git a/users/testuser99/settings.json b/users/testuser99/settings.json new file mode 100644 index 0000000..c9e9caf --- /dev/null +++ b/users/testuser99/settings.json @@ -0,0 +1,18 @@ +{ + "username": "testuser99", + "fullname": "testuser99", + "password": "37a8eec1ce19687d132fe29051dca629d164e2c4958ba141d5f4133a33f0688f", + "api_key": "d0c28e4b8dff9685e774e6e2e6bcea6b746d34af", + "workhours": { + "2025-05-08": { + "1": 0, + "2": 0, + "3": 0, + "4": 0, + "5": 0, + "6": 0, + "7": 0, + "vacation": 0 + } + } +} \ No newline at end of file