| """ |
| Setup wizard views for first-run configuration. |
| """ |
|
|
| from django.shortcuts import render, redirect |
| from django.contrib.auth import login |
| from django.contrib import messages |
| from django.views.decorators.http import require_http_methods |
| from django.views.decorators.csrf import csrf_protect |
| from django.http import HttpRequest, HttpResponse |
|
|
| from core.services.setup_service import SetupService |
| from core.forms import AdminSetupForm |
|
|
|
|
| @csrf_protect |
| @require_http_methods(["GET", "POST"]) |
| def setup_view(request: HttpRequest) -> HttpResponse: |
| """ |
| Initial setup wizard view. |
| |
| GET: Display setup status (does not auto-execute) |
| POST: Trigger setup operations |
| """ |
| |
| if not SetupService.is_setup_needed(): |
| |
| if SetupService.needs_admin_setup(): |
| return redirect("setup:admin_setup") |
| return redirect("auth:login") |
|
|
| |
| status = SetupService.get_status() |
|
|
| |
| if request.method == "POST": |
| results = SetupService.run_full_setup() |
|
|
| |
| status = SetupService.get_status() |
|
|
| |
| if results.get("completed") and SetupService.needs_admin_setup(): |
| return render(request, "setup/setup.html", { |
| "status": status, |
| "results": results, |
| "setup_complete": True, |
| "redirect_to_admin_setup": True, |
| }) |
|
|
| return render(request, "setup/setup.html", { |
| "status": status, |
| "results": results, |
| "setup_complete": results.get("completed", False), |
| }) |
|
|
| |
| return render(request, "setup/setup.html", { |
| "status": status, |
| "results": None, |
| "setup_complete": False, |
| }) |
|
|
|
|
| @csrf_protect |
| @require_http_methods(["GET", "POST"]) |
| def admin_setup_view(request: HttpRequest) -> HttpResponse: |
| """ |
| Admin account creation during setup. |
| |
| This view is shown after the initial system setup completes |
| to create the first admin user with password authentication. |
| """ |
| |
| if not SetupService.needs_admin_setup(): |
| return redirect("auth:login") |
|
|
| if request.method == "POST": |
| form = AdminSetupForm(request.POST) |
| if form.is_valid(): |
| email = form.cleaned_data["email"].lower() |
| password = form.cleaned_data["password"] |
|
|
| success, message = SetupService.create_admin_user(email, password) |
|
|
| if success: |
| |
| from core.models import User |
| user = User.objects.get(email=email) |
| login(request, user, backend='django.contrib.auth.backends.ModelBackend') |
| messages.success(request, "Admin account created! Welcome to PyRunner.") |
| return redirect("cpanel:dashboard") |
| else: |
| messages.error(request, message) |
| else: |
| form = AdminSetupForm() |
|
|
| return render(request, "setup/admin_setup.html", {"form": form}) |
|
|