diff options
-rw-r--r-- | myrpki/myrpki.conf | 1 | ||||
-rw-r--r-- | myrpki/myrpki.py | 48 | ||||
-rw-r--r-- | myrpki/myrpki.rnc | 7 | ||||
-rw-r--r-- | myrpki/myrpki.rng | 20 | ||||
-rwxr-xr-x | myrpki/xml-parse-test.py | 6 |
5 files changed, 82 insertions, 0 deletions
diff --git a/myrpki/myrpki.conf b/myrpki/myrpki.conf index fd9e54d3..f79fc3fb 100644 --- a/myrpki/myrpki.conf +++ b/myrpki/myrpki.conf @@ -11,6 +11,7 @@ children_csv = children.csv parents_csv = parents.csv prefix_csv = prefixes.csv asn_csv = asns.csv +repositories_csv = repositories.csv xml_filename = myrpki.xml bpki_directory = bpki.myrpki diff --git a/myrpki/myrpki.py b/myrpki/myrpki.py index 7a1fffea..697522fa 100644 --- a/myrpki/myrpki.py +++ b/myrpki/myrpki.py @@ -190,6 +190,49 @@ class parents(dict): self.add(handle = handle, uri = uri, ta = xcert(pemfile)) return self +class repository(object): + + def __init__(self, handle): + self.handle = handle + self.uri = None + self.ta = None + + def __repr__(self): + return "<%s uri %s ta %s>" % (self.__class__.__name__, self.uri, self.ta) + + 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): + e2 = SubElement(e, "repository", + handle = self.handle, + uri = self.uri) + if self.ta: + PEMElement(e2, "bpki_ta", self.ta) + return e2 + +class repositories(dict): + + def add(self, handle, uri = None, ta = None): + if handle not in self: + self[handle] = repository(handle) + self[handle].add(uri = uri, ta = ta) + + def xml(self, e): + for r in self.itervalues(): + r.xml(e) + + @classmethod + def from_csv(cls, repositories_csv_file, xcert): + self = cls() + # repositoryname uri pemfile + for handle, uri, pemfile in csv_open(repositories_csv_file): + self.add(handle = handle, uri = uri, ta = xcert(pemfile)) + return self + def csv_open(filename, delimiter = "\t", dialect = None): return csv.reader(open(filename, "rb"), dialect = dialect, delimiter = delimiter) @@ -358,6 +401,7 @@ def main(): 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") + repositories_csv_file= cfg.get(myrpki_section, "repositories_csv") bpki_dir = cfg.get(myrpki_section, "bpki_directory") xml_filename = cfg.get(myrpki_section, "xml_filename") @@ -384,6 +428,10 @@ def main(): parents_csv_file = parents_csv_file, xcert = bpki.xcert).xml(e) + repositories.from_csv( + repositories_csv_file = repositories_csv_file, + xcert = bpki.xcert).xml(e) + PEMElement(e, "bpki_ca_certificate", bpki.cer) PEMElement(e, "bpki_crl", bpki.crl) diff --git a/myrpki/myrpki.rnc b/myrpki/myrpki.rnc index 8ea93167..288095de 100644 --- a/myrpki/myrpki.rnc +++ b/myrpki/myrpki.rnc @@ -20,6 +20,7 @@ start = element myrpki { roa_request_elt*, child_elt*, parent_elt*, + repository_elt*, bpki_ca_certificate_elt?, bpki_crl_elt?, bpki_bsc_certificate_elt?, @@ -47,6 +48,12 @@ parent_elt = element parent { element bpki_ta { base64 }? } +repository_elt = element repository { + attribute handle { object_handle }, + attribute uri { uri }?, + element bpki_ta { base64 }? +} + bpki_ca_certificate_elt = element bpki_ca_certificate { base64 } bpki_crl_elt = element bpki_crl { base64 } bpki_bsc_certificate_elt = element bpki_bsc_certificate { base64 } diff --git a/myrpki/myrpki.rng b/myrpki/myrpki.rng index 96d5d289..064c2f53 100644 --- a/myrpki/myrpki.rng +++ b/myrpki/myrpki.rng @@ -61,6 +61,9 @@ <zeroOrMore> <ref name="parent_elt"/> </zeroOrMore> + <zeroOrMore> + <ref name="repository_elt"/> + </zeroOrMore> <optional> <ref name="bpki_ca_certificate_elt"/> </optional> @@ -137,6 +140,23 @@ </optional> </element> </define> + <define name="repository_elt"> + <element name="repository"> + <attribute name="handle"> + <ref name="object_handle"/> + </attribute> + <optional> + <attribute name="uri"> + <ref name="uri"/> + </attribute> + </optional> + <optional> + <element name="bpki_ta"> + <ref name="base64"/> + </element> + </optional> + </element> + </define> <define name="bpki_ca_certificate_elt"> <element name="bpki_ca_certificate"> <ref name="base64"/> diff --git a/myrpki/xml-parse-test.py b/myrpki/xml-parse-test.py index 14aa6fd7..479232e7 100755 --- a/myrpki/xml-parse-test.py +++ b/myrpki/xml-parse-test.py @@ -80,6 +80,12 @@ for x in tree.getiterator(tag("parent")): if ta: showpem("Parent", ta, "x509") +for x in tree.getiterator(tag("repository")): + print "Repository URI:", x.get("uri") + ta = x.findtext(tag("bpki_ta")) + if ta: + showpem("Repository", ta, "x509") + ca = tree.findtext(tag("bpki_ca_certificate")) if ca: showpem("CA", ca, "x509") |