From 8ca36fd95800907a1c7f3c9efedd0085b8f0ec9b Mon Sep 17 00:00:00 2001 From: Andrew Godwin Date: Fri, 25 Nov 2022 17:52:43 -0700 Subject: Add federation admin page --- users/views/admin/__init__.py | 1 + users/views/admin/federation.py | 57 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 users/views/admin/federation.py (limited to 'users/views') diff --git a/users/views/admin/__init__.py b/users/views/admin/__init__.py index 231e027..d1a4db1 100644 --- a/users/views/admin/__init__.py +++ b/users/views/admin/__init__.py @@ -10,6 +10,7 @@ from users.views.admin.domains import ( # noqa DomainEdit, Domains, ) +from users.views.admin.federation import FederationEdit, FederationRoot # noqa from users.views.admin.settings import BasicSettings # noqa diff --git a/users/views/admin/federation.py b/users/views/admin/federation.py new file mode 100644 index 0000000..da8209a --- /dev/null +++ b/users/views/admin/federation.py @@ -0,0 +1,57 @@ +from django import forms +from django.db import models +from django.shortcuts import get_object_or_404, redirect +from django.utils.decorators import method_decorator +from django.views.generic import FormView, TemplateView + +from users.decorators import admin_required +from users.models import Domain + + +@method_decorator(admin_required, name="dispatch") +class FederationRoot(TemplateView): + + template_name = "admin/federation.html" + + def get_context_data(self): + return { + "domains": Domain.objects.filter(local=False) + .annotate(num_users=models.Count("identities")) + .order_by("domain"), + "section": "federation", + } + + +@method_decorator(admin_required, name="dispatch") +class FederationEdit(FormView): + + template_name = "admin/federation_edit.html" + extra_context = {"section": "federation"} + + class form_class(forms.Form): + blocked = forms.BooleanField( + help_text="If this domain is blocked from interacting with this server", + widget=forms.Select(choices=[(True, "Blocked"), (False, "Not Blocked")]), + required=False, + ) + + def dispatch(self, request, domain): + self.domain = get_object_or_404( + Domain.objects.filter(local=False), domain=domain + ) + return super().dispatch(request) + + def get_context_data(self, *args, **kwargs): + context = super().get_context_data(*args, **kwargs) + context["domain"] = self.domain + return context + + def form_valid(self, form): + self.domain.blocked = form.cleaned_data["blocked"] + self.domain.save() + return redirect(Domain.urls.root_federation) + + def get_initial(self): + return { + "blocked": self.domain.blocked, + } -- cgit v1.2.3