from django.shortcuts import render from django.urls import reverse_lazy, reverse from django.contrib.auth.decorators import login_required from django.views.generic import DetailView, CreateView, UpdateView from django.contrib.auth.mixins import LoginRequiredMixin from django.db.models import Q from whoisdb.generic import MntGenericMixin, DeleteCheckView from .models import Domain, Nameserver, ReverseZone from .forms import DomainForm, NameserverForm, ReverseZoneForm @login_required def overview(request): mnts = request.user.maintainer_set.all() # get all domains and nameservers domains = Domain.objects.filter(mnt_by__in=mnts).distinct() nameservers = Nameserver.objects.filter(mnt_by__in=mnts).distinct() reversezones = ReverseZone.objects.filter(Q(parentNet__mnt_by__in=mnts) | Q(parentNet__mnt_lower__in=mnts)).distinct() return render(request, "domains/overview.html", {"mnts": mnts, "domains": domains, "nameservers": nameservers, 'reversezones': reversezones}) class DomainCreate(LoginRequiredMixin, CreateView): template_name = "domains/obj_create.html" form_class = DomainForm def get_form_kwargs(self, *args, **kwargs): kwargs = super(DomainCreate, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user return kwargs class DomainCheck(LoginRequiredMixin, DetailView): model = Domain slug_field = "name" slug_url_kwarg = "domain" context_object_name = "domain" template_name = "domains/dns_check.html" def get_context_data(self, **kwargs): ctx = super(DomainCheck, self).get_context_data(**kwargs) ctx["key"] = self.object.name ctx["apiUrl"] = reverse("api:domain-check") return ctx class DomainDetail(LoginRequiredMixin, DetailView): model = Domain slug_field = "name" slug_url_kwarg = "domain" context_object_name = "domain" template_name = "whoisdb/handle_show.html" class DomainEdit(MntGenericMixin, LoginRequiredMixin, UpdateView): model = Domain form_class = DomainForm slug_field = "name" slug_url_kwarg = "domain" template_name = "domains/obj_edit.html" def get_form_kwargs(self, *args, **kwargs): kwargs = super(DomainEdit, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user return kwargs class DomainDelete(MntGenericMixin, LoginRequiredMixin, DeleteCheckView): template_name = "domains/obj_delete.html" model = Domain slug_field = "name" slug_url_kwarg = "domain" success_url = reverse_lazy("domains:overview") class NameserverCreate(LoginRequiredMixin, CreateView): template_name = "domains/obj_create.html" form_class = NameserverForm def get_form_kwargs(self, *args, **kwargs): kwargs = super(NameserverCreate, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user return kwargs class NameserverDetail(LoginRequiredMixin, DetailView): model = Nameserver template_name = "whoisdb/handle_show.html" class NameserverEdit(MntGenericMixin, LoginRequiredMixin, UpdateView): model = Nameserver form_class = NameserverForm template_name = "domains/obj_edit.html" def get_form_kwargs(self, *args, **kwargs): kwargs = super(NameserverEdit, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user return kwargs class NameserverDelete(MntGenericMixin, LoginRequiredMixin, DeleteCheckView): template_name = "domains/obj_delete.html" model = Nameserver success_url = reverse_lazy("domains:overview") class ReverseZoneCreate(LoginRequiredMixin, CreateView): template_name = "domains/obj_create.html" form_class = ReverseZoneForm def get_form_kwargs(self, *args, **kwargs): kwargs = super(ReverseZoneCreate, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user return kwargs class ReverseZoneCheck(LoginRequiredMixin, DetailView): model = ReverseZone template_name = "domains/dns_check.html" def get_context_data(self, **kwargs): ctx = super(ReverseZoneCheck, self).get_context_data(**kwargs) ctx["key"] = self.object.id ctx["apiUrl"] = reverse("api:reversezone-check") return ctx class ReverseZoneDetail(LoginRequiredMixin, DetailView): model = ReverseZone template_name = "whoisdb/handle_show.html" class ReverseZoneEdit(MntGenericMixin, LoginRequiredMixin, UpdateView): model = ReverseZone form_class = ReverseZoneForm template_name = "domains/obj_edit.html" def get_form_kwargs(self, *args, **kwargs): kwargs = super(ReverseZoneEdit, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user if "initial" not in kwargs: kwargs["initial"] = {} kwargs["initial"]["prefix"] = self.object.prefix() return kwargs def get_queryset(self): mnts = self.request.user.maintainer_set.all() return ReverseZone.objects.filter(Q(parentNet__mnt_by__in=mnts) | Q(parentNet__mnt_lower__in=mnts)).distinct() class ReverseZoneDelete(LoginRequiredMixin, DeleteCheckView): template_name = "domains/obj_delete.html" model = ReverseZone success_url = reverse_lazy("domains:overview") def get_queryset(self): mnts = self.request.user.maintainer_set.all() return ReverseZone.objects.filter(Q(parentNet__mnt_by__in=mnts) | Q(parentNet__mnt_lower__in=mnts)).distinct()