#!/usr/bin/env python3 # Zeiterfassung import os.path from lib.web_ui import * from lib.admin import * from lib.users import * from lib.touchscreen import * from lib.definitions import * from lib.api import * from lib.homepage import * import json import argparse from lib.web_ui import hash_password def commandline_header(): message_string = f"{app_title} {app_version}" underline = "" for i in range(len(message_string)): underline += "-" print(message_string) print(underline) def main(): # Einstellungen einlesen data = load_adminsettings() port = int(data["port"]) secret = data["secret"] list_users() #homepage() def startup_message(): commandline_header() url_string = "" for i in list(app.urls): url_string += f"{i}, " url_string = url_string[0:-2] print("Oberfläche erreichbar unter: " + url_string) app.on_startup(startup_message) # Styling: ui.button.default_classes('normal-case') ui.button.default_props('rounded') ui.tab.default_classes('normal-case') ui.toggle.default_classes('normal-case') ui.toggle.default_props('rounded') ui.row.default_classes('items-baseline') 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}') parser.add_argument('--admin-access', help='Zugangsdaten für Administrator einstellen', action="store_true") args = parser.parse_args() if is_docker(): scriptpath = "/app" backupfolder = "/backup" if args.admin_access: commandline_header() print("Lade Administrationseinstellungen") admin_settings = load_adminsettings() print("Geben Sie den neuen Benutzernamen für den Administrationsbenutzer an:") admin_user = input() if admin_user == "": print("Ungültiger Benutzername. Breche ab.") quit() print("Geben Sie das neue Passwort für den Administrationsbenutzer ein:") admin_password = input() if admin_password == "": print("Ungültiges Passwort. Breche ab.") quit() print("Sie haben folgende Informationen eingegeben.") print(f"Benutzername: {admin_user}") print(f"Passwort: {admin_password}") print("Sollen diese Einstellungen übernommen werden? j=Ja") question = input() if question == "j": if not os.path.exists(userfolder): os.makedirs(userfolder) print("Kein Ordner mit Benutzerdaten gefunden. Lege ihn an.") if not os.path.exists(os.path.join(userfolder, admin_user)): print("Benutzer existiert noch nicht. Lege ihn an.") os.makedirs(os.path.join(userfolder, admin_user)) start_date_dt = datetime.datetime.now() start_date = start_date_dt.strftime("%Y-%m-%d") settings_to_write = standard_usersettings settings_to_write["workhours"][start_date] = {} settings_to_write["fullname"] = "Administrator" settings_to_write["username"] = admin_user # API-Key erzeugen string_to_hash = f'{admin_user}_{datetime.datetime.now().timestamp()}' hash_string = hashlib.shake_256(bytes(string_to_hash, 'utf-8')).hexdigest(20) settings_to_write["api_key"] = hash_string for i in range(1, 8): settings_to_write["workhours"][start_date][str(i)] = 0 settings_to_write["workhours"][start_date]["vacation"] = 0 with open(f"{userfolder}/{admin_user}/{usersettingsfilename}", 'w') as json_file: json_dict = json.dumps(standard_usersettings, indent=4) json_file.write(json_dict) current_user = user(admin_user) current_user.password = hash_password(admin_password) current_user.write_settings() admin_users_list = load_adminsettings()["admin_user"] admin_users_list[str(len(admin_users_list))] = admin_user write_adminsetting("admin_user", admin_users_list) print("Daten geschrieben") quit() else: print("Breche ab.") quit() main()