2017-02-10 02:45:45 +01:00
|
|
|
from django.db import models
|
|
|
|
|
|
|
|
from dncore.models import User
|
2017-02-24 03:43:59 +01:00
|
|
|
from .validators import HandleValidator, HandleValidatorWithSuffix
|
2017-02-10 02:45:45 +01:00
|
|
|
|
2017-02-15 02:35:46 +01:00
|
|
|
|
|
|
|
class WhoisObject(models.Model):
|
2017-02-24 03:43:59 +01:00
|
|
|
class Meta:
|
|
|
|
abstract = True
|
|
|
|
handleSuffix = ""
|
2017-02-15 02:35:46 +01:00
|
|
|
|
2017-02-23 22:28:06 +01:00
|
|
|
handle = models.SlugField(max_length=32, unique=True, verbose_name='handle', validators=[HandleValidator()])
|
|
|
|
created = models.DateTimeField(auto_now_add=True)
|
|
|
|
last_modified = models.DateTimeField(auto_now_add=True)
|
2017-02-15 02:35:46 +01:00
|
|
|
|
2017-02-24 03:43:59 +01:00
|
|
|
def __str__(self):
|
|
|
|
return self.handle
|
|
|
|
|
|
|
|
def genHandle(self, main=None):
|
|
|
|
if not main:
|
|
|
|
main = self.name
|
|
|
|
prefix = ""
|
|
|
|
if " " in main:
|
|
|
|
parts = main.split(" ")
|
|
|
|
prefix = "".join(map(lambda _x: _x[0], parts))
|
|
|
|
if len(prefix) < 3 and len(parts[-1]) > 1:
|
|
|
|
prefix += parts[-1][1:4 - len(prefix)]
|
|
|
|
else:
|
|
|
|
prefix = main[0:3]
|
|
|
|
prefix = prefix.upper()
|
|
|
|
|
|
|
|
i = 1
|
|
|
|
handle = "%s%%d-%s" % (prefix, self.handleSuffix)
|
|
|
|
while True:
|
|
|
|
try:
|
|
|
|
prefix
|
|
|
|
self.__class__.objects.get(handle=handle % i)
|
|
|
|
i += 1
|
|
|
|
except self.DoesNotExist:
|
|
|
|
break
|
|
|
|
|
|
|
|
return handle % i
|
|
|
|
|
|
|
|
def handleAuto(self, name=None):
|
|
|
|
if self.handle == "AUTO":
|
|
|
|
self.handle = self.genHandle(name)
|
|
|
|
|
2017-02-15 02:35:46 +01:00
|
|
|
|
|
|
|
class Maintainer(WhoisObject):
|
2017-02-24 03:43:59 +01:00
|
|
|
handleSuffix = "MNT"
|
|
|
|
|
2017-02-10 02:45:45 +01:00
|
|
|
auth = models.ManyToManyField(User)
|
2017-02-24 03:43:59 +01:00
|
|
|
handle = models.SlugField(max_length=32, unique=True, verbose_name='handle', validators=[HandleValidatorWithSuffix('MNT')])
|
2017-02-23 22:28:06 +01:00
|
|
|
description = models.CharField(max_length=64, blank=True)
|
2017-02-15 02:35:46 +01:00
|
|
|
|
|
|
|
admin_c = models.ManyToManyField("Contact")
|
|
|
|
|
2017-02-24 03:43:59 +01:00
|
|
|
# autoInclude = models.BooleanField(default=True)
|
|
|
|
|
2017-02-15 02:35:46 +01:00
|
|
|
|
2017-02-24 03:43:59 +01:00
|
|
|
|
|
|
|
class MntdObject(WhoisObject):
|
2017-02-15 02:35:46 +01:00
|
|
|
class Meta:
|
|
|
|
abstract = True
|
|
|
|
|
2017-02-24 03:43:59 +01:00
|
|
|
mnt_by = models.ManyToManyField(Maintainer)
|
|
|
|
|
2017-02-15 02:35:46 +01:00
|
|
|
|
|
|
|
class Contact(MntdObject):
|
2017-02-24 03:43:59 +01:00
|
|
|
handleSuffix = "DN"
|
2017-02-15 02:35:46 +01:00
|
|
|
TYPE = (('person', 'person'), ('role', 'role'))
|
|
|
|
|
|
|
|
name = models.CharField(max_length=128)
|
|
|
|
|
2017-02-24 03:43:59 +01:00
|
|
|
|
2017-02-21 20:45:44 +01:00
|
|
|
class ASBlock(MntdObject):
|
2017-02-24 03:43:59 +01:00
|
|
|
handleSuffix = "ASB"
|
|
|
|
|
2017-02-21 20:45:44 +01:00
|
|
|
parent_block = models.ForeignKey("ASBlock", models.CASCADE, null=True, blank=True, default=None)
|
|
|
|
description = models.CharField(max_length=64, blank=True)
|
2017-02-15 02:35:46 +01:00
|
|
|
|
2017-02-24 03:43:59 +01:00
|
|
|
|
2017-02-21 20:45:44 +01:00
|
|
|
class ASNumber(MntdObject):
|
2017-02-24 03:43:59 +01:00
|
|
|
handleSuffix = "AS"
|
|
|
|
|
2017-02-15 02:35:46 +01:00
|
|
|
number = models.PositiveIntegerField(unique=True, db_index=True)
|
2017-02-21 20:45:44 +01:00
|
|
|
volatile = models.BooleanField(default=False)
|
|
|
|
asblock = models.ForeignKey(ASBlock, models.CASCADE)
|
|
|
|
description = models.CharField(max_length=64, blank=True)
|
|
|
|
|
2017-02-23 22:28:06 +01:00
|
|
|
mnt_lower = models.ManyToManyField(Maintainer, related_name='lower_asnumber_set')
|
2017-02-15 02:35:46 +01:00
|
|
|
|
|
|
|
|
|
|
|
class InetNum(WhoisObject):
|
2017-02-24 03:43:59 +01:00
|
|
|
handleSuffix = "NET"
|
|
|
|
|
2017-02-15 02:35:46 +01:00
|
|
|
PROTO = (('ipv4', 'ipv4'), ('ipv6', 'ipv6'))
|
|
|
|
protocol = models.CharField(max_length=4, choices=PROTO)
|
|
|
|
netmask = models.PositiveIntegerField()
|
2017-02-21 20:45:44 +01:00
|
|
|
parent_range = models.ForeignKey("InetNum", models.CASCADE, null=True, blank=True, default=None)
|
|
|
|
description = models.CharField(max_length=64, blank=True)
|
2017-02-15 02:35:46 +01:00
|
|
|
|
2017-02-21 20:45:44 +01:00
|
|
|
mnt_lower = models.ManyToManyField(Maintainer)
|