moviewyrm/bookwyrm/views/setup.py

66 lines
2 KiB
Python
Raw Normal View History

2022-02-17 18:02:42 +00:00
""" Installation wizard 🧙 """
2022-02-17 19:25:11 +00:00
from django.contrib.auth import login
from django.contrib.auth.models import Group
from django.core.exceptions import PermissionDenied
2022-02-17 19:25:11 +00:00
from django.db import transaction
from django.shortcuts import redirect
2022-02-17 18:02:42 +00:00
from django.template.response import TemplateResponse
from django.views import View
from bookwyrm import forms, models
2022-02-17 19:25:11 +00:00
from bookwyrm.settings import DOMAIN
2022-02-17 18:02:42 +00:00
# pylint: disable= no-self-use
class CreateAdmin(View):
"""manage things like the instance name"""
def get(self, request):
2022-02-17 19:25:11 +00:00
"""Create admin user form"""
# only allow this view when an instance is being configured
site = models.SiteSettings.objects.get()
if not site.install_mode:
raise PermissionDenied()
2022-02-17 18:02:42 +00:00
data = {
"register_form": forms.RegisterForm()
}
return TemplateResponse(request, "setup/admin.html", data)
2022-02-17 19:25:11 +00:00
@transaction.atomic
def post(self, request):
"""Create that user"""
site = models.SiteSettings.get()
# you can't create an admin user if you're in config mode
if not site.install_mode:
raise PermissionDenied()
form = forms.RegisterForm(request.POST)
if not form.is_valid():
data = {"register_form": form}
return TemplateResponse(request, "setup/admin.html", data)
localname = form.data["localname"].strip()
username = f"{localname}@{DOMAIN}"
user = models.User.objects.create_superuser(
username,
form.data["email"],
form.data["password"],
localname=localname,
local=True,
deactivation_reason=None,
is_active=True,
)
# Set "admin" role
try:
user.groups.set(Group.objects.filter(name__in=["admin", "moderator"]))
except Group.DoesNotExist:
# this should only happen in tests
pass
login(request, user)
site.install_mode = False
site.save()
return redirect("settings-site")