commit b7c3727f60420c65fcba6d7c870080887fac7840 Author: David Fifield david@bamsoftware.com Date: Thu Oct 17 02:18:21 2013 -0700
Move find_client_addr to fac.py.
This is going to be used in common by facilitator-reg-daemon and facilitator.cgi (the two front-end interfaces to the facilitator that exist).
Currently we're cheating a bit and using cgi.FieldStorage to parse the POST body in facilitator.cgi, which happens to work because of the common URL syntax. --- facilitator/fac.py | 16 ++++++++++++++++ facilitator/facilitator-reg-daemon | 18 +----------------- 2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/facilitator/fac.py b/facilitator/fac.py index 5e917d6..58db4cf 100644 --- a/facilitator/fac.py +++ b/facilitator/fac.py @@ -5,6 +5,7 @@ import socket import stat import subprocess import pwd +import urlparse from collections import namedtuple
# Return true iff the given fd is readable, writable, and executable only by its @@ -147,6 +148,21 @@ def format_addr(addr): raise ValueError("host and port may not both be None") return u"%s%s" % (host_str, port_str)
+def find_client_addr(body): + """Find and parse the first client line of the form + client=... + Returns None if no client line was found.""" + for line in body.splitlines(): + try: + qs = urlparse.parse_qs(line, keep_blank_values=True, strict_parsing=True) + except ValueError: + continue + client_specs = qs["client"] + if len(client_specs) != 1: + continue + return parse_addr_spec(client_specs[0]) + return None +
class Transport(namedtuple("Transport", "inner outer")): @classmethod diff --git a/facilitator/facilitator-reg-daemon b/facilitator/facilitator-reg-daemon index 0eef4b4..77a6bc8 100755 --- a/facilitator/facilitator-reg-daemon +++ b/facilitator/facilitator-reg-daemon @@ -7,7 +7,6 @@ import socket import sys import threading import time -import urlparse
import fac
@@ -77,21 +76,6 @@ def log(msg): finally: log_lock.release()
-def find_client_addr(body): - """Find and parse the first client line of the form - client=... - Returns None if no client line was found.""" - for line in body.splitlines(): - try: - qs = urlparse.parse_qs(line, keep_blank_values=True, strict_parsing=True) - except ValueError: - continue - client_specs = qs["client"] - if len(client_specs) != 1: - continue - return fac.parse_addr_spec(client_specs[0]) - return None - class Handler(SocketServer.StreamRequestHandler): def __init__(self, *args, **kwargs): self.deadline = time.time() + CLIENT_TIMEOUT @@ -123,7 +107,7 @@ class Handler(SocketServer.StreamRequestHandler): try: ciphertext = b64_ciphertext.decode("base64") plaintext = rsa.private_decrypt(ciphertext, RSA.pkcs1_oaep_padding) - client_addr = find_client_addr(plaintext) + client_addr = fac.find_client_addr(plaintext) log(u"registering %s" % safe_str(fac.format_addr(client_addr))) if fac.put_reg(FACILITATOR_ADDR, client_addr, "websocket"): print >> self.wfile, "OK"
tor-commits@lists.torproject.org