from django.shortcuts import render from django.urls import reverse_lazy 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 DomainDetail(LoginRequiredMixin, DetailView): model = Domain slug_field = "name" slug_url_kwarg = "domain" context_object_name = "domain" template_name = "domains/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 #slug_field = "name" #slug_url_kwarg = "domain" #context_object_name = "nameserver" template_name = "domains/handle_show.html" class NameserverEdit(MntGenericMixin, LoginRequiredMixin, UpdateView): model = Nameserver form_class = NameserverForm #slug_field = "name" #slug_url_kwarg = "domain" 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 #slug_field = "name" #slug_url_kwarg = "domain" 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 ReverseZoneDetail(LoginRequiredMixin, DetailView): model = ReverseZone #slug_field = "name" #slug_url_kwarg = "domain" #context_object_name = "nameserver" template_name = "domains/handle_show.html" class ReverseZoneEdit(MntGenericMixin, LoginRequiredMixin, UpdateView): model = ReverseZone form_class = ReverseZoneForm #slug_field = "name" #slug_url_kwarg = "domain" 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") #slug_field = "name" #slug_url_kwarg = "domain" 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()