mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-09-27 05:50:05 +00:00
99 lines
3.4 KiB
Python
99 lines
3.4 KiB
Python
|
""" move your account somewhere else """
|
||
|
|
||
|
from django.core.exceptions import PermissionDenied
|
||
|
from django.contrib.auth.decorators import login_required
|
||
|
from django.shortcuts import redirect
|
||
|
from django.template.response import TemplateResponse
|
||
|
from django.utils.decorators import method_decorator
|
||
|
from django.views import View
|
||
|
from django.views.decorators.http import require_POST
|
||
|
|
||
|
from bookwyrm import forms, models
|
||
|
from bookwyrm.views.helpers import handle_remote_webfinger
|
||
|
|
||
|
|
||
|
# pylint: disable=no-self-use
|
||
|
@method_decorator(login_required, name="dispatch")
|
||
|
class MoveUser(View):
|
||
|
"""move user view"""
|
||
|
|
||
|
def get(self, request):
|
||
|
"""move page for a user"""
|
||
|
data = {
|
||
|
"form": forms.MoveUserForm(),
|
||
|
"user": request.user,
|
||
|
}
|
||
|
return TemplateResponse(request, "preferences/move_user.html", data)
|
||
|
|
||
|
def post(self, request):
|
||
|
"""Packing your stuff and moving house"""
|
||
|
form = forms.MoveUserForm(request.POST, instance=request.user)
|
||
|
user = models.User.objects.get(id=request.user.id)
|
||
|
|
||
|
if form.is_valid() and user.check_password(form.cleaned_data["password"]):
|
||
|
username = form.cleaned_data["target"]
|
||
|
target = handle_remote_webfinger(username)
|
||
|
|
||
|
try:
|
||
|
models.MoveUser.objects.create(
|
||
|
user=request.user, object=request.user.remote_id, target=target
|
||
|
)
|
||
|
|
||
|
return redirect("/")
|
||
|
|
||
|
except (PermissionDenied):
|
||
|
form.errors["target"] = [
|
||
|
"You must set this server's user as an alias on the user you wish to move to before moving"
|
||
|
]
|
||
|
data = {"form": form, "user": request.user}
|
||
|
return TemplateResponse(request, "preferences/move_user.html", data)
|
||
|
|
||
|
form.errors["password"] = ["Invalid password"]
|
||
|
data = {"form": form, "user": request.user}
|
||
|
return TemplateResponse(request, "preferences/move_user.html", data)
|
||
|
|
||
|
|
||
|
# pylint: disable=no-self-use
|
||
|
@method_decorator(login_required, name="dispatch")
|
||
|
class AliasUser(View):
|
||
|
"""alias user view"""
|
||
|
|
||
|
def get(self, request):
|
||
|
"""move page for a user"""
|
||
|
data = {
|
||
|
"form": forms.AliasUserForm(),
|
||
|
"user": request.user,
|
||
|
}
|
||
|
return TemplateResponse(request, "preferences/alias_user.html", data)
|
||
|
|
||
|
def post(self, request):
|
||
|
"""Creating a nom de plume"""
|
||
|
form = forms.AliasUserForm(request.POST, instance=request.user)
|
||
|
user = models.User.objects.get(id=request.user.id)
|
||
|
|
||
|
if form.is_valid() and user.check_password(form.cleaned_data["password"]):
|
||
|
username = form.cleaned_data["username"]
|
||
|
remote_user = handle_remote_webfinger(username)
|
||
|
|
||
|
if remote_user is None:
|
||
|
form.errors["username"] = ["Username does not exist"]
|
||
|
data = {"form": form, "user": request.user}
|
||
|
return TemplateResponse(request, "preferences/alias_user.html", data)
|
||
|
|
||
|
user.also_known_as.add(remote_user.id)
|
||
|
|
||
|
return redirect("prefs-alias")
|
||
|
|
||
|
form.errors["password"] = ["Invalid password"]
|
||
|
data = {"form": form, "user": request.user}
|
||
|
return TemplateResponse(request, "preferences/alias_user.html", data)
|
||
|
|
||
|
|
||
|
@login_required
|
||
|
@require_POST
|
||
|
def remove_alias(request):
|
||
|
"""remove an alias from the user profile"""
|
||
|
|
||
|
request.user.also_known_as.remove(request.POST["alias"])
|
||
|
return redirect("prefs-alias")
|