aboutsummaryrefslogtreecommitdiff
path: root/portal-gui/rpki/myrpki
diff options
context:
space:
mode:
Diffstat (limited to 'portal-gui/rpki/myrpki')
-rw-r--r--portal-gui/rpki/myrpki/dashboardurls.py6
-rw-r--r--portal-gui/rpki/myrpki/models.py47
-rw-r--r--portal-gui/rpki/myrpki/urls.py9
-rw-r--r--portal-gui/rpki/myrpki/views.py9
4 files changed, 57 insertions, 14 deletions
diff --git a/portal-gui/rpki/myrpki/dashboardurls.py b/portal-gui/rpki/myrpki/dashboardurls.py
new file mode 100644
index 00000000..ed11798e
--- /dev/null
+++ b/portal-gui/rpki/myrpki/dashboardurls.py
@@ -0,0 +1,6 @@
+from django.conf.urls.defaults import *
+import views
+
+urlpatterns = patterns('',
+ (r'^$', views.dashboard ),
+)
diff --git a/portal-gui/rpki/myrpki/models.py b/portal-gui/rpki/myrpki/models.py
index 3a923ab3..5c765eae 100644
--- a/portal-gui/rpki/myrpki/models.py
+++ b/portal-gui/rpki/myrpki/models.py
@@ -12,35 +12,51 @@ class IPAddressField( models.CharField ):
models.CharField.__init__( self, max_length=40, **kwargs )
class Cert( models.Model ):
- conf = models.ForeignKey( 'Conf' )
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 Child( models.Model ):
- conf = models.ForeignKey( Conf )
- handle = HandleField()
- validity = models.DateTimeField()
- bpki_cert = models.ForeignKey( Cert )
-
-class Prefix( models.Model ):
- child = models.ForeignKey( Child )
+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 ):
- child = models.ForeignKey( Child )
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 )
@@ -50,6 +66,11 @@ class Parent( models.Model ):
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 ):
@@ -59,10 +80,10 @@ class Parent( models.Model ):
class Roa( models.Model ):
conf = models.ForeignKey( Conf )
- prefix = IPAddressField()
- len = models.IntegerField()
+ prefix = models.ManyToManyField( AddressRange )
max_len = models.IntegerField()
asn = models.IntegerField()
active = models.BooleanField()
comments = models.TextField()
- group = models.CharField( max_length=40 )
+ def __unicode__( self ):
+ return u"%s's ROA for %d" % ( self.conf, self.asn )
diff --git a/portal-gui/rpki/myrpki/urls.py b/portal-gui/rpki/myrpki/urls.py
new file mode 100644
index 00000000..f0fc56d6
--- /dev/null
+++ b/portal-gui/rpki/myrpki/urls.py
@@ -0,0 +1,9 @@
+from django.conf.urls.defaults import *
+import views
+
+urlpatterns = patterns('',
+ (r'^cert/add/$', views.cert_add ),
+ (r'^cert/(?P<id>\d+)/$', views.cert_view ),
+ (r'^cert/(?P<id>\d+)/edit/$', views.cert_edit ),
+ (r'^cert/(?P<id>\d+)/delete/$', views.cert_delete ),
+)
diff --git a/portal-gui/rpki/myrpki/views.py b/portal-gui/rpki/myrpki/views.py
index cd24ff73..bd0e5a3c 100644
--- a/portal-gui/rpki/myrpki/views.py
+++ b/portal-gui/rpki/myrpki/views.py
@@ -1,4 +1,4 @@
-from django.views.generic.create_update import create_object, update_object,
+from django.views.generic.create_update import create_object, update_object, \
delete_object
from django.views.generic.list_detail import object_detail
from django.contrib.auth.decorators import login_required
@@ -40,9 +40,16 @@ def dashboard( request ):
@login_required
def cert_add( request ):
+ # todo: enforce that the saved form points to this conf
return create_object( request, form_class=forms.CertForm )
@login_required
+def cert_view( request, id ):
+ handle = handle( request )
+ queryset = Cert.objects.filter( conf=handle )
+ return object_detail( queryset=queryset, object_id=id )
+
+@login_required
def cert_edit( request, id ):
cert = get_object_or_404( models.Cert, pk=id )
# make sure it is owned by the current handle