Esempio n. 1
0
 def do_OPTIONS(self):
     target = f'{self.proxy_target}{self.path}'
     http_proxy = Http_Proxy(target=target,
                             method='OPTIONS',
                             headers=self.headers)
     response = http_proxy.make_request()
     self.handle_response(response)
Esempio n. 2
0
class Lambda_Event:

    def __init__(self, event):
        """
        :param event: data received from Lambda functions
        """
        self.lambda_data = { 'body'            : event.get('body'          , {}                         ),
                             'path'            : event.get('path'          , ''                         ),
                             'method'          : event.get('httpMethod'    , ''                         ),
                             'domain_prefix'   : event.get('requestContext', {}).get('domainPrefix'     ),
                             'headers'         : event.get('headers'       , {}                         )}

        self.target = self.domain_parser(event.get('domain_prefix'), self.lambda_data.get('path'))
        self.http_proxy = Http_Proxy(body          = self.lambda_data.get('body'         ),
                                     headers       = self.lambda_data.get('headers'      ),
                                     method        = self.lambda_data.get('method'       ),
                                     target        = self.target)

    def domain_parser(self, domain_prefix, path=''):
        if   domain_prefix  == CONST_STACKOVERFLOW  : target_domain = CONST_SITE_STACKOVERFLOW
        elif domain_prefix  == CONST_GLASSWALL      : target_domain = CONST_SITE_GLASSWALL
        elif domain_prefix  == CONST_GW_PROXY       : target_domain = CONST_DEFAULT_SITE
        elif domain_prefix is not None              : target_domain = domain_prefix.replace("_", ".")
        else                                        : target_domain = CONST_DEFAULT_SITE

        parsed_path = urlparse(path or '')
        url = urlunparse(ParseResult(scheme='https'           , netloc=target_domain    , path     =parsed_path.path,
                                     params=parsed_path.params, query =parsed_path.query, fragment=parsed_path.fragment))
        return url

    def get_response(self):
        return self.http_proxy.make_request()
Esempio n. 3
0
 def do_GET(self):
     """Respond to a GET request."""
     target = f'{self.proxy_target}{self.path}'
     http_proxy = Http_Proxy(target=target,
                             method='GET',
                             headers=self.headers)
     response = http_proxy.make_request()
     self.handle_response(response)
Esempio n. 4
0
 def do_PUT(self):                                       # todo: refactor these methods (do_GET, do_POST, do_PUT) since most have the same code
     """Respond to a PUT request."""
     target = f'{self.proxy_target}{self.path}'
     content_len = int(self.headers.get('content-length', 0))
     if content_len > 0:
         post_body = self.rfile.read(content_len)
     else:
         post_body = ''
     http_proxy = Http_Proxy(target=target, method='PUT', body=post_body, headers=self.headers)
     response = http_proxy.make_request()
     self.handle_response(response)
Esempio n. 5
0
 def do_POST(self):
     """Respond to a POST request."""
     target = f'{self.proxy_target}{self.path}'
     content_len = int(self.headers.get('content-length', 0))
     if content_len > 0:
         post_body = self.rfile.read(content_len)
     else:
         post_body = ''
     http_proxy = Http_Proxy(target=target, method='POST', body=post_body, headers=self.headers)
     response = http_proxy.make_request()
     self.handle_response(response)