Exemplo n.º 1
0
    def error_response(self, exc_type, exc, traceback):
        if isinstance(exc, PermissionDenied):
            return TemplateResponse('403.html', status=403, data={
                'path': self.request.path,
            })
        elif isinstance(exc, NotFound):
            return TemplateResponse('404.html', status=404, data={
                'path': self.request.path,
            })
        elif isinstance(exc, ValidationError):
            response = serialize_validation_error(exc)
            return JSONResponse(response, status=exc.status_code)
        elif isinstance(exc, APIException):
            return JSONResponse({
                'error': exc.detail,
                'error_code': exc.code
            }, status=exc.status_code)
        else:
            if settings.DEBUG:
                ctx = {
                    'path': self.request.path if self.request else None,
                    'full_path': self.request.protocol + '://' + self.request.host + self.request.path if self.request else None,
                    'method': self.request.method if self.request else None,
                    'type': configuration.get_type(),
                    'version': configuration.get_version(),
                    'current_datetime': datetime.now().strftime('%c'),
                    'python_version': platform.python_version(),
                    'python_executable': sys.executable,
                    'python_path': sys.path
                }

                if exc:
                    ctx.update({
                        'exception_type': exc_type.__name__,
                        'exception_value': six.text_type(exc)
                    })

                if traceback:
                    last_traceback = traceback

                    while last_traceback.tb_next:
                        last_traceback = last_traceback.tb_next

                    frame = last_traceback.tb_frame
                    func_name = frame.f_code.co_name
                    file_name = frame.f_code.co_filename
                    line_number = frame.f_lineno

                    ctx.update({
                        'exception_last_traceback_line': line_number,
                        'exception_last_traceback_func': func_name,
                        'exception_last_traceback_file': file_name,
                    })

                logger.exception(exc)

                return TemplateResponse('500.debug.html', status=500, data=ctx)
            else:
                return TemplateResponse('500.html', status=500)
Exemplo n.º 2
0
    def _complete(self, app):
        self.init_auth(app)

        # Hack for passing SSO
        setattr(self.backend, 'sso', app)
        result = do_complete(self.backend, login=lambda: None)

        success = result and result.get('auth')
        auth_uri = configuration.session_get(self.request, AUTH_URI_KEY,
                                             '/api/')
        project = configuration.session_get(self.request, PROJECT_KEY)
        redirect_uri = configuration.session_get(self.request,
                                                 REDIRECT_URI_KEY)

        data = {
            'sso': app,
            'token': settings.TOKEN,
            'project': project,
            'redirect_uri': redirect_uri
        }

        if success:
            data['result'] = True
            data['username'] = result['details'].get('username')
            data['email'] = result['details'].get('email')
            data['first_name'] = result['details'].get('first_name')
            data['last_name'] = result['details'].get('last_name')
            data['full_name'] = result['details'].get('fullname')
        else:
            data['result'] = False
            data['error'] = 'Authentication failed'

        return TemplateResponse(
            'external_auth_complete.html',
            status=200,
            data={'context': json.dumps({
                'url': auth_uri,
                'data': data
            })})