Esempio n. 1
0
    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))
Esempio n. 2
0
    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)
            )
Esempio n. 3
0
    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)
Esempio n. 4
0
    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
            )