diff options
Diffstat (limited to 'portal-gui/rpkigui/myrpki/models.py')
-rw-r--r-- | portal-gui/rpkigui/myrpki/models.py | 166 |
1 files changed, 85 insertions, 81 deletions
diff --git a/portal-gui/rpkigui/myrpki/models.py b/portal-gui/rpkigui/myrpki/models.py index 85e23228..d062698e 100644 --- a/portal-gui/rpkigui/myrpki/models.py +++ b/portal-gui/rpkigui/myrpki/models.py @@ -1,104 +1,108 @@ from django.db import models from django.contrib.auth.models import Group -# TO DO: -# URL: text? -class HandleField( models.CharField ): - def __init__( self, **kwargs ): - models.CharField.__init__( self, max_length=255, **kwargs ) +class HandleField(models.CharField): + def __init__(self, **kwargs): + models.CharField.__init__(self, max_length=255, **kwargs) class IPAddressField( models.CharField ): def __init__( self, **kwargs ): - models.CharField.__init__( self, max_length=40, **kwargs ) - -class Cert( models.Model ): - '''A certificate, relating to a single configuration.''' - conf = models.ForeignKey( 'Conf', related_name='certs' ) - name = models.CharField( unique=True, max_length=255 ) - data = models.TextField() - def __unicode__( self ): - return "%s's %s" % ( self.conf, self.name ) + models.CharField.__init__(self, max_length=40, **kwargs) -class Conf( models.Model ): +class Conf(models.Model): '''This is the center of the universe, also known as a place to have a handle on a resource-holding entity. It's the <self> - in the rpkid schema. - ''' - handle = HandleField( unique=True, db_index=True ) - repository_bpki_cert = models.ForeignKey( Cert, - related_name='conf_bpki_cert', - null=True, blank=True ) - my_bpki_ta = models.ForeignKey( Cert, related_name='conf_my_ta', - null=True, blank=True ) - repository_handle = HandleField() - owner = models.OneToOneField( Group ) - def __unicode__( self ): + in the rpkid schema.''' + handle = HandleField(unique=True, db_index=True) + owner = models.OneToOneField(Group) + + def __unicode__(self): return self.handle -class AddressRange( models.Model ): - '''An address range / prefix.''' - lo = IPAddressField() - hi = IPAddressField() - parent = models.ForeignKey( 'AddressRange', related_name='children', - blank=True, null=True ) - def __unicode__( self ): - return u"address range %s-%s" % ( self.lo, self.hi ) +class AddressRange(models.Model): + '''An address range/prefix.''' + lo = IPAddressField(blank=False) + hi = IPAddressField(blank=False) + # parent address range + parent = models.ForeignKey('AddressRange', related_name='children', + blank=True, null=True) + allocated = models.ForeignKey('Child', related_name='address_range', + blank=True, null=True) + + def __unicode__(self): + if self.lo == self.hi: + return u"address %s" % (self.lo,) + else: + return u"address range %s-%s" % (self.lo, self.hi) + + def get_absolute_url(self): + return u'/myrpki/address/%d' % (self.pk,) -class Asn( models.Model ): +class Asn(models.Model): '''An ASN or range thereof.''' - min = models.IntegerField() - max = models.IntegerField() - parent = models.ForeignKey( 'Asn', related_name='children', - blank=True, null=True ) - def __unicode__( self ): - if self.min == self.max: - return u"ASN %d" % ( self.min ) + lo = models.IntegerField(blank=False) + hi = models.IntegerField(blank=False) + # parent asn range + parent = models.ForeignKey('Asn', related_name='children', + blank=True, null=True) + allocated = models.ForeignKey('Child', related_name='asn', + blank=True, null=True) + + def __unicode__(self): + if self.lo == self.hi: + return u"ASN %d" % (self.lo,) else: - return u"ASNs %d-%d" % ( self.min, self.max ) + return u"ASNs %d-%d" % (self.lo, self.hi) -class Child( models.Model ): - conf = models.ForeignKey( Conf, related_name='children' ) - handle = HandleField() + def get_absolute_url(self): + return u'/myrpki/asn/%d' % (self.pk,) + +class Child(models.Model): + conf = models.ForeignKey(Conf, related_name='children') + handle = HandleField() # parent's name for child validity = models.DateTimeField() - bpki_cert = models.ForeignKey( Cert, related_name='child_bpki' ) - # It may seem strange that the address_range and asn fields - # are ManyToManyFields. Why not simply a ForeignKey from an Asn - # and an AddressRange? This is for transition. When a resource - # is moving from one child to another, we may have to be delegating - # it to both children at once. - address_range = models.ManyToManyField( AddressRange, blank=True ) - asn = models.ManyToManyField( Asn, blank=True ) - def __unicode__( self ): - return u"%s's child %s" % ( self.conf, self.handle ) + + def __unicode__(self): + return u"%s's child %s" % (self.conf, self.handle) + + def get_absolute_url(self): + return u'/myrpki/child/%s' % (self.handle,) + class Meta: verbose_name_plural = "children" + # children of a specific configuration should be unique + unique_together = ('conf', 'handle') + +class Parent(models.Model): + conf = models.ForeignKey(Conf, related_name='parents') + handle = HandleField() +# service_uri = models.URLField( verify_exists=False ) +# sia_base = models.URLField( verify_exists=False ) + + # resources granted from my parent + address_range = models.ManyToManyField(AddressRange, blank=True, + related_name='from_parent') + asn = models.ManyToManyField(Asn, related_name='from_parent', blank=True) + + def __unicode__(self): + return u"%s's parent %s" % (self.conf, self.handle) + def get_absolute_url(self): + return u'/myrpki/parent/%s' % (self.handle,) -class Parent( models.Model ): - conf = models.ForeignKey( Conf, related_name='parents' ) - handle = HandleField( unique=True ) - service_uri = models.URLField( verify_exists=False ) - cms_bpki_cert = models.ForeignKey( Cert, related_name='parent_cms' ) - https_bpki_cert = models.ForeignKey( Cert, related_name='parent_https' ) - my_handle = HandleField() - sia_base = models.URLField( verify_exists=False ) - # It may seem strange that the address_range and asn fields - # are ManyToManyFields. Why not simply a ForeignKey from an Asn - # and an AddressRange? This is for transition. When a resource - # is moving from one parent to another, we may be receiving the - # resource from both parents at once. - address_range = models.ManyToManyField( AddressRange, - related_name='from_parent' ) - asn = models.ManyToManyField( Asn, related_name='from_parent' ) - def __unicode__( self ): - return u"%s's parent %s" % ( self.conf, self.handle ) - -class Roa( models.Model ): - conf = models.ForeignKey( Conf, related_name='roas' ) - prefix = models.ManyToManyField( AddressRange ) + class Meta: + # parents of a specific configuration should be unique + unique_together = ('conf', 'handle') + +class Roa(models.Model): + conf = models.ForeignKey(Conf, related_name='roas') + prefix = models.ManyToManyField(AddressRange) max_len = models.IntegerField() asn = models.IntegerField() - active = models.BooleanField() comments = models.TextField() - def __unicode__( self ): - return u"%s's ROA for %d" % ( self.conf, self.asn ) + + def __unicode__(self): + return u"%s's ROA for %d" % (self.conf, self.asn) + + def get_absolute_url(self): + return u'/myrpki/roa/%d' % (self.pk, ) |