diff --git a/admin.py b/admin.py index 11d2b99..8f70e7f 100644 --- a/admin.py +++ b/admin.py @@ -136,4 +136,50 @@ def register_admin_routes(app): except Exception as e: print(f"[ERR] Failed to update user: {e}") - abort(500, "Failed to update user") \ No newline at end of file + abort(500, "Failed to update user") + + @app.route("/admin/users/new") + @admin_required + def admin_user_new(): + """Display form to create a new user""" + return render_template("admin_user_create.html") + + @app.route("/admin/users/create", methods=["POST"]) + @admin_required + def create_user(): + """Create a new user""" + try: + # Get form data + user_email = request.form.get("user_email") + if not user_email: + abort(400, "User email is required") + + # Validate email format + if "@" not in user_email: + abort(400, "Invalid email format") + + # Create user in Firebase Authentication + user_record = fb_auth.create_user( + email=user_email, + email_verified=False, + disabled=not request.form.get("enabled", False) + ) + + # Create user profile in Firestore + user_ref = db.collection("users").document(user_record.uid) + user_ref.set({ + "user_email": user_email, + "case_email": request.form.get("case_email", ""), + "enabled": bool(request.form.get("enabled", False)), + "is_admin": bool(request.form.get("is_admin", False)) + }) + + # Redirect to admin users page + return redirect(url_for("admin_users")) + + except fb_auth.EmailAlreadyExistsError: + print(f"[ERR] User with email {user_email} already exists") + abort(400, "A user with this email already exists") + except Exception as e: + print(f"[ERR] Failed to create user: {e}") + abort(500, "Failed to create user") \ No newline at end of file diff --git a/templates/admin_user_create.html b/templates/admin_user_create.html new file mode 100644 index 0000000..d99b2a5 --- /dev/null +++ b/templates/admin_user_create.html @@ -0,0 +1,55 @@ +{% extends 'base.html' %} +{% block content %} +