예제 #1
0
    def _start_upstream(self):
        self._buffer.seek(0)
        firstline = self._buffer.readline()
        match = re.match("(?:CONNECT) ([^:]+)(?:[:](\d+))? \w+", firstline)
        if match is None:
            return

        host = match.group(1)
        port = int(match.group(2) or 443)

        cachebrowsed = False
        try:
            Host.get(Host.hostname == host)
            cachebrowsed = True
        except Host.DoesNotExist:
            pass

        if cachebrowsed:
            #logger.info("[HTTPS] %s:%s  <REJECTED>" % (host, port))
            #self.connection.close_local()
            logger.info("[HTTPS] %s:%s  <CACHEBROWSED>" % (host, port))
            return self._connect_upstream(host, port)
        else:
            logger.info("[HTTPS] %s:%s  <PROXYING>" % (host, port))
            return self._connect_upstream(host, port)
예제 #2
0
    def _start_upstream(self):
        self._buffer.seek(0)
        firstline = self._buffer.readline()
        match = re.match("(?:CONNECT) ([^:]+)(?:[:](\d+))? \w+", firstline)
        if match is None:
            return

        host = match.group(1)
        port = int(match.group(2) or 443)

        cachebrowsed = False
        try:
            Host.get(Host.hostname == host)
            cachebrowsed = True
        except Host.DoesNotExist:
            pass

        if cachebrowsed:
            #logger.info("[HTTPS] %s:%s  <REJECTED>" % (host, port))
            #self.connection.close_local()
            logger.info("[HTTPS] %s:%s  <CACHEBROWSED>" % (host, port))
            return self._connect_upstream(host, port)
        else:
            logger.info("[HTTPS] %s:%s  <PROXYING>" % (host, port))
            return self._connect_upstream(host, port)
예제 #3
0
파일: http.py 프로젝트: swn73/cachebrowser
    def _send_upstream_request(self):
        def on_response(response):
            raw_response = response.get_raw()
            raw_response = re.sub('((?:src|href|ng-src|ng-href)\s*=\s*)[\'"]((?:(?:http|https):/)?.*/.*)[\'"]', r'\1"http://127.0.0.1:9000/?v=\2"', raw_response)
            self.send(raw_response)
            self._socket.close()

        logger.info("%s %s" % (self.method, self.url))
        request(self.url, method=self.method, headers=self.headers, callback=on_response)
예제 #4
0
    def _send_upstream_request(self):
        def on_response(response):
            raw_response = response.get_raw()
            raw_response = re.sub('((?:src|href|ng-src|ng-href)\s*=\s*)[\'"]((?:(?:http|https):/)?.*/.*)[\'"]', r'\1"http://127.0.0.1:9000/?v=\2"', raw_response)
            self.send(raw_response)
            self._socket.close()

        logger.info("%s %s" % (self.method, self.url))
        request(self.url, method=self.method, headers=self.headers, callback=on_response)
예제 #5
0
def run_cachebrowser():
    logger.info("Cachebrowser running...")
    logger.debug("Waiting for connections...")

    monkey.patch_all()

    rack.create_server('cli', port=5100, handler=cli.CLIHandler)
    rack.add_server('api', HttpServer(port=5200, handler=api.APIHandler))
    rack.create_server('proxy', port=8080, handler=proxy.ProxyConnection)
    rack.create_server('http', port=9005, handler=http.HttpConnection)

    common.context['server_rack'] = rack
    load_extensions()

    rack.start_all()

    gevent.wait()
예제 #6
0
def run_cachebrowser():
    logger.info("Cachebrowser running...")
    logger.debug("Waiting for connections...")

    monkey.patch_all()

    rack.create_server('cli', port=5100, handler=cli.CLIHandler)
    rack.add_server('api', HttpServer(port=5200, handler=api.APIHandler))
    rack.create_server('proxy', port=8080, handler=proxy.ProxyConnection)
    rack.create_server('http', port=9005, handler=http.HttpConnection)

    common.context['server_rack'] = rack
    load_extensions()

    rack.start_all()

    gevent.wait()
예제 #7
0
    def bootstrap(self, hostname):
        hostname = self._validate_host_name(hostname)
        host_source = None

        # Lookup Host from sources
        try:
            host_data, host_source = self._lookup_host(hostname)
            host, host_created = self._get_or_create_host(hostname,
                                                          create=True)
            host.uses_ssl = host_data['ssl']

            cdn, cdn_created = self._get_or_create_cdn(host_data['cdn'],
                                                       create=True)
            host.cdn = cdn
        except HostNotAvailableError:
            host, host_created = self._get_or_create_host(hostname,
                                                          create=False)
            if not host:
                raise

            cdn, cdn_created = host.cdn, False

        # Bootstrap CDN from sources
        if cdn_created or cdn.edge_server is None:
            try:
                cdn_data, cdn_source = self._lookup_cdn(cdn.id)
                cdn.name = cdn_data['name']
                cdn.edge_server = cdn_data['edge_server']
                cdn.save()

                logger.info("CDN '%s' bootstrapped from '%s'" %
                            (cdn, str(cdn_source)))
            except CDNNotAvailableError:
                host.is_active = False
                host.save()
                raise

        host.is_active = True
        host.save()

        if host_source is not None:
            logger.info("Host '%s' bootstrapped from '%s'" %
                        (host, str(host_source)))
        return host
예제 #8
0
    def _start_remote(self):
        http_request = self.request_builder.http_request

        url = http_request.path
        parsed_url = urlparse.urlparse(url)
        try:
            host = Host.get(Host.hostname==parsed_url.hostname)
            if host.uses_ssl:
                url = url.replace('http', 'https')
            self.cachebrowsed = True
        except Host.DoesNotExist:
            pass

        logger.info("[%s] %s %s" % (http_request.method, url, '<CACHEBROWSED>' if self.cachebrowsed else ''))
        request = http_request.get_raw()
        # request = re.sub(r'^(GET|POST|PUT|DELETE|HEAD) http[s]?://[^/]+/(.+) (\w+)', r'\1 /\2 \3', request)
        response = http.request(url, raw_request=request)

        self._connection.start_remote(response)
예제 #9
0
    def _start_remote(self):
        http_request = self.request_builder.http_request

        url = http_request.path
        parsed_url = urlparse.urlparse(url)
        try:
            host = Host.get(Host.hostname == parsed_url.hostname)
            if host.uses_ssl:
                url = url.replace('http', 'https')
            self.cachebrowsed = True
        except Host.DoesNotExist:
            pass

        logger.info("[%s] %s %s" %
                    (http_request.method, url,
                     '<CACHEBROWSED>' if self.cachebrowsed else ''))
        request = http_request.get_raw()
        # request = re.sub(r'^(GET|POST|PUT|DELETE|HEAD) http[s]?://[^/]+/(.+) (\w+)', r'\1 /\2 \3', request)
        response = http.request(url, raw_request=request)

        self._connection.start_remote(response)
예제 #10
0
    def bootstrap(self, hostname):
        hostname = self._validate_host_name(hostname)
        host_source = None

        # Lookup Host from sources
        try:
            host_data, host_source = self._lookup_host(hostname)
            host, host_created = self._get_or_create_host(hostname, create=True)
            host.uses_ssl = host_data['ssl']

            cdn, cdn_created = self._get_or_create_cdn(host_data['cdn'], create=True)
            host.cdn = cdn
        except HostNotAvailableError:
            host, host_created = self._get_or_create_host(hostname, create=False)
            if not host:
                raise

            cdn, cdn_created = host.cdn, False

        # Bootstrap CDN from sources
        if cdn_created or cdn.edge_server is None:
            try:
                cdn_data, cdn_source = self._lookup_cdn(cdn.id)
                cdn.name = cdn_data['name']
                cdn.edge_server = cdn_data['edge_server']
                cdn.save()

                logger.info("CDN '%s' bootstrapped from '%s'" % (cdn, str(cdn_source)))
            except CDNNotAvailableError:
                host.is_active = False
                host.save()
                raise

        host.is_active = True
        host.save()

        if host_source is not None:
            logger.info("Host '%s' bootstrapped from '%s'" % (host, str(host_source)))
        return host