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)
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 })})