diff --git a/Web/modules/database/user.py b/Web/modules/database/user.py index e8d5e10..1bd4ff7 100755 --- a/Web/modules/database/user.py +++ b/Web/modules/database/user.py @@ -497,6 +497,58 @@ def check_nm_pwd(username, password): finally: client.close() +def add_admin( + username, + password, + name='', + last_name='', + is_student=False, + permission_preset='full_access', + action_permissions=None, + page_permissions=None, +): + """ + Add a new user to the database. + """ + if not check_password_strength(password): + return False + + client = MongoClient(cfg.MONGODB_HOST, cfg.MONGODB_PORT) + try: + db = _get_tenant_db(client) + users = db['users'] + + permission_defaults = build_default_permission_payload(permission_preset) + + if isinstance(action_permissions, dict): + for key, value in action_permissions.items(): + permission_defaults['actions'][str(key)] = bool(value) + + if isinstance(page_permissions, dict): + for key, value in page_permissions.items(): + permission_defaults['pages'][str(key)] = bool(value) + + safe_name = name.strip() if name else '' + safe_last_name = last_name.strip() if last_name else '' + + user_doc = { + 'Username': username, + 'Password': hashing(password), + 'Admin': True, + 'active_ausleihung': None, + 'name': dp.encrypt_text(safe_name) if safe_name else '', + 'last_name': dp.encrypt_text(safe_last_name) if safe_last_name else '', + 'IsStudent': bool(is_student), + 'PermissionPreset': permission_defaults['preset'], + 'ActionPermissions': permission_defaults['actions'], + 'PagePermissions': permission_defaults['pages'], + } + + users.insert_one(user_doc) + return True + finally: + client.close() + def add_user( username, diff --git a/manage-tenant.sh b/manage-tenant.sh index 427618f..eb19a57 100755 --- a/manage-tenant.sh +++ b/manage-tenant.sh @@ -207,7 +207,7 @@ tenant_id = sys.argv[1].lower() mode = sys.argv[2] sanitized = "".join(c for c in tenant_id if c.isalnum() or c == "_") -us.add_user("admin", "admin123", "admin", "admin", permission_preset='full_access') +us.add_admin("admin", "admin123", "admin", "admin") us.make_admin("admin") print("Fallback successfully applied")