diff options
author | Rob Austein <sra@hactrn.net> | 2007-11-17 02:12:45 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2007-11-17 02:12:45 +0000 |
commit | 9264b7cfc635f11e65bf368090b09ff271eeab36 (patch) | |
tree | a592022bdf3d5ab7245941c3c50ab43df09c4da8 /scripts/rpki/left_right.py | |
parent | 22196f0b435d161e87e085c40cb8a64b983ef9fc (diff) |
Temporary kludge to fake publication
svn path=/scripts/Makefile; revision=1309
Diffstat (limited to 'scripts/rpki/left_right.py')
-rw-r--r-- | scripts/rpki/left_right.py | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py index 59032f17..63ebc385 100644 --- a/scripts/rpki/left_right.py +++ b/scripts/rpki/left_right.py @@ -2,7 +2,7 @@ """RPKI "left-right" protocol.""" -import base64, lxml.etree, time, traceback +import base64, lxml.etree, time, traceback, os import rpki.sax_utils, rpki.resource_set, rpki.x509, rpki.sql, rpki.exceptions import rpki.https, rpki.up_down, rpki.relaxng, rpki.sundial @@ -546,15 +546,43 @@ class repository_elt(data_elt): self.make_b64elt(elt, "https_ta", self.https_ta.get_DER()) return elt - def publish(self, *things): - """Placeholder for publication operation (not yet written).""" - for thing in things: - print "Should publish %s to repository %s" % (repr(thing), repr(self)) - - def withdraw(self, *things): - """Placeholder for publication withdrawal operation (not yet written).""" - for thing in things: - print "Should withdraw %s from repository %s" % (repr(thing), repr(self)) + @staticmethod + def uri_to_filename(base, uri): + """Convert a URI to a filename. [TEMPORARY]""" + if not uri.startswith("rsync://"): + raise rpki.exceptions.BadURISyntax + filename = base + uri[len("rsync://"):] + if filename.find("//") >= 0 or filename.find("/../") >= 0 or filename.endswith("/.."): + raise rpki.exceptions.BadURISyntax + return filename + + @classmethod + def object_write(cls, base, uri, obj): + """Write an object to disk. [TEMPORARY]""" + filename = cls.uri_to_filename(base, uri) + dirname = os.path.dirname(filename) + if not os.path.isdir(dirname): + os.makedirs(dirname) + f = open(filename, "wb") + f.write(obj.get_DER()) + f.close() + + @classmethod + def object_delete(cls, base, uri): + """Delete an object from disk. [TEMPORARY]""" + os.remove(cls.uri_to_filename(base, uri)) + + def publish(self, gctx, *things): + """Placeholder for publication operation. [TEMPORARY]""" + for obj, uri in things: + print "Pretending to publish %s to repository %s at %s" % (repr(obj), repr(self), repr(uri)) + self.object_write(gctx.publication_kludge_base, uri, obj) + + def withdraw(self, gctx, *things): + """Placeholder for publication withdrawal operation. [TEMPORARY]""" + for obj, uri in things: + print "Pretending to withdraw %s from repository %s at %s" % (repr(obj), repr(self), repr(uri)) + self.object_delete(gctx.publication_kludge_base, uri) class route_origin_elt(data_elt): """<route_origin/> element.""" |