from django.shortcuts import render from django.db.models import Q from django.contrib.auth.decorators import login_required from django.http import HttpResponseRedirect from django.urls import reverse, reverse_lazy from django.views.generic import DetailView, CreateView, UpdateView from django.contrib.auth.mixins import LoginRequiredMixin from .models import Maintainer, Contact, InetNum, ASBlock, ASNumber from .forms import MntForm, MntInitialForm, ContactForm, ContactInitialForm, InetNumForm from .generic import DeleteCheckView @login_required def dbDashboard(request): mnts = request.user.maintainer_set.all() contacts = Contact.objects.filter(mnt_by__in=mnts) netblocks = InetNum.objects.filter(Q(mnt_by__in=mnts) | Q(mnt_lower__in=mnts)).distinct() asblocks = ASBlock.objects.filter(Q(mnt_by__in=mnts) | Q(mnt_lower__in=mnts)).distinct() asnumbers = ASNumber.objects.filter(Q(mnt_by__in=mnts) | Q(mnt_lower__in=mnts)).distinct() mntForm = contactForm = None if mnts.count() == 0: mntForm = contactForm = None if request.method == "POST": mntForm = MntInitialForm(user=request.user, data=request.POST, prefix="mnt") contactForm = ContactInitialForm(user=request.user, person=True, data=request.POST, prefix="contact") if mntForm.is_valid() and contactForm.is_valid(): mnt = mntForm.save(commit=False) mnt.handleAuto(request.user.username) mnt.save() contact = contactForm.save(commit=False) contact.handleAuto() contact.type = Contact.TYPE_PERSON contact.save() contact.mnt_by.add(mnt.id) contact.save() mnt.auth.add(request.user.id) mnt.admin_c.add(contact.id) mnt.save() return HttpResponseRedirect(reverse("whoisdb:dashboard")) else: mntForm = MntInitialForm(user=request.user, prefix="mnt", initial={'handle': 'AUTO', 'description': 'Primary maintainer of %s' % request.user.username}) contactForm = ContactInitialForm(user=request.user, person=True, initial={'handle': 'AUTO', 'name': request.user.username.capitalize()}, prefix='contact') print(asnumbers, asblocks, netblocks, mnts) return render(request, "whoisdb/overview.html", {"mnts": mnts, "contacts": contacts, "mntForm": mntForm, "contactForm": contactForm, "netblocks": netblocks, "asblocks": asblocks, "asnumbers": asnumbers}) class MaintainerCreate(LoginRequiredMixin, CreateView): template_name = "whoisdb/obj_create.html" form_class = MntForm def get_form_kwargs(self, *args, **kwargs): kwargs = super(MaintainerCreate, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user kwargs["initial"] = { "handle": "AUTO", } return kwargs def form_valid(self, form): self.object = form.save(commit=False) self.object.handleAuto(self.request.user.username) self.object.save() self.object.auth.add(self.request.user) self.object.save() return super(MaintainerCreate, self).form_valid(form) class MaintainerEdit(LoginRequiredMixin, UpdateView): template_name = "whoisdb/maintainer_edit.html" model = Maintainer form_class = MntForm slug_field = "handle" slug_url_kwarg = "handle" def get_form_kwargs(self, *args, **kwargs): kwargs = super(MaintainerEdit, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user return kwargs def get_queryset(self): return self.model.objects.filter(auth=self.request.user) class MaintainerDelete(LoginRequiredMixin, DeleteCheckView): template_name = "whoisdb/obj_delete.html" model = Maintainer slug_field = "handle" slug_url_kwarg = "handle" success_url = reverse_lazy("whoisdb:dashboard") def get_queryset(self): return self.model.objects.filter(auth=self.request.user) class MaintainerDetail(LoginRequiredMixin, DetailView): model = Maintainer slug_field = "handle" slug_url_kwarg = "handle" context_object_name = "mnt" class ContactDetail(DetailView): model = Contact slug_field = "handle" slug_url_kwarg = "handle" context_object_name = "contact" class ContactEdit(LoginRequiredMixin, UpdateView): template_name = "whoisdb/obj_edit.html" model = Contact form_class = ContactForm slug_field = "handle" slug_url_kwarg = "handle" def get_form_kwargs(self, *args, **kwargs): kwargs = super(ContactEdit, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user return kwargs def get_queryset(self): # FIXME: we need all maintainers to be available. autofill own maintainers return self.model.objects.filter(mnt_by__in=self.request.user.maintainer_set.all()) class ContactCreate(LoginRequiredMixin, CreateView): template_name = "whoisdb/obj_create.html" form_class = ContactForm def get_form_kwargs(self, *args, **kwargs): kwargs = super(ContactCreate, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user kwargs["initial"] = { "handle": "AUTO", "type": Contact.TYPE_PERSON } return kwargs class ContactDelete(LoginRequiredMixin, DeleteCheckView): template_name = "whoisdb/obj_delete.html" model = Contact slug_field = "handle" slug_url_kwarg = "handle" success_url = reverse_lazy("whoisdb:dashboard") def get_queryset(self): return self.model.objects.filter(mnt_by__in=self.request.user.maintainer_set.all()) # InetNum class InetNumCreate(LoginRequiredMixin, CreateView): template_name = "whoisdb/obj_create.html" form_class = InetNumForm def get_form_kwargs(self, *args, **kwargs): kwargs = super(InetNumCreate, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user kwargs["initial"] = { "handle": "AUTO", } return kwargs class InetNumDetail(DetailView): model = InetNum slug_field = "handle" slug_url_kwarg = "handle" context_object_name = "inetnum" class InetNumEdit(LoginRequiredMixin, UpdateView): template_name = "whoisdb/obj_edit.html" model = InetNum form_class = InetNumForm slug_field = "handle" slug_url_kwarg = "handle" def get_form_kwargs(self, *args, **kwargs): kwargs = super(InetNumEdit, self).get_form_kwargs(*args, **kwargs) kwargs["user"] = self.request.user mnts = self.request.user.maintainer_set.all() if not any(mnt in self.object.mnt_by.all() for mnt in mnts): # we are in mnt_lower kwargs["lower"] = True kwargs["initial"] = {'prefix': str(self.object.getNetwork())} return kwargs def get_queryset(self): # FIXME: we need all maintainers to be available. autofill own maintainers mnts = self.request.user.maintainer_set.all() return self.model.objects.filter(Q(mnt_by__in=mnts) | Q(mnt_lower__in=mnts)).distinct() class InetNumDelete(LoginRequiredMixin, DeleteCheckView): template_name = "whoisdb/obj_delete.html" model = InetNum slug_field = "handle" slug_url_kwarg = "handle" success_url = reverse_lazy("whoisdb:dashboard") def get_queryset(self): mnts = self.request.user.maintainer_set.all() return self.model.objects.filter(Q(mnt_by__in=mnts) | Q(mnt_lower__in=mnts))