aboutsummaryrefslogtreecommitdiff
path: root/portal-gui/rpki/myrpki/models.py
blob: 5c765eae08c9bd920223a8e2f1d7d2dde92f914a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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 ):
    name = models.CharField( unique=True, max_length=255 )
    data = models.TextField()
    def __unicode__( self ):
	return self.name

class Conf( models.Model ):
    '''This is the center of the universe.
    '''
    handle = HandleField( unique=True, db_index=True )
    repository_bpki_cert = models.ForeignKey( Cert,
                                        related_name='conf_bpki_cert' )
    my_bpki_ta = models.ForeignKey( Cert, related_name='conf_my_ta' )
    repository_handle = HandleField()
    owner = models.OneToOneField( Group )
    def __unicode__( self ):
	return self.handle

class AddressRange( models.Model ):
    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 ):
    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 )
    handle = HandleField()
    validity = models.DateTimeField()
    bpki_cert = models.ForeignKey( Cert )
    address_range = models.ManyToManyField( AddressRange )
    asn = models.ManyToManyField( Asn )
    def __unicode__( self ):
	return u"%s's child %s" % ( self.conf, self.handle )

class Parent( models.Model ):
    conf = models.ForeignKey( Conf )
    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 )

# This table is really owned by the publication server.
#class PubClient( models.Model ):
#    handle = models.CharField( unique=True, max_length=255 )
#    bpki_cert = models.ForeignKey( Cert )
#    sia_base = models.URLField( verify_exists=False )

class Roa( models.Model ):
    conf = models.ForeignKey( Conf )
    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 )