コード例 #1
0
ファイル: auth.py プロジェクト: techresidents/apisvc
    def process_response(self, context, response, **kwargs):
        if not response.successful:
            return response

        try:
            if context.is_direct_resource():
                authorizer = context.resource_class.desc.authorizer
                authorizer.authorize_response(context, response, **kwargs)
            elif context.is_related_resource():
                base_authorizer = context.resource_manager.resource_class.desc.authorizer
                response = base_authorizer.authorize_response(context, response, **kwargs)
                related_authorizer = context.resource_class.desc.authorizer
                response = related_authorizer.authorize_response(context, response, **kwargs)
            else:
                msg = "unknown resource type"
                logging.error(msg)
                response = ExceptionResponse(AuthorizationError(msg))
        
        except AuthorizationError as error:
            logging.warning(repr(error))
            response = ExceptionResponse(error)
        except Exception as error:
            logging.exception(error)
            response = ExceptionResponse(AuthorizationError(str(error)))

        return response
コード例 #2
0
ファイル: auth.py プロジェクト: techresidents/apisvc
    def process_request(self, context, request, **kwargs):
        response = None

        try:
            if context.is_direct_resource():
                authorizer = context.resource_class.desc.authorizer
                context.query = authorizer.authorize_query(context, request, context.query)
            elif context.is_related_resource():
                base_authorizer = context.resource_manager.resource_class.desc.authorizer
                context.query = base_authorizer.authorize_query(context, request, context.query)
                related_authorizer = context.resource_class.desc.authorizer
                context.query = related_authorizer.authorize_query(context, request, context.query)
            else:
                msg = "unknown resource tpe"
                logging.error(msg)
                response = ExceptionResponse(AuthorizationError(msg))

            resource_map = loaded_resource_map(context.data)
            for resource_class, resources in resource_map.items():
                authorizer = resource_class.desc.authorizer
                authorizer.authorize_query_resources(
                        context=context,
                        resources=resources,
                        query=context.query)
        
        except AuthorizationError as error:
            logging.warning(repr(error))
            response = ExceptionResponse(error)
        except Exception as error:
            logging.exception(error)
            response = ExceptionResponse(AuthorizationError(str(error)))

        return response
コード例 #3
0
    def process_request(self, context, request, **kwargs):
        response = None

        try:
            if context.is_direct_resource():
                query = self._build_query(context, request, **kwargs)
            elif context.is_related_resource():
                query = self._build_related_query(context, request, **kwargs)
            context.query = query

        except InvalidQuery as error:
            logging.warning(repr(error))
            response = ExceptionResponse(error)
        except ValidationError as error:
            logging.warning(repr(error))
            response = ExceptionResponse(error)
        except Exception as error:
            logging.exception(error)
            response = ExceptionResponse(InvalidQuery())

        return response
コード例 #4
0
ファイル: auth.py プロジェクト: techresidents/apisvc
    def process_request(self, context, request, **kwargs):
        try:
            if context.is_direct_resource():
                authenticator = context.resource_class.desc.authenticator
                authenticator.authenticate_request(context, request, **kwargs)
            elif context.is_related_resource():
                base_authenticator = context.resource_manager.resource_class.desc.authenticator
                base_authenticator.authenticate_request(context, request, **kwargs)
                related_authenticator = context.resource_class.desc.authenticator
                related_authenticator.authenticate_request(context, request, **kwargs)
            else:
                msg = "unknown resource tyoe"
                logging.error(msg)
                return ExceptionResponse(AuthenticationError(msg))
        
        except AuthenticationError as error:
            logging.warning(repr(error))
            return ExceptionResponse(error)

        except Exception as error:
            logging.exception(error)
            return ExceptionResponse(AuthenticationError(str(error)))

        return None
コード例 #5
0
ファイル: auth.py プロジェクト: techresidents/apisvc
    def process_request(self, context, request, **kwargs):
        response = None

        with session_store_pool.get() as session_store:
            session = session_store.get_session(request.cookie("sessionid"))
            if session:
                context.session = session
                context.user_id = session.user_id()
                context.tenant_id = session.tenant_id()
            else:
                context.session = None
                context.user_id = None
                context.tenant_id = None
        try:
            authenticator = context.resource_class.desc.authenticator
            authenticator.authenticate_request(context, request, **kwargs)
        except AuthenticationError as error:
            logging.warning(repr(error))
            response = ExceptionResponse(error)
        except Exception as error:
            logging.exception(error)
            return ExceptionResponse(AuthenticationError(str(error)))

        return response
コード例 #6
0
ファイル: serialization.py プロジェクト: techresidents/apisvc
 def process_request(self, context, request, **kwargs):
     response = None
     body = request.body()
     if body:
         try:
             content_type = request.header(
                 "content-type") or DEFAULT_CONTENT_TYPE
             format = CONTENT_TYPE_FORMAT.get(content_type, DEFAULT_FORMAT)
             result = [] if context.bulk else context.resource_class()
             try:
                 serializer = context.resource_class.serializer
                 context.data = serializer.deserialize(
                     api=self.api,
                     resource_uri=context.path,
                     resource=result,
                     format=format,
                     data=body)
             except:
                 result = context.resource_class()
                 context.data = serializer.deserialize(
                     api=self.api,
                     resource=result,
                     resource_uri=context.path,
                     format=format,
                     data=body)
                 context.bulk = False
         except ValidationError as error:
             logging.warning(repr(error))
             response = ExceptionResponse(error)
         except Exception as error:
             logging.exception(error)
             response = ExceptionResponse(
                 ValidationError("invalid request"))
     else:
         context.data = None
     return response
コード例 #7
0
    def dispatch(self, context, request, **kwargs):
        try:
            response_code = 200

            if context.resource_class:
                if request.method() == "GET":
                    if context.bulk:
                        result = context.query.all()
                    else:
                        result = context.query.one()
                elif request.method() == "POST":
                    if context.bulk:
                        result = context.query.bulk_create(
                            resources=context.data)
                    else:
                        result = context.query.create(resource=context.data)
                    response_code = 201
                elif request.method() == "PUT":
                    if context.bulk:
                        result = context.query.bulk_update(
                            resources=context.data)
                    else:
                        result = context.query.update(resource=context.data)
                    if result is None:
                        response_code = 204
                elif request.method() == "DELETE":
                    if context.bulk:
                        result = context.query.bulk_delete(
                            resources=context.data)
                    else:
                        result = context.query.delete()
                    if result is None:
                        response_code = 204
            else:
                result = None
                response_code = 204

            response = Response(code=response_code, data=result)
        except RestException as error:
            logging.warning(repr(error))
            response = ExceptionResponse(error)
        except Exception as error:
            logging.exception(error)
            raise

        return response