aboutsummaryrefslogtreecommitdiff
path: root/portal-gui/rpkigui/myrpki/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'portal-gui/rpkigui/myrpki/models.py')
-rw-r--r--portal-gui/rpkigui/myrpki/models.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/portal-gui/rpkigui/myrpki/models.py b/portal-gui/rpkigui/myrpki/models.py
new file mode 100644
index 00000000..a8b11a56
--- /dev/null
+++ b/portal-gui/rpkigui/myrpki/models.py
@@ -0,0 +1,94 @@
+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 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 )
+
+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 ):
+ 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 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 )
+ else:
+ return u"ASNs %d-%d" % ( self.min, self.max )
+
+class Child( models.Model ):
+ conf = models.ForeignKey( Conf, related_name='children' )
+ handle = HandleField()
+ validity = models.DateTimeField()
+ bpki_cert = models.ForeignKey( Cert, related_name='child_bpki' )
+ 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 )
+ class Meta:
+ verbose_name_plural = "children"
+
+
+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 )
+ 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 )
+ 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 )