Example #1
0
class OneHostnameWorkaroundPolicy(object):
    def __init__(self):
        self._normalPolicy = BrowserLikePolicyForHTTPS()

    def creatorForNetloc(self, hostname, port):
        if hostname == b"wrong.host.badssl.com":
            hostname = b"badssl.com"
        return self._normalPolicy.creatorForNetloc(hostname, port)
Example #2
0
    class VerifyHTTPS(object):
        def __init__(self):
            # by default, handle requests like a browser would
            self.default_policy = BrowserLikePolicyForHTTPS()

        def creatorForNetloc(self, hostname, port):
            # check if the hostname is in the the whitelist, otherwise return the default policy
            if not SETTINGS['verify_https']:
                return ssl.CertificateOptions(verify=False)
            return self.default_policy.creatorForNetloc(hostname, port)
Example #3
0
class WhitelistContextFactory(object):
    def __init__(self, good_domains=None):
        """
        :param good_domains: List of domains. The URLs must be in bytes
        """
        if not good_domains:
            self.good_domains = []
        else:
            self.good_domains = good_domains
        # by default, handle requests like a browser would
        self.default_policy = BrowserLikePolicyForHTTPS()

    def creatorForNetloc(self, hostname, port):
        # check if the hostname is in the the whitelist,
        # otherwise return the default policy
        if hostname in self.good_domains:
            return CertificateOptions(verify=False)
        return self.default_policy.creatorForNetloc(hostname, port)
Example #4
0
class MyEndpointFactory(object):
    """Endpoint factory that will only connect to one specific address."""

    log = Logger()

    def __init__(self, reactor, address):
        """Initialize."""

        self.reactor = reactor
        self.address = address
        self.context_factory = BrowserLikePolicyForHTTPS()

    def endpointForURI(self, uri):  # noqa: N802
        """Create an endpoint for URI."""

        endpoint = HostnameEndpoint(self.reactor, self.address, uri.port)
        if uri.scheme == b'http':
            return endpoint
        elif uri.scheme == b'https':
            connection_creator = self.context_factory.creatorForNetloc(
                uri.host, uri.port)
            return wrapClientTLS(connection_creator, endpoint)