Ejemplo n.º 1
0
    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))
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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))
Ejemplo n.º 4
0
 def options(self, request, *args, **kwargs):
     return self.write_response(Response(status=HTTP_204_NO_CONTENT))