aboutsummaryrefslogtreecommitdiff
path: root/myrpki.rototill/convert-csv.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2010-03-09 21:15:33 +0000
committerRob Austein <sra@hactrn.net>2010-03-09 21:15:33 +0000
commitc66e08261b05c28e782517e49c48cf047c300f2d (patch)
treed3f0f58e02b305737e81c8d2dced8eea51d17c26 /myrpki.rototill/convert-csv.py
parentc728f40b499fbf0bf2c4fc2d196903611ff54d49 (diff)
First cut at transition script. Untested.
svn path=/myrpki.rototill/convert-csv.py; revision=3053
Diffstat (limited to 'myrpki.rototill/convert-csv.py')
-rw-r--r--myrpki.rototill/convert-csv.py109
1 files changed, 109 insertions, 0 deletions
diff --git a/myrpki.rototill/convert-csv.py b/myrpki.rototill/convert-csv.py
new file mode 100644
index 00000000..8ae0d312
--- /dev/null
+++ b/myrpki.rototill/convert-csv.py
@@ -0,0 +1,109 @@
+"""
+Convert {parents,children,pubclients}.csv into new XML formats.
+
+$Id$
+
+Copyright (C) 2010 Internet Systems Consortium ("ISC")
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+"""
+
+import subprocess, csv, re, os, getopt, sys, rpki.config, base64, myrpki
+
+from lxml.etree import Element, SubElement, ElementTree
+
+cfg_file = "myrpki.conf"
+
+opts, argv = getopt.getopt(sys.argv[1:], "c:h:?", ["config=", "help"])
+for o, a in opts:
+ if o in ("-h", "--help", "-?"):
+ print __doc__
+ sys.exit(0)
+ elif o in ("-c", "--config"):
+ cfg_file = a
+if argv:
+ raise RuntimeError, "Unexpected arguments %r" % (argv,)
+
+cfg = rpki.config.parser(cfg_file, "myrpki")
+
+entitydb = myrpki.EntityDB(cfg)
+
+handle = cfg.get("handle")
+bpki_resources_directory = cfg.get("bpki_resources_directory")
+bpki_servers_directory = cfg.get("bpki_servers_directory")
+repository_bpki_certificate = cfg.get("repository_bpki_certificate")
+repository_handle = cfg.get("repository_handle")
+pubd_base = cfg.get("pubd_base")
+rpkid_base = cfg.get("rpkid_base")
+
+bpki_resources_pemfile = bpki_resources_directory + "/ca.cer"
+bpki_servers_pemfile = bpki_servers_directory + "/ca.cer"
+
+if os.path.exists("children.csv"):
+ for child_handle, valid_until, child_resource_pemfile in myrpki.csv_open("children.csv"):
+
+ e = Element("parent",
+ valid_until = valid_until,
+ service_uri = "%s/left-right/%s/%s" % (rpkid_base, handle, child_handle),
+ child_handle = child_handle,
+ parent_handle = handle)
+ myrpki.PEMElement(e, "bpki_resource_ta", bpki_resources_pemfile)
+ myrpki.PEMElement(e, "bpki_server_ta", bpki_servers_pemfile)
+ myrpki.PEMElement(e, "bpki_child_ta", child_resource_pemfile)
+ myrpki.etree_write(e, entitydb("children", "%s.xml" % child_handle))
+
+
+if os.path.exists("parents.csv"):
+ for parent_handle, parent_service_uri, parent_cms_pemfile, parent_https_pemfile, parent_myhandle, parent_sia_base in myrpki.csv_open("parents.csv"):
+
+ e = Element("parent",
+ #valid_until = valid_until,
+ service_uri = parent_service_uri,
+ child_handle = parent_myhandle,
+ parent_handle = parent_handle)
+ myrpki.PEMElement(e, "bpki_resource_ta", parent_cms_pemfile)
+ myrpki.PEMElement(e, "bpki_server_ta", parent_https_pemfile)
+ myrpki.PEMElement(e, "bpki_child_ta", bpki_resources_pemfile)
+ myrpki.etree_write(e, entitydb("parents", "%s.xml" % parent_handle))
+
+ client_handle = "/".join(parent_sia_base.rstrip("/").split("/")[3:])
+ assert client_handle.startswith(repository_handle)
+
+ e = Element("repository",
+ parent_handle = parent_handle,
+ client_handle = client_handle,
+ service_uri = "%s/client/%s" % (pubd_base.rstrip("/"), client_handle),
+ sia_base = parent_sia_base,
+ repository_handle = client_handle.split("/")[0],
+ type = "confirmed")
+ myrpki.PEMElement(e, "bpki_server_ta", repository_bpki_certificate)
+ myrpki.PEMElement(e, "bpki_client_ta", bpki_resources_pemfile)
+ SubElement(e, "contact_info").text = "Automatically generated by convert-csv.py"
+ myrpki.etree_write(e, entitydb("repositories", "%s.xml" % parent_handle))
+
+if os.path.exists("pubclients.csv"):
+ for client_handle, client_resource_pemfile, client_sia_base in myrpki.csv_open("pubclients.csv"):
+
+ parent_handle = client_handle.split("/")[-1]
+
+ e = Element("repository",
+ parent_handle = parent_handle,
+ client_handle = client_handle,
+ service_uri = "%s/client/%s" % (pubd_base.rstrip("/"), client_handle),
+ sia_base = client_sia_base,
+ repository_handle = client_handle.split("/")[0],
+ type = "confirmed")
+ myrpki.PEMElement(e, "bpki_server_ta", bpki_servers_pemfile)
+ myrpki.PEMElement(e, "bpki_client_ta", client_resource_pemfile)
+ SubElement(e, "contact_info").text = "Automatically generated by convert-csv.py"
+ myrpki.etree_write(e, entitydb("repositories", "%s.xml" % client_handle.replace("/", ".")))