Spaces:
Paused
Paused
| """ | |
| 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 | |
| def setup_view(request: HttpRequest) -> HttpResponse: | |
| """ | |
| Initial setup wizard view. | |
| GET: Display setup status (does not auto-execute) | |
| POST: Trigger setup operations | |
| """ | |
| # Check if setup is already complete | |
| if not SetupService.is_setup_needed(): | |
| # If setup is done but no admin exists, redirect to admin setup | |
| if SetupService.needs_admin_setup(): | |
| return redirect("setup:admin_setup") | |
| return redirect("auth:login") | |
| # Get current status | |
| status = SetupService.get_status() | |
| # Only run setup on explicit POST request | |
| if request.method == "POST": | |
| results = SetupService.run_full_setup() | |
| # Refresh status after setup | |
| status = SetupService.get_status() | |
| # If setup completed and admin needed, redirect to admin setup | |
| 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), | |
| }) | |
| # GET request - just display status, don't auto-execute | |
| return render(request, "setup/setup.html", { | |
| "status": status, | |
| "results": None, | |
| "setup_complete": False, | |
| }) | |
| 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. | |
| """ | |
| # Redirect if admin already exists | |
| 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: | |
| # Log the user in immediately | |
| 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}) | |