def fromEnv(cls): """ Build a ClientConfig from environment variables. :raises: :class:`pyptlib.config.EnvError` if environment was incomplete or corrupted. :raises: :class:`pyptlib.config.ProxyError` if proxy was incomplete or corrupted. """ # TOR_PT_PROXY is either totally missing or is a valid URI specifying # the proxy that pluggable transports should use. def missing_or_valid_proxy_uri(k, v): if v is None: return v return parseProxyURI(v) return cls(stateLocation=get_env('TOR_PT_STATE_LOCATION'), managedTransportVer=get_env( 'TOR_PT_MANAGED_TRANSPORT_VER').split(','), transports=get_env('TOR_PT_CLIENT_TRANSPORTS').split(','), proxy=get_env('TOR_PT_PROXY', missing_or_valid_proxy_uri))
def fromEnv(cls): """ Build a ClientConfig from environment variables. :raises: :class:`pyptlib.config.EnvError` if environment was incomplete or corrupted. :raises: :class:`pyptlib.config.ProxyError` if proxy was incomplete or corrupted. """ # TOR_PT_PROXY is either totally missing or is a valid URI specifying # the proxy that pluggable transports should use. def missing_or_valid_proxy_uri(k, v): if v is None: return v return parseProxyURI(v) return cls( stateLocation = get_env('TOR_PT_STATE_LOCATION'), managedTransportVer = get_env('TOR_PT_MANAGED_TRANSPORT_VER').split(','), transports = get_env('TOR_PT_CLIENT_TRANSPORTS').split(','), proxy = get_env('TOR_PT_PROXY', missing_or_valid_proxy_uri) )
def fromEnv(cls): """ Build a ServerConfig from environment variables. :raises: :class:`pyptlib.config.EnvError` if environment was incomplete or corrupted. """ # TOR_PT_EXTENDED_SERVER_PORT is set and empty if Tor does not support # the Extended ORPort. def empty_or_valid_addr(k, v): v = env_has_k(k, v) if v == '': return None return util.parse_addr_spec(v) extendedORPort = get_env('TOR_PT_EXTENDED_SERVER_PORT', empty_or_valid_addr) # Check that either both Extended ORPort and the Extended # ORPort Authentication Cookie are present, or neither. if extendedORPort: def get_authcookie(_, v): if v is None: raise ValueError( "Extended ORPort address provided, but no cookie file." ) return v else: def get_authcookie(_, v): if v is not None: raise ValueError( "Extended ORPort Authentication cookie file provided, but no Extended ORPort address." ) return v authCookieFile = get_env('TOR_PT_AUTH_COOKIE_FILE', get_authcookie) # Get ORPort. ORPort = get_env('TOR_PT_ORPORT', empty_or_valid_addr) # Get bind addresses. def get_server_bindaddr(k, bindaddrs): serverBindAddr = {} bindaddrs = env_has_k(k, bindaddrs).split(',') for bindaddr in bindaddrs: (transport_name, addrport) = bindaddr.split('-') (addr, port) = util.parse_addr_spec(addrport) serverBindAddr[transport_name] = (addr, port) return serverBindAddr serverBindAddr = get_env('TOR_PT_SERVER_BINDADDR', get_server_bindaddr) # Get transports. def get_transports(k, transports): transports = env_has_k(k, transports).split(',') t = sorted(transports) b = sorted(serverBindAddr.keys()) if t != b: raise ValueError( "Can't match transports with bind addresses (%s, %s)" % (t, b)) return transports transports = get_env('TOR_PT_SERVER_TRANSPORTS', get_transports) def get_transport_options(k, v): if v is None: return None serverTransportOptions = env_has_k(k, v) return get_transport_options_impl(serverTransportOptions) transport_options = get_env('TOR_PT_SERVER_TRANSPORT_OPTIONS', get_transport_options) return cls(stateLocation=get_env('TOR_PT_STATE_LOCATION'), managedTransportVer=get_env( 'TOR_PT_MANAGED_TRANSPORT_VER').split(','), transports=transports, serverBindAddr=serverBindAddr, ORPort=ORPort, extendedORPort=extendedORPort, authCookieFile=authCookieFile, serverTransportOptions=transport_options)
def fromEnv(cls): """ Build a ServerConfig from environment variables. :raises: :class:`pyptlib.config.EnvError` if environment was incomplete or corrupted. """ # TOR_PT_EXTENDED_SERVER_PORT is set and empty if Tor does not support # the Extended ORPort. def empty_or_valid_addr(k, v): v = env_has_k(k, v) if v == '': return None return util.parse_addr_spec(v) extendedORPort = get_env('TOR_PT_EXTENDED_SERVER_PORT', empty_or_valid_addr) # Check that either both Extended ORPort and the Extended # ORPort Authentication Cookie are present, or neither. if extendedORPort: def get_authcookie(_, v): if v is None: raise ValueError("Extended ORPort address provided, but no cookie file.") return v else: def get_authcookie(_, v): if v is not None: raise ValueError("Extended ORPort Authentication cookie file provided, but no Extended ORPort address.") return v authCookieFile = get_env('TOR_PT_AUTH_COOKIE_FILE', get_authcookie) # Get ORPort. ORPort = get_env('TOR_PT_ORPORT', empty_or_valid_addr) # Get bind addresses. def get_server_bindaddr(k, bindaddrs): serverBindAddr = {} bindaddrs = env_has_k(k, bindaddrs).split(',') for bindaddr in bindaddrs: (transport_name, addrport) = bindaddr.split('-') (addr, port) = util.parse_addr_spec(addrport) serverBindAddr[transport_name] = (addr, port) return serverBindAddr serverBindAddr = get_env('TOR_PT_SERVER_BINDADDR', get_server_bindaddr) # Get transports. def get_transports(k, transports): transports = env_has_k(k, transports).split(',') t = sorted(transports) b = sorted(serverBindAddr.keys()) if t != b: raise ValueError("Can't match transports with bind addresses (%s, %s)" % (t, b)) return transports transports = get_env('TOR_PT_SERVER_TRANSPORTS', get_transports) def get_transport_options(k, v): if v is None: return None serverTransportOptions = env_has_k(k, v) return get_transport_options_impl(serverTransportOptions) transport_options = get_env('TOR_PT_SERVER_TRANSPORT_OPTIONS', get_transport_options) return cls( stateLocation = get_env('TOR_PT_STATE_LOCATION'), managedTransportVer = get_env('TOR_PT_MANAGED_TRANSPORT_VER').split(','), transports = transports, serverBindAddr = serverBindAddr, ORPort = ORPort, extendedORPort = extendedORPort, authCookieFile = authCookieFile, serverTransportOptions = transport_options )