from walkoff.security import permissions_accepted_for_resources, ResourcePermissions from walkoff.server.decorators import validate_resource_exists_factory def does_playbook_exist(playbook_name): from walkoff.server.context import running_context return running_context.controller.is_playbook_registered(playbook_name) def does_workflow_exist(playbook_name, workflow_name): from walkoff.server.context import running_context return running_context.controller.is_workflow_registered( playbook_name, workflow_name) validate_playbook_is_registered = validate_resource_exists_factory( 'playbook', does_playbook_exist) validate_workflow_is_registered = validate_resource_exists_factory( 'workflow', does_workflow_exist) ''' def validate_playbook_is_registered(operation, playbook_name): from walkoff.server.context import running_context def wrapper(func): if running_context.controller.is_playbook_registered(playbook_name): return func else: current_app.logger.error( 'Could not {0} playbook {1}. Playbook does not exist.'.format(operation, playbook_name)) return lambda: ({"error": 'Playbook does not exist'.format(playbook_name)}, OBJECT_DNE_ERROR) return wrapper
from flask import request, current_app from flask_jwt_extended import jwt_required import walkoff.case.database as case_database from walkoff.security import permissions_accepted_for_resources, ResourcePermissions from walkoff.server.decorators import validate_resource_exists_factory from walkoff.server.returncodes import * validate_event_exists = validate_resource_exists_factory( 'event', lambda event_id: current_app.running_context.case_db.session.query( case_database.Event).filter(case_database.Event.id == event_id).first( )) def update_event_note(): data = request.get_json() event_id = data['id'] @jwt_required @permissions_accepted_for_resources( ResourcePermissions('cases', ['update'])) @validate_event_exists('update', event_id) def __func(): current_app.running_context.case_db.edit_event_note( event_id, data['note']) return current_app.running_context.case_db.event_as_json( event_id), SUCCESS return __func()
def does_execution_id_exist(execution_id): return executiondb.execution_db.session.query( exists().where(WorkflowStatus.execution_id == execution_id)).scalar() def workflow_status_getter(execution_id): return executiondb.execution_db.session.query(WorkflowStatus).filter_by( execution_id=execution_id).first() with_workflow_status = with_resource_factory('workflow', workflow_status_getter, validator=is_valid_uid) validate_workflow_is_registered = validate_resource_exists_factory( 'workflow', does_workflow_exist) validate_execution_id_is_registered = validate_resource_exists_factory( 'workflow', does_execution_id_exist) status_order = OrderedDict([ ((WorkflowStatusEnum.running, WorkflowStatusEnum.awaiting_data, WorkflowStatusEnum.paused), WorkflowStatus.started_at), ((WorkflowStatusEnum.aborted, WorkflowStatusEnum.completed), WorkflowStatus.completed_at) ]) executing_statuses = (WorkflowStatusEnum.running, WorkflowStatusEnum.awaiting_data, WorkflowStatusEnum.paused) completed_statuses = (WorkflowStatusEnum.aborted, WorkflowStatusEnum.completed)
exists().where(WorkflowStatus.execution_id == execution_id)).scalar() def workflow_status_getter(execution_id): return current_app.running_context.execution_db.session.query(WorkflowStatus).filter_by( execution_id=execution_id).first() def workflow_getter(workflow_id): return current_app.running_context.execution_db.session.query(Workflow).filter_by(id=workflow_id).first() with_workflow = with_resource_factory('workflow', workflow_getter, validator=is_valid_uid) with_workflow_status = with_resource_factory('workflow', workflow_status_getter, validator=is_valid_uid) validate_workflow_is_registered = validate_resource_exists_factory('workflow', does_workflow_exist) validate_execution_id_is_registered = validate_resource_exists_factory('workflow', does_execution_id_exist) status_order = OrderedDict( [((WorkflowStatusEnum.running, WorkflowStatusEnum.awaiting_data, WorkflowStatusEnum.paused), WorkflowStatus.started_at), ((WorkflowStatusEnum.aborted, WorkflowStatusEnum.completed), WorkflowStatus.completed_at)]) executing_statuses = (WorkflowStatusEnum.running, WorkflowStatusEnum.awaiting_data, WorkflowStatusEnum.paused) completed_statuses = (WorkflowStatusEnum.aborted, WorkflowStatusEnum.completed) def get_all_workflow_status(): @jwt_required @permissions_accepted_for_resources(ResourcePermissions('playbooks', ['read'])) def __func():