[tor-commits] [flashproxy/master] Implement POST in facilitator.cgi.

dcf at torproject.org dcf at torproject.org
Fri Aug 31 11:39:36 UTC 2012


commit a0fbc9512c3aacad177187cc43f55460025efa85
Author: David Fifield <david at bamsoftware.com>
Date:   Sat Aug 11 05:33:04 2012 -0700

    Implement POST in facilitator.cgi.
---
 facilitator.cgi |   33 +++++++++++++++++++++++++++++++--
 1 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/facilitator.cgi b/facilitator.cgi
index 31c632e..39566d3 100755
--- a/facilitator.cgi
+++ b/facilitator.cgi
@@ -29,8 +29,15 @@ def transact(f, command, *params):
     return fac.parse_transaction(line[:-1])
 
 def put_reg(client_addr, registrant_addr):
-    # Pretending to register client_addr as reported by registrant_addr.
-    pass
+    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()
@@ -66,6 +73,8 @@ proxy_addr = (os.environ.get("REMOTE_ADDR"), None)
 if not method or not proxy_addr[0]:
     exit_error(400)
 
+fs = cgi.FieldStorage()
+
 def do_get():
     try:
         reg = get_reg(proxy_addr) or ""
@@ -80,7 +89,27 @@ Access-Control-Allow-Origin: *\r
 \r"""
     sys.stdout.write(urllib.urlencode(reg))
 
+def do_post():
+    client_specs = fs.getlist("client")
+    if len(client_specs) != 1:
+        exit_error(400)
+    client_spec = client_specs[0]
+    try:
+        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
+        exit_error(500)
+    print """\
+Status: 200\r
+\r"""
+
 if method == "GET":
     do_get()
+elif method == "POST":
+    do_post()
 else:
     exit_error(405)





More information about the tor-commits mailing list