mirror of https://github.com/veops/cmdb.git
93 lines
2.5 KiB
Python
93 lines
2.5 KiB
Python
# -*- 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/<int:_id>")
|
|
|
|
@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/<int:_id>/apply"
|
|
|
|
@auth_only_for_acl
|
|
def post(self, _id):
|
|
TriggerCRUD.apply(_id)
|
|
|
|
return self.jsonify(id=_id)
|
|
|
|
|
|
class TriggerCancelView(APIView):
|
|
url_prefix = "/triggers/<int:_id>/cancel"
|
|
|
|
@auth_only_for_acl
|
|
def post(self, _id):
|
|
TriggerCRUD.cancel(_id)
|
|
|
|
return self.jsonify(id=_id)
|