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)) asblocks = ASBlock.objects.filter(Q(mnt_by__in=mnts)|Q(mnt_lower__in=mnts)) asnumbers = ASNumber.objects.filter(Q(mnt_by__in=mnts)|Q(mnt_lower__in=mnts)) 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", "type": Contact.TYPE_PERSON } return kwargs