aboutsummaryrefslogtreecommitdiff
path: root/myrpki/myrpki.py
diff options
context:
space:
mode:
Diffstat (limited to 'myrpki/myrpki.py')
-rw-r--r--myrpki/myrpki.py79
1 files changed, 64 insertions, 15 deletions
diff --git a/myrpki/myrpki.py b/myrpki/myrpki.py
index 8e5b6f6f..8bdcef4b 100644
--- a/myrpki/myrpki.py
+++ b/myrpki/myrpki.py
@@ -88,8 +88,9 @@ class child(object):
self.v4 = comma_set()
self.v6 = comma_set()
self.validity = None
+ self.ta = None
- def add(self, prefix = None, asn = None, validity = None):
+ def add(self, prefix = None, asn = None, validity = None, ta = None):
if prefix is not None:
if self.v4re.match(prefix):
self.v4.add(prefix)
@@ -101,32 +102,37 @@ class child(object):
self.asns.add(asn)
if validity is not None:
self.validity = validity
+ if ta is not None:
+ self.ta = ta
def xml(self, e):
- return SubElement(e, "child",
- handle = self.handle,
- valid_until = self.validity,
- asns = str(self.asns),
- v4 = str(self.v4),
- v6 = str(self.v6))
+ e = SubElement(e, "child",
+ handle = self.handle,
+ valid_until = self.validity,
+ asns = str(self.asns),
+ v4 = str(self.v4),
+ v6 = str(self.v6))
+ if self.ta:
+ PEMElement(e, "bpki_ta", self.ta)
+ return e
class children(dict):
- def add(self, handle, prefix = None, asn = None, validity = None):
+ def add(self, handle, prefix = None, asn = None, validity = None, ta = None):
if handle not in self:
self[handle] = child(handle)
- self[handle].add(prefix = prefix, asn = asn, validity = validity)
+ self[handle].add(prefix = prefix, asn = asn, validity = validity, ta = ta)
def xml(self, e):
for c in self.itervalues():
c.xml(e)
@classmethod
- def from_csv(cls, validity_csv_file, prefix_csv_file, asn_csv_file):
+ def from_csv(cls, children_csv_file, prefix_csv_file, asn_csv_file):
self = cls()
- # childname date
- for handle, date in csv_open(validity_csv_file):
- self.add(handle = handle, validity = date)
+ # childname date pemfile
+ for handle, date, pemfile in csv_open(children_csv_file):
+ self.add(handle = handle, validity = date, ta = pemfile)
# childname p/n
for handle, pn in csv_open(prefix_csv_file):
self.add(handle = handle, prefix = pn)
@@ -135,6 +141,46 @@ class children(dict):
self.add(handle = handle, asn = asn)
return self
+class parent(object):
+
+ def __init__(self, handle):
+ self.handle = handle
+ self.uri = None
+ self.ta = None
+
+ def add(self, uri = None, ta = None):
+ if uri is not None:
+ self.uri = uri
+ if ta is not None:
+ self.ta = ta
+
+ def xml(self, e):
+ e = SubElement(e, "parent",
+ handle = self.handle,
+ uri = self.uri)
+ if self.ta:
+ PEMElement(e, "bpki_ta", self.ta)
+ return e
+
+class parents(dict):
+
+ def add(self, handle, uri = None, ta = None):
+ if handle not in self:
+ self[handle] = parent(handle)
+ self[handle].add(uri = uri, ta = ta)
+
+ def xml(self, e):
+ for c in self.itervalues():
+ c.xml(e)
+
+ @classmethod
+ def from_csv(cls, parents_csv_file):
+ self = cls()
+ # parentname uri pemfile
+ for handle, uri, pemfile in csv_open(parents_csv_file):
+ self.add(handle = handle, uri = uri, ta = pemfile)
+ return self
+
def csv_open(filename, delimiter = "\t", dialect = None):
return csv.reader(open(filename, "rb"), dialect = dialect, delimiter = delimiter)
@@ -205,7 +251,8 @@ def main():
my_handle = cfg.get(myrpki_section, "handle")
roa_csv_file = cfg.get(myrpki_section, "roa_csv")
- validity_csv_file = cfg.get(myrpki_section, "validity_csv")
+ children_csv_file = cfg.get(myrpki_section, "children_csv")
+ parents_csv_file = cfg.get(myrpki_section, "parents_csv")
prefix_csv_file = cfg.get(myrpki_section, "prefix_csv")
asn_csv_file = cfg.get(myrpki_section, "asn_csv")
bpki_ca_cert_file = cfg.get(myrpki_section, "bpki_ca_certificate")
@@ -218,11 +265,13 @@ def main():
relaxng_schema = cfg.get(myrpki_section, "relaxng_schema")
roas = roa_requests.from_csv(roa_csv_file)
- kids = children.from_csv(validity_csv_file, prefix_csv_file, asn_csv_file)
+ kids = children.from_csv(children_csv_file, prefix_csv_file, asn_csv_file)
+ rents = parents.from_csv(parents_csv_file)
e = Element("myrpki", xmlns = namespace, version = "1", handle = my_handle)
roas.xml(e)
kids.xml(e)
+ rents.xml(e)
bpki_ca(e,
bpki_ca_key_file = bpki_ca_key_file,
bpki_ca_cert_file = bpki_ca_cert_file,