diff --git a/api/urls.py b/api/urls.py index ccf5776..40c4ca5 100644 --- a/api/urls.py +++ b/api/urls.py @@ -5,5 +5,9 @@ from . import views as api_views urlpatterns = [ url(r'asblock/free-as/$', api_views.asblockFreeAS, name='asblock-free-as'), url(r'asblock/free-subnet/$', api_views.freeSubnet, name='inetnum-free-subnet'), + url(r'inetnum/get-subnet/$', api_views.getSubnet, name='inetnum-get-subnet'), + + url(r'domain/check/$', api_views.checkDomain, name='domain-check'), + url(r'rzone/check/$', api_views.checkRzone, name='rzone-check'), ] diff --git a/api/views.py b/api/views.py index 0359f73..7b6a891 100644 --- a/api/views.py +++ b/api/views.py @@ -2,8 +2,11 @@ from django.http import JsonResponse from django.core.exceptions import ValidationError from django.contrib.auth.views import login_required +from django.db.models import Q from whoisdb.models import ASBlock, ASNumber, InetNum +from domains.models import Domain, ReverseZone +from dnmgmt.settings import TLD_NAMESERVERS @login_required def asblockFreeAS(request): @@ -46,6 +49,8 @@ def asblockFreeAS(request): except ValidationError as e: ret["errorMsg"] = e.message return JsonResponse(ret) + + @login_required def freeSubnet(request): @@ -120,4 +125,75 @@ def freeSubnet(request): ret["success"] = True except ValidationError as e: ret["errorMsg"] = e.message + + return JsonResponse(ret) + + +@login_required +def getSubnet(request): + + ret = { + "success": False, + "errorMsg": None, + "network": None, + } + + try: + netName = request.GET.get('net', None) + mnts = request.user.maintainer_set.all() + nets = InetNum.objects.filter(Q(mnt_by__in=mnts) | Q(mnt_lower__in=mnts)).distinct() + net = nets.get(handle=netName) + + ret["success"] = True + ret["network"] = net.prefix() + except InetNum.DoesNotExist: + ret["errorMsg"] = "Chosen network does not exist" + + return JsonResponse(ret) + + +@login_required +def checkDomain(request): + ret = { + "success": False, + "errorMsg": None, + "domain": None, + "result": None, + } + + try: + domainName = Domain.fixName(request.GET.get('domain', '')) + domain = Domain.objects.get(name=domainName) + if not domain.canEdit(request.user): + raise Domain.DoesNotExist() + + ret["success"] = True + ret["domain"] = domain.name + ret["result"] = checkDomain(domain.name, TLD_NAMESERVERS, domain.nameservers.all()) + except Domain.DoesNotExist: + ret["errorMsg"] = "Domain does not exist" + + return JsonResponse(ret) + +@login_required +def checkRzone(request): + ret = { + "success": False, + "errorMsg": None, + "domain": None, + "result": None, + } + + try: + rzonePk = ReverseZone.fixName(request.GET.get('rzone', '')) + rzone = ReverseZone.objects.get(pk=rzonePk) + if not rzone.canEdit(request.user): + raise ReverseZone.DoesNotExist() + + ret["success"] = True + ret["result"] = checkDomain(rzone.name, TLD_NAMESERVERS, rzone.nameservers.all()) + except Domain.DoesNotExist: + ret["errorMsg"] = "ReverseZone does not exist" + return JsonResponse(ret) + diff --git a/dnmgmt/settings.py b/dnmgmt/settings.py index f6b95df..ca9d2e9 100644 --- a/dnmgmt/settings.py +++ b/dnmgmt/settings.py @@ -16,6 +16,9 @@ from django.contrib import messages # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +TLD_NAMESERVERS = [ + '10.100.100.100', +] # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ diff --git a/domains/models.py b/domains/models.py index d8d609a..911a6c8 100644 --- a/domains/models.py +++ b/domains/models.py @@ -68,6 +68,12 @@ class Domain(MntdObject): return reasons + @classmethod + def fixName(clazz, name): + if not name.endswith("."): + name += "." + return name.lower() + class ReverseZone(WhoisObject): handle = None diff --git a/templates/domains/obj_create.html b/templates/domains/obj_create.html index 691f4df..04538ef 100644 --- a/templates/domains/obj_create.html +++ b/templates/domains/obj_create.html @@ -17,5 +17,34 @@ + + {% endblock %}