# -*- coding:utf-8 -*- from flask import request from api.lib.decorator import args_required from api.lib.decorator import args_validate from api.lib.perm.acl import validate_app from api.lib.perm.acl.trigger import TriggerCRUD from api.lib.perm.auth import auth_only_for_acl from api.lib.perm.auth import auth_with_app_token from api.resource import APIView class TriggerView(APIView): url_prefix = ("/triggers", "/triggers/") @validate_app @auth_with_app_token def get(self): return self.jsonify(TriggerCRUD.get(request.values.get('app_id'))) @args_required('name') @args_required('resource_type_id') @args_required('roles') @args_required('permissions') @validate_app @auth_only_for_acl @args_validate(TriggerCRUD.cls, exclude_args=['app_id']) def post(self): request.values.pop('_key', None) request.values.pop('_secret', None) trigger = TriggerCRUD.add(request.values.pop('app_id', None), **request.values) return self.jsonify(trigger.to_dict()) @args_required('resource_type_id') @args_required('roles') @args_required('permissions') @validate_app @auth_only_for_acl @args_validate(TriggerCRUD.cls, exclude_args=['app_id']) def put(self, _id): request.values.pop('_key', None) request.values.pop('_secret', None) trigger = TriggerCRUD.update(_id, **request.values) return self.jsonify(trigger.to_dict()) @auth_only_for_acl def delete(self, _id): TriggerCRUD.delete(_id) return self.jsonify(id=_id) class TriggerResourceView(APIView): url_prefix = "/triggers/resources" @validate_app @auth_with_app_token @args_required("resource_type_id") def post(self): app_id = request.values.get('app_id') resource_type_id = request.values.get('resource_type_id') wildcard = request.values.get('pattern') uid = request.values.get('owner') resources = TriggerCRUD.get_resources(app_id, resource_type_id, wildcard, uid) resources = [i.to_dict() for i in resources] return self.jsonify(resources) class TriggerApplyView(APIView): url_prefix = "/triggers//apply" @auth_only_for_acl def post(self, _id): TriggerCRUD.apply(_id) return self.jsonify(id=_id) class TriggerCancelView(APIView): url_prefix = "/triggers//cancel" @auth_only_for_acl def post(self, _id): TriggerCRUD.cancel(_id) return self.jsonify(id=_id)