aboutsummaryrefslogtreecommitdiff
path: root/scripts/rpki/left_right.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/rpki/left_right.py')
-rw-r--r--scripts/rpki/left_right.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py
index 52a02d5d..73d2130d 100644
--- a/scripts/rpki/left_right.py
+++ b/scripts/rpki/left_right.py
@@ -54,12 +54,14 @@ class base_elt(object):
lxml.etree.SubElement(elt, "{%s}%s" % (xmlns, name), nsmap=nsmap).text = base64.b64encode(value)
def __str__(self):
+ """Convert a base_elt object to string format."""
lxml.etree.tostring(self.toXML(), pretty_print=True, encoding="us-ascii")
class data_elt(base_elt, rpki.sql.sql_persistant):
"""Virtual class for top-level left-right protocol data elements."""
def sql_decode(self, vals):
+ """Decode SQL form of a data_elt object."""
rpki.sql.sql_persistant.sql_decode(self, vals)
if "cms_ta" in vals:
self.cms_ta = rpki.x509.X509(DER=vals["cms_ta"])
@@ -71,6 +73,7 @@ class data_elt(base_elt, rpki.sql.sql_persistant):
self.public_key = rpki.x509.RSA(DER=vals["public_key"])
def sql_encode(self):
+ """Encode SQL form of a data_elt object."""
d = rpki.sql.sql_persistant.sql_encode(self)
for i in ("cms_ta", "https_ta", "private_key_id", "public_key"):
if i in d:
@@ -78,6 +81,7 @@ class data_elt(base_elt, rpki.sql.sql_persistant):
return d
def make_reply(self, r_pdu=None):
+ """Construct a reply PDU."""
if r_pdu is None:
r_pdu = self.__class__()
r_pdu.self_id = self.self_id
@@ -87,12 +91,15 @@ class data_elt(base_elt, rpki.sql.sql_persistant):
return r_pdu
def serve_pre_save_hook(self, q_pdu, r_pdu):
+ """Overridable hook."""
pass
def serve_post_save_hook(self, q_pdu, r_pdu):
+ """Overridable hook."""
pass
def serve_create(self, gctx, r_msg):
+ """Handle a create action."""
r_pdu = self.make_reply()
self.serve_pre_save_hook(self, r_pdu)
self.sql_store(gctx.db, gctx.cur)
@@ -101,6 +108,7 @@ class data_elt(base_elt, rpki.sql.sql_persistant):
r_msg.append(r_pdu)
def serve_set(self, gctx, r_msg):
+ """Handle a set action."""
db_pdu = self.sql_fetch(gctx, getattr(self, self.sql_template.index))
if db_pdu is not None:
r_pdu = self.make_reply()
@@ -117,6 +125,7 @@ class data_elt(base_elt, rpki.sql.sql_persistant):
r_msg.append(make_error_report(self))
def serve_get(self, gctx, r_msg):
+ """Handle a get action."""
r_pdu = self.sql_fetch(gctx, getattr(self, self.sql_template.index))
if r_pdu is not None:
self.make_reply(r_pdu)
@@ -125,11 +134,13 @@ class data_elt(base_elt, rpki.sql.sql_persistant):
r_msg.append(make_error_report(self))
def serve_list(self, gctx, r_msg):
+ """Handle a list action."""
for r_pdu in self.sql_fetch_all(gctx.db, gctx.cur):
self.make_reply(r_pdu)
r_msg.append(r_pdu)
def serve_destroy(self, gctx, r_msg):
+ """Handle a destroy action."""
db_pdu = self.sql_fetch(gctx, getattr(self, self.sql_template.index))
if db_pdu is not None:
db_pdu.sql_delete(gctx.db, gctx.cur)
@@ -138,6 +149,7 @@ class data_elt(base_elt, rpki.sql.sql_persistant):
r_msg.append(make_error_report(self))
def serve_dispatch(self, gctx, r_msg):
+ """Action dispatch handler."""
dispatch = { "create" : self.serve_create,
"set" : self.serve_set,
"get" : self.serve_get,
@@ -183,9 +195,11 @@ class self_elt(data_elt):
use_hsm = False
def __init__(self):
+ """Initialize a self_elt."""
self.prefs = []
def sql_fetch_hook(self, gctx):
+ """Extra SQL fetch actions for self_elt -- handle extension preferences."""
gctx.cur.execute("SELECT pref_name, pref_value FROM self_pref WHERE self_id = %s", self.self_id)
for name, value in gctx.cur.fetchall():
e = extension_preference_elt()
@@ -194,20 +208,24 @@ class self_elt(data_elt):
self.prefs.append(e)
def sql_insert_hook(self, gctx):
+ """Extra SQL insert actions for self_elt -- handle extension preferences."""
if self.prefs:
gctx.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, gctx):
+ """Extra SQL delete actions for self_elt -- handle extension preferences."""
gctx.cur.execute("DELETE FROM self_pref WHERE self_id = %s", self.self_id)
def serve_pre_save_hook(self, q_pdu, r_pdu):
+ """Extra server actions for self_elt -- handle extension preferences."""
if self is not q_pdu:
if q_pdu.clear_extension_preferences:
self.prefs = []
self.prefs.extend(pdu.prefs)
def serve_post_save_hook(self, q_pdu, r_pdu):
+ """Extra server actions for self_elt."""
if self.rekey or self.reissue or self.revoke or self.run_now or self.publish_world_now:
raise NotImplementedError, "Unimplemented control %s" % ", ".join(b for b in ("rekey", "reissue", "revoke", "run_now", "publish_world_now") if getattr(self, b))
@@ -264,20 +282,25 @@ class bsc_elt(data_elt):
private_key_id = None
def __init__(self):
+ """Initialize bsc_elt."""
self.signing_cert = []
def sql_fetch_hook(self, gctx):
+ """Extra SQL fetch actions for bsc_elt -- handle signing certs."""
gctx.cur.execute("SELECT cert FROM bsc_cert WHERE bsc_id = %s", self.bsc_id)
self.signing_cert = [rpki.x509.X509(DER=x) for (x,) in gctx.cur.fetchall()]
def sql_insert_hook(self, gctx):
+ """Extra SQL insert actions for bsc_elt -- handle signing certs."""
if self.signing_cert:
gctx.cur.executemany("INSERT bsc_cert (cert, bsc_id) VALUES (%s, %s)", ((x.get_DER(), self.bsc_id) for x in self.signing_cert))
def sql_delete_hook(self, gctx):
+ """Extra SQL delete actions for bsc_elt -- handle signing certs."""
gctx.cur.execute("DELETE FROM bsc_cert WHERE bsc_id = %s", self.bsc_id)
def serve_pre_save_hook(self, q_pdu, r_pdu):
+ """Extra server actions for bsc_elt -- handle signing certs and key generation."""
if self is not q_pdu:
if q_pdu.clear_signing_certs:
self.signing_cert = []
@@ -336,6 +359,7 @@ class parent_elt(data_elt):
https_ta = None
def serve_post_save_hook(self, q_pdu, r_pdu):
+ """"Extra server actions for parent_elt."""
if self.rekey or self.reissue or self.revoke:
raise NotImplementedError, "Unimplemented control %s" % ", ".join(b for b in ("rekey", "reissue", "revoke") if getattr(self, b))
@@ -402,6 +426,7 @@ class child_elt(data_elt):
cms_ta = None
def serve_post_save_hook(self, q_pdu, r_pdu):
+ """Extra server actions for child_elt."""
if self.reissue:
raise NotImplementedError, "Unimplemented control %s" % ", ".join(b for b in ("reissue",) if getattr(self, b))
@@ -491,6 +516,7 @@ class route_origin_elt(data_elt):
roa = None
def sql_fetch_hook(self, gctx):
+ """Extra SQL fetch actions for route_origin_elt -- handle address ranges."""
self.ipv4 = rpki.resource_set.resource_set_ipv4.from_sql(gctx.cur,
"SELECT start_ip, end_ip FROM route_origin_range WHERE route_origin_id = %s AND start_ip NOT LIKE '%:%'",
self.route_origin_id)
@@ -499,14 +525,17 @@ class route_origin_elt(data_elt):
self.route_origin_id)
def sql_insert_hook(self, gctx):
+ """Extra SQL insert actions for route_origin_elt -- handle address ranges."""
if self.ipv4 + self.ipv6:
gctx.cur.executemany("INSERT route_origin_range (route_origin_id, start_ip, end_ip) VALUES (%s, %s, %s)",
((self.route_origin_id, x.min, x.max) for x in self.ipv4 + self.ipv6))
def sql_delete_hook(self, gctx):
+ """Extra SQL delete actions for route_origin_elt -- handle address ranges."""
gctx.cur.execute("DELETE FROM route_origin_range WHERE route_origin_id = %s", self.route_origin_id)
def serve_post_save_hook(self, q_pdu, r_pdu):
+ """Extra server actions for route_origin_elt."""
if self.suppress_publication:
raise NotImplementedError, "Unimplemented control %s" % ", ".join(b for b in ("suppress_publication",) if getattr(self, b))
@@ -601,6 +630,7 @@ class msg(list):
stack.pop()
def __str__(self):
+ """Convert msg object to string."""
lxml.etree.tostring(self.toXML(), pretty_print=True, encoding="us-ascii")
def toXML(self):
@@ -610,6 +640,7 @@ class msg(list):
return elt
def serve_top_level(self, gctx):
+ """Serve one msg PDU."""
r_msg = self.__class__()
for q_pdu in self:
q_pdu.serve_dispatch(gctx, r_msg)