aboutsummaryrefslogtreecommitdiff
path: root/scripts/rpki/left_right.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2007-09-21 05:06:34 +0000
committerRob Austein <sra@hactrn.net>2007-09-21 05:06:34 +0000
commiteec99329d04610689e27ccbfc885a184a8985110 (patch)
tree62ef90836956caf9cf5d0549b38f854d3c4bc644 /scripts/rpki/left_right.py
parent142af92f8957881026b05238d334f5245912db86 (diff)
Refactor left-right CLI client, maybe I got it right this time.
svn path=/scripts/irbe-cli.py; revision=1002
Diffstat (limited to 'scripts/rpki/left_right.py')
-rw-r--r--scripts/rpki/left_right.py188
1 files changed, 65 insertions, 123 deletions
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py
index 79bbaf93..39fb646b 100644
--- a/scripts/rpki/left_right.py
+++ b/scripts/rpki/left_right.py
@@ -2,7 +2,7 @@
"""RPKI "left-right" protocol."""
-import getopt, base64, lxml.etree
+import base64, lxml.etree
import rpki.sax_utils, rpki.resource_set, rpki.x509, rpki.sql, rpki.exceptions, rpki.pkcs10
xmlns = "http://www.hactrn.net/uris/rpki/left-right-spec/"
@@ -140,40 +140,6 @@ class data_elt(base_elt, rpki.sql.sql_persistant):
raise rpki.exceptions.BadQuery, "Unexpected query: type %s, action %s" % (self.type, self.action)
dispatch[self.action](db, cur, r_msg)
- def client_getopt(self, argv):
- """Parse options for this class."""
- opts, args = getopt.getopt(argv, "", [x + "=" for x in self.attributes + self.elements] + list(self.booleans))
- for o, a in opts:
- o = o[2:]
- handler = getattr(self, "client_query_" + o, None)
- if handler is not None:
- handler(a)
- elif o in self.booleans:
- setattr(self, o, True)
- else:
- assert o in self.attributes
- setattr(self, o, a)
- return args
-
- def client_query_action(self, arg):
- """Special handler for --action option."""
- self.action = arg
- self.type = "query"
-
- def client_query_peer_ta(self, arg):
- """Special handler for --peer_ta option."""
- self.peer_ta = rpki.x509.X509(Auto_file=arg)
-
- def client_reply_decode(self):
- pass
-
- def client_reply_show(self):
- self.client_reply_decode()
- print self.element_name
- for i in self.attributes + self.elements:
- if getattr(self, i) is not None:
- print " %s: %s" % (i, getattr(self, i))
-
class extension_preference_elt(base_elt):
"""Container for extension preferences."""
@@ -196,6 +162,70 @@ class extension_preference_elt(base_elt):
elt.text = self.value
return elt
+class self_elt(data_elt):
+ """<self/> element."""
+
+ element_name = "self"
+ attributes = ("action", "type", "self_id")
+ elements = ("extension_preference",)
+ booleans = ("rekey", "reissue", "revoke", "run_now", "publish_world_now", "clear_extension_preferences")
+
+ sql_template = rpki.sql.template("self", "self_id", "use_hsm")
+
+ self_id = None
+ use_hsm = False
+
+ def __init__(self):
+ self.prefs = []
+
+ def sql_fetch_hook(self, db, cur):
+ cur.execute("SELECT pref_name, pref_value FROM self_pref WHERE self_id = %s", self.self_id)
+ for name, value in cur.fetchall():
+ e = extension_preference_elt()
+ e.name = name
+ e.value = value
+ self.prefs.append(e)
+
+ def sql_insert_hook(self, db, cur):
+ if self.prefs:
+ cur.executemany("INSERT self_pref (self_id, pref_name, pref_value) VALUES (%s, %s, %s)",
+ ((e.name, e.value, self.self_id) for e in self.prefs))
+
+ def sql_delete_hook(self, db, cur):
+ cur.execute("DELETE FROM self_pref WHERE self_id = %s", self.self_id)
+
+ def serve_pre_save_hook(self, q_pdu, r_pdu):
+ if self is not pdu:
+ if pdu.clear_extension_preferences:
+ self.prefs = []
+ self.prefs.extend(pdu.prefs)
+
+ def serve_post_save_hook(self, q_pdu, r_pdu):
+ if self.rekey or self.reissue or self.revoke or self.run_now or self.publish_world_now:
+ raise NotImplementedError
+
+ def startElement(self, stack, name, attrs):
+ """Handle <self/> element."""
+ if name == "extension_preference":
+ pref = extension_preference_elt()
+ self.prefs.append(pref)
+ stack.append(pref)
+ pref.startElement(stack, name, attrs)
+ else:
+ assert name == "self", "Unexpected name %s, stack %s" % (name, stack)
+ self.read_attrs(attrs)
+
+ def endElement(self, stack, name, text):
+ """Handle <self/> element."""
+ assert name == "self", "Unexpected name %s, stack %s" % (name, stack)
+ stack.pop()
+
+ def toXML(self):
+ """Generate <self/> element."""
+ elt = self.make_elt()
+ elt.extend([i.toXML() for i in self.prefs])
+ return elt
+
class bsc_elt(data_elt):
"""<bsc/> (Business Signing Context) element."""
@@ -268,10 +298,6 @@ class bsc_elt(data_elt):
self.make_b64elt(elt, "public_key")
return elt
- def client_query_signing_cert(self, arg):
- """--signing_cert option."""
- self.signing_cert.append(rpki.x509.X509(Auto_file=arg))
-
class parent_elt(data_elt):
"""<parent/> element."""
@@ -456,90 +482,6 @@ class route_origin_elt(data_elt):
"""Generate <route_origin/> element."""
return self.make_elt()
- def client_query_as_number(self, arg):
- """Handle autonomous sequence numbers."""
- self.as_number = long(arg)
-
- def client_query_ipv4(self, arg):
- """Handle IPv4 addresses."""
- self.ipv4 = resource_set.resource_set_ipv4(arg)
-
- def client_query_ipv6(self, arg):
- """Handle IPv6 addresses."""
- self.ipv6 = resource_set.resource_set_ipv6(arg)
-
-class self_elt(data_elt):
- """<self/> element."""
-
- element_name = "self"
- attributes = ("action", "type", "self_id")
- elements = ("extension_preference",)
- booleans = ("rekey", "reissue", "revoke", "run_now", "publish_world_now", "clear_extension_preferences")
-
- sql_template = rpki.sql.template("self", "self_id", "use_hsm")
-
- self_id = None
- use_hsm = False
-
- def __init__(self):
- self.prefs = []
-
- def sql_fetch_hook(self, db, cur):
- cur.execute("SELECT pref_name, pref_value FROM self_pref WHERE self_id = %s", self.self_id)
- for name, value in cur.fetchall():
- e = extension_preference_elt()
- e.name = name
- e.value = value
- self.prefs.append(e)
-
- def sql_insert_hook(self, db, cur):
- if self.prefs:
- cur.executemany("INSERT self_pref (self_id, pref_name, pref_value) VALUES (%s, %s, %s)",
- ((e.name, e.value, self.self_id) for e in self.prefs))
-
- def sql_delete_hook(self, db, cur):
- cur.execute("DELETE FROM self_pref WHERE self_id = %s", self.self_id)
-
- def serve_pre_save_hook(self, q_pdu, r_pdu):
- if self is not pdu:
- if pdu.clear_extension_preferences:
- self.prefs = []
- self.prefs.extend(pdu.prefs)
-
- def serve_post_save_hook(self, q_pdu, r_pdu):
- if self.rekey or self.reissue or self.revoke or self.run_now or self.publish_world_now:
- raise NotImplementedError
-
- def startElement(self, stack, name, attrs):
- """Handle <self/> element."""
- if name == "extension_preference":
- pref = extension_preference_elt()
- self.prefs.append(pref)
- stack.append(pref)
- pref.startElement(stack, name, attrs)
- else:
- assert name == "self", "Unexpected name %s, stack %s" % (name, stack)
- self.read_attrs(attrs)
-
- def endElement(self, stack, name, text):
- """Handle <self/> element."""
- assert name == "self", "Unexpected name %s, stack %s" % (name, stack)
- stack.pop()
-
- def toXML(self):
- """Generate <self/> element."""
- elt = self.make_elt()
- elt.extend([i.toXML() for i in self.prefs])
- return elt
-
- def client_query_extension_preference(self, arg):
- """--extension_preferences option."""
- k,v = arg.split("=", 1)
- pref = rpki.left_right.extension_preference_elt()
- pref.name = k
- pref.value = v
- self.prefs.append(pref)
-
class resource_class_elt(base_elt):
"""<resource_class/> element."""