def get(self, request, *args, **kwargs): if not settings.PROJECT: return Response('Project name is not set', status=HTTP_400_BAD_REQUEST) if not settings.TOKEN: return Response('Project token is not set', status=HTTP_400_BAD_REQUEST) token = request.get_argument('token', '') install_type = request.get_argument('install_type', '') if settings.WEB_BASE_URL.startswith( 'https') and not request.full_url().startswith('https'): web_base_url = 'http{}'.format(settings.WEB_BASE_URL[5:]) else: web_base_url = settings.WEB_BASE_URL if token: url = '{}/projects/register/{}'.format(web_base_url, token) else: url = '{}/projects/register'.format(web_base_url) parameters = [ ['project', settings.PROJECT], ['referrer', request.full_url().encode('utf8')], ] if install_type: parameters.append(['install_type', install_type]) query_string = '&'.join( map(lambda x: '{}={}'.format(x[0], quote(x[1])), parameters)) return RedirectResponse('%s?%s' % (url, query_string))
def submit(self): method = self.validated_data['method'] url = self.validated_data['url'] headers = self.validated_data['headers'] or [] query_params = self.validated_data['query_params'] or [] body = self.validated_data.get('body') if isinstance(headers, dict): headers = self.params_dict_to_list(headers) if isinstance(query_params, dict): query_params = self.params_dict_to_list(query_params) if 'secret_tokens' in self.validated_data: url, headers, query_params, body = self.interpolate( url, headers, query_params, body, '{-%s-}', self.validated_data['secret_tokens']) if 'context' in self.validated_data: url, headers, query_params, body = self.interpolate( url, headers, query_params, body, '{{%s}}', self.validated_data['context']) if body: body = body.encode('utf-8') headers = dict(map(lambda x: (x['name'], x['value']), headers)) query_params = list( map(lambda x: (x['name'], x['value']), query_params)) try: r = requests.request(method, url, headers=headers, params=query_params, data=body) response_headers = r.headers remove_headers = [ 'Access-Control-Allow-Origin', 'Access-Control-Allow-Methods', 'Access-Control-Allow-Headers', 'Access-Control-Expose-Headers', 'Access-Control-Allow-Credentials', 'Connection', 'Content-Encoding', 'Content-Length', 'Keep-Alive', 'Proxy-Authenticate', 'Proxy-Authorization', 'TE', 'Trailers', 'Transfer-Encoding', 'Upgrade' ] for header in remove_headers: if header in response_headers: del response_headers[header] response = Response(data=r.content, status=r.status_code, headers=response_headers) return response except Exception as e: raise ValidationError(e)
def get(self, request, *args, **kwargs): if not settings.PROJECT: return Response('Project name is not set', status=HTTP_400_BAD_REQUEST) if not settings.TOKEN: return Response('Project token is not set', status=HTTP_400_BAD_REQUEST) token = request.get_argument('token', '') environment_type = settings.ENVIRONMENT_TYPE if settings.WEB_BASE_URL.startswith( 'https') and not request.full_url().startswith('https'): web_base_url = 'http{}'.format(settings.WEB_BASE_URL[5:]) else: web_base_url = settings.WEB_BASE_URL url = '{}/builder/{}/resources/database/create/'.format( web_base_url, settings.PROJECT) parameters = [ ['engine', settings.DATABASE_ENGINE], ['referrer', request.full_url().encode('utf8')], ] if token: parameters.append(['token', token]) if environment_type: parameters.append(['environment_type', environment_type]) query_string = '&'.join( map(lambda x: '{}={}'.format(x[0], quote(x[1])), parameters)) return RedirectResponse('%s#%s' % (url, query_string))
def options(self, request, *args, **kwargs): return self.write_response(Response(status=HTTP_204_NO_CONTENT))