aboutsummaryrefslogtreecommitdiff
path: root/rpki/rpkidb/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'rpki/rpkidb/models.py')
-rw-r--r--rpki/rpkidb/models.py36
1 files changed, 35 insertions, 1 deletions
diff --git a/rpki/rpkidb/models.py b/rpki/rpkidb/models.py
index a289b7ee..f62783ee 100644
--- a/rpki/rpkidb/models.py
+++ b/rpki/rpkidb/models.py
@@ -4,6 +4,7 @@ Django ORM models for rpkid.
from __future__ import unicode_literals
from django.db import models
+import rpki.left_right
from rpki.fields import (EnumField, SundialField, BlobField,
CertificateField, KeyField, CRLField, PKCS10Field,
@@ -16,13 +17,21 @@ from rpki.fields import (EnumField, SundialField, BlobField,
# gradually. We may want to rethink this eventually, but that yak can
# wait for its shave, particularly since disallowing null should be a
# very simple change given migrations.
-
+#
+# At least for the moment, we use trivial custom managers on these
+# classes to provide a simple way of looking up objects from lxml
+# objects. Rethink this later if it proves tedious.
# "self" was a really bad name for this, but we weren't using Python
# when we named it. Perhaps "Tenant" would be a better name? Even
# means sort of the right thing, well, in French anyway.
# Eventually rename in left-right too, I guess.
+class SelfManager(models.Manager):
+ def find_from_xml(self, elt):
+ assert elt.tag == rpki.left_right.tag_self
+ return self.get(self_handle = elt.get("self_handle"))
+
class Self(models.Model):
self_handle = models.SlugField(max_length = 255)
use_hsm = models.BooleanField(default = False)
@@ -30,6 +39,12 @@ class Self(models.Model):
regen_margin = models.BigIntegerField(null = True)
bpki_cert = CertificateField(null = True)
bpki_glue = CertificateField(null = True)
+ objects = SelfManager()
+
+class BSCManager(models.Manager):
+ def find_from_xml(self, elt):
+ assert elt.tag == rpki.left_right.tag_bsc
+ return self.get(self__self_handle = elt.get("self_handle"), bsc_handle = elt.get("bsc_handle"))
class BSC(models.Model):
bsc_handle = models.SlugField(max_length = 255)
@@ -39,9 +54,15 @@ class BSC(models.Model):
signing_cert = CertificateField(null = True)
signing_cert_crl = CRLField(null = True)
self = models.ForeignKey(Self)
+ objects = BSCManager()
class Meta:
unique_together = ("self", "bsc_handle")
+class RepositoryManager(models.Manager):
+ def find_from_xml(self, elt):
+ assert elt.tag == rpki.left_right.tag_repository
+ return self.get(self__self_handle = elt.get("self_handle"), repository_handle = elt.get("repository_handle"))
+
class Repository(models.Model):
repository_handle = models.SlugField(max_length = 255)
peer_contact_uri = models.TextField(null = True)
@@ -50,9 +71,15 @@ class Repository(models.Model):
last_cms_timestamp = SundialField(null = True)
bsc = models.ForeignKey(BSC)
self = models.ForeignKey(Self)
+ objects = RepositoryManager()
class Meta:
unique_together = ("self", "repository_handle")
+class ParentManager(models.Manager):
+ def find_from_xml(self, elt):
+ assert elt.tag == rpki.left_right.tag_parent
+ return self.get(self__self_handle = elt.get("self_handle"), parent_handle = elt.get("parent_handle"))
+
class Parent(models.Model):
parent_handle = models.SlugField(max_length = 255)
bpki_cms_cert = CertificateField(null = True)
@@ -65,6 +92,7 @@ class Parent(models.Model):
self = models.ForeignKey(Self)
bsc = models.ForeignKey(BSC)
repository = models.ForeignKey(Repository)
+ objects = ParentManager()
class Meta:
unique_together = ("self", "parent_handle")
@@ -93,6 +121,11 @@ class CADetail(models.Model):
ca_cert_uri = models.TextField(null = True)
ca = models.ForeignKey(CA)
+class ChildManager(models.Manager):
+ def find_from_xml(self, elt):
+ assert elt.tag == rpki.left_right.tag_child
+ return self.get(self__self_handle = elt.get("self_handle"), child_handle = elt.get("child_handle"))
+
class Child(models.Model):
child_handle = models.SlugField(max_length = 255)
bpki_cert = CertificateField(null = True)
@@ -100,6 +133,7 @@ class Child(models.Model):
last_cms_timestamp = SundialField(null = True)
self = models.ForeignKey(Self)
bsc = models.ForeignKey(BSC)
+ objects = ChildManager()
class Meta:
unique_together = ("self", "child_handle")