[tor-commits] [flashproxy/master] Move get_reg and put_reg into fac.py.

dcf at torproject.org dcf at torproject.org
Fri Sep 28 06:11:19 UTC 2012


commit 9c570dd3a0d8c9c86c92b9bab7a0543dfa92e4c9
Author: David Fifield <david at bamsoftware.com>
Date:   Wed Sep 19 15:21:29 2012 -0700

    Move get_reg and put_reg into fac.py.
---
 facilitator/fac.py          |   53 +++++++++++++++++++++++++++++++++++++++
 facilitator/facilitator.cgi |   58 +-----------------------------------------
 2 files changed, 55 insertions(+), 56 deletions(-)

diff --git a/facilitator/fac.py b/facilitator/fac.py
index 494b378..cb77ccc 100644
--- a/facilitator/fac.py
+++ b/facilitator/fac.py
@@ -181,3 +181,56 @@ def render_transaction(command, *params):
     for key, value in params:
         parts.append("%s=%s" % (key, quote_string(value)))
     return " ".join(parts)
+
+def fac_socket(facilitator_addr):
+    return socket.create_connection(facilitator_addr, 1.0).makefile()
+
+def transact(f, command, *params):
+    transaction = render_transaction(command, *params)
+    print >> f, transaction
+    f.flush()
+    line = f.readline()
+    if not (len(line) > 0 and line[-1] == '\n'):
+        raise ValueError("No newline at end of string returned by facilitator")
+    return parse_transaction(line[:-1])
+
+def put_reg(facilitator_addr, client_addr, registrant_addr):
+    """Send a registration to the facilitator using a one-time socket. Returns
+    true iff the command was successful."""
+    f = fac_socket(facilitator_addr)
+    try:
+        command, params = transact(f, "PUT", ("CLIENT", format_addr(client_addr)), ("FROM", format_addr(registrant_addr)))
+    finally:
+        f.close()
+    return command == "OK"
+
+def get_reg(facilitator_addr, proxy_addr):
+    """Get a registration from the facilitator using a one-time socket. Returns
+    a dict with keys "client" and "relay" if successful, or a dict with the key
+    "client" mapped to the value "" if there are no registrations available for
+    proxy_addr. Raises an exception otherwise."""
+    f = fac_socket(facilitator_addr)
+    try:
+        command, params = transact(f, "GET", ("FROM", format_addr(proxy_addr)))
+    finally:
+        f.close()
+    if command == "NONE":
+        return {
+            "client": ""
+        }
+    elif command == "OK":
+        client_spec = param_first("CLIENT", params)
+        relay_spec = param_first("RELAY", params)
+        if not client_spec:
+            raise ValueError("Facilitator did not return CLIENT")
+        if not relay_spec:
+            raise ValueError("Facilitator did not return RELAY")
+        # Check the syntax returned by the facilitator.
+        client = parse_addr_spec(client_spec)
+        relay = parse_addr_spec(relay_spec)
+        return {
+            "client": format_addr(client),
+            "relay": format_addr(relay),
+        }
+    else:
+        raise ValueError("Facilitator response was not \"OK\"")
diff --git a/facilitator/facilitator.cgi b/facilitator/facilitator.cgi
index 6ccb479..2ef4cfa 100755
--- a/facilitator/facilitator.cgi
+++ b/facilitator/facilitator.cgi
@@ -17,57 +17,6 @@ Status: %d\r
 \r""" % status
     sys.exit()
 
-def fac_socket():
-    return socket.create_connection(FACILITATOR_ADDR, 1.0).makefile()
-
-def transact(f, command, *params):
-    transaction = fac.render_transaction(command, *params)
-    print >> f, transaction
-    f.flush()
-    line = f.readline()
-    if not (len(line) > 0 and line[-1] == '\n'):
-        raise ValueError("No newline at end of string returned by facilitator")
-    return fac.parse_transaction(line[:-1])
-
-def put_reg(client_addr, registrant_addr):
-    f = fac_socket()
-    try:
-        command, params = transact(f, "PUT", ("CLIENT", fac.format_addr(client_addr)), ("FROM", fac.format_addr(registrant_addr)))
-    finally:
-        f.close()
-    if command == "OK":
-        pass
-    else:
-        exit_error(500)
-
-def get_reg(proxy_addr):
-    f = fac_socket()
-    try:
-        command, params = transact(f, "GET", ("FROM", fac.format_addr(proxy_addr)))
-    finally:
-        f.close()
-    if command == "NONE":
-        return {
-            "client": ""
-        }
-    elif command == "OK":
-        client_spec = fac.param_first("CLIENT", params)
-        relay_spec = fac.param_first("RELAY", params)
-        if not client_spec or not relay_spec:
-            exit_error(500)
-        try:
-            # Check the syntax returned by the backend.
-            client = fac.parse_addr_spec(client_spec)
-            relay = fac.parse_addr_spec(relay_spec)
-        except ValueError:
-            exit_error(500)
-        return {
-            "client": fac.format_addr(client),
-            "relay": fac.format_addr(relay),
-        }
-    else:
-        exit_error(500)
-
 method = os.environ.get("REQUEST_METHOD")
 path_info = os.environ.get("PATH_INFO")
 proxy_addr = (os.environ.get("REMOTE_ADDR"), None)
@@ -83,7 +32,7 @@ def do_get():
     if path != "/":
         exit_error(400)
     try:
-        reg = get_reg(proxy_addr) or ""
+        reg = fac.get_reg(FACILITATOR_ADDR, proxy_addr) or ""
     except:
         exit_error(500)
     # Allow XMLHttpRequest from any domain. http://www.w3.org/TR/cors/.
@@ -106,10 +55,7 @@ def do_post():
         client_addr = fac.parse_addr_spec(client_spec, defhost=proxy_addr[0])
     except ValueError:
         exit_error(400)
-    try:
-        put_reg(client_addr, proxy_addr)
-    except:
-        raise
+    if not fac.put_reg(FACILITATOR_ADDR, client_addr, proxy_addr):
         exit_error(500)
     print """\
 Status: 200\r





More information about the tor-commits mailing list