Пример #1
0
from uuid import UUID

from flask import current_app, request
from flask_jwt_extended import jwt_required

from walkoff.extensions import db
from walkoff.scheduler import InvalidTriggerArgs
from walkoff.security import permissions_accepted_for_resources, ResourcePermissions
from walkoff.server.decorators import with_resource_factory
from walkoff.server.problem import Problem
from walkoff.server.returncodes import *
from walkoff.serverdb.scheduledtasks import ScheduledTask

with_task = with_resource_factory('Scheduled task', lambda task_id: ScheduledTask.query.filter_by(id=task_id).first())


def validate_uuids(uuids):
    invalid_uuids = []
    for uuid in uuids:
        try:
            UUID(uuid)
        except ValueError:
            invalid_uuids.append(uuid)
    return invalid_uuids


def get_scheduler_status():
    @jwt_required
    @permissions_accepted_for_resources(ResourcePermissions('scheduler', ['read']))
    def __func():
        return {"status": current_app.running_context.scheduler.scheduler.state}, SUCCESS
Пример #2
0
from uuid import UUID

from flask import current_app, request
from flask_jwt_extended import jwt_required

from walkoff.extensions import db
from walkoff.scheduler import InvalidTriggerArgs
from walkoff.security import permissions_accepted_for_resources, ResourcePermissions
from walkoff.server.decorators import with_resource_factory
from walkoff.server.problem import Problem
from walkoff.server.returncodes import *
from walkoff.serverdb.scheduledtasks import ScheduledTask

with_task = with_resource_factory(
    'Scheduled task',
    lambda task_id: ScheduledTask.query.filter_by(id=task_id).first())


def validate_uuids(uuids):
    invalid_uuids = []
    for uuid in uuids:
        try:
            UUID(uuid)
        except ValueError:
            invalid_uuids.append(uuid)
    return invalid_uuids


def get_scheduler_status():
    @jwt_required
    @permissions_accepted_for_resources(
Пример #3
0
    return executiondb.execution_db.session.query(
        exists().where(Workflow.id == workflow_id)).scalar()


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,
Пример #4
0
from flask import request, current_app
from flask_jwt_extended import jwt_required

from walkoff.extensions import db
from walkoff.security import permissions_accepted_for_resources, ResourcePermissions, admin_required
from walkoff.server.decorators import with_resource_factory
from walkoff.server.problem import Problem
from walkoff.server.returncodes import *
from walkoff.serverdb import clear_resources_for_role, get_all_available_resource_actions
from walkoff.serverdb.role import Role

with_role = with_resource_factory('role', lambda role_id: Role.query.filter_by(id=role_id).first())


def read_all_roles():
    @jwt_required
    @admin_required
    def __func():
        return [role.as_json() for role in Role.query.all()], SUCCESS

    return __func()


def create_role():
    @jwt_required
    @admin_required
    def __func():
        json_data = request.get_json()
        if not Role.query.filter_by(name=json_data['name']).first():
            resources = json_data['resources'] if 'resources' in json_data else []
            if '/roles' in resources:
Пример #5
0
                 Workflow.playbook_id == playbook_id))).scalar()


def playbook_getter(playbook_id):
    playbook = current_app.running_context.execution_db.session.query(
        Playbook).filter_by(id=playbook_id).first()
    return playbook


def workflow_getter(workflow_id):
    return current_app.running_context.execution_db.session.query(
        Workflow).filter_by(id=workflow_id).first()


with_playbook = with_resource_factory('playbook',
                                      playbook_getter,
                                      validator=is_valid_uid)
with_workflow = with_resource_factory('workflow',
                                      workflow_getter,
                                      validator=is_valid_uid)
validate_workflow_is_registered = validate_resource_exists_factory(
    'workflow', does_workflow_exist)

ALLOWED_EXTENSIONS = {'json', 'playbook'}


def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

Пример #6
0
from walkoff.server.returncodes import *
from walkoff.serverdb import db
from walkoff.serverdb.casesubscription import CaseSubscription

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO


def case_getter(case_id):
    return current_app.running_context.case_db.session.query(case_database.Case) \
        .filter(case_database.Case.id == case_id).first()


with_case = with_resource_factory('case', case_getter)
with_subscription = with_resource_factory(
    'subscription',
    lambda case_id: CaseSubscription.query.filter_by(id=case_id).first())


def convert_subscriptions(subscriptions):
    return [
        Subscription(subscription['id'], subscription['events'])
        for subscription in subscriptions
    ]


def split_subscriptions(subscriptions):
    controller_subscriptions = None
    for i, subscription in enumerate(subscriptions):
Пример #7
0
from walkoff.appgateway.apiutil import get_app_device_api, UnknownApp, UnknownDevice, InvalidArgument
from walkoff.appgateway.validator import validate_device_fields
from walkoff.executiondb.device import Device, App
from walkoff.security import permissions_accepted_for_resources, ResourcePermissions
from walkoff.server.decorators import with_resource_factory
from walkoff.server.problem import Problem
from walkoff.server.returncodes import *

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO

with_device = with_resource_factory(
    'device',
    lambda device_id: current_app.running_context.execution_db.session.query(Device).filter(
        Device.id == device_id).first())


def get_device_json_with_app_name(device):
    device_json = device.as_json()
    app = current_app.running_context.execution_db.session.query(App).filter(App.id == device.app_id).first()
    device_json['app_name'] = app.name if app is not None else ''
    return device_json


def read_all_devices():
    @jwt_required
    @permissions_accepted_for_resources(ResourcePermissions('devices', ['read']))
    def __func():
        page = request.args.get('page', 1, type=int)
Пример #8
0
def does_execution_id_exist(execution_id):
    return current_app.running_context.execution_db.session.query(
        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():
Пример #9
0
from walkoff import executiondb
from walkoff.appgateway.validator import validate_device_fields
from walkoff.executiondb.device import Device, App
from walkoff.helpers import get_app_device_api, InvalidArgument, UnknownDevice, UnknownApp
from walkoff.security import permissions_accepted_for_resources, ResourcePermissions
from walkoff.server.decorators import with_resource_factory
from walkoff.server.problem import Problem
from walkoff.server.returncodes import *

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO

with_device = with_resource_factory(
    'device', lambda device_id: executiondb.execution_db.session.query(Device).
    filter(Device.id == device_id).first())


def get_device_json_with_app_name(device):
    device_json = device.as_json()
    app = executiondb.execution_db.session.query(App).filter(
        App.id == device.app_id).first()
    device_json['app_name'] = app.name if app is not None else ''
    return device_json


def read_all_devices():
    @jwt_required
    @permissions_accepted_for_resources(
        ResourcePermissions('devices', ['read']))
Пример #10
0
def does_workflow_exist(playbook_id, workflow_id):
    return current_app.running_context.execution_db.session.query(
        exists().where(and_(Workflow.id == workflow_id, Workflow.playbook_id == playbook_id))).scalar()


def playbook_getter(playbook_id):
    playbook = current_app.running_context.execution_db.session.query(Playbook).filter_by(id=playbook_id).first()
    return playbook


def workflow_getter(workflow_id):
    return current_app.running_context.execution_db.session.query(Workflow).filter_by(id=workflow_id).first()


with_playbook = with_resource_factory('playbook', playbook_getter, validator=is_valid_uid)
with_workflow = with_resource_factory('workflow', workflow_getter, validator=is_valid_uid)
validate_workflow_is_registered = validate_resource_exists_factory('workflow', does_workflow_exist)

ALLOWED_EXTENSIONS = {'json', 'playbook'}


def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS


def unique_constraint_problem(type_, operation, id_):
    return Problem.from_crud_resource(
        OBJECT_EXISTS_ERROR,
        type_,
Пример #11
0
from walkoff.appgateway.validator import validate_device_fields
from walkoff.executiondb.device import Device, App
from walkoff.appgateway.apiutil import get_app_device_api, UnknownApp, UnknownDevice, InvalidArgument
from walkoff.security import permissions_accepted_for_resources, ResourcePermissions
from walkoff.server.decorators import with_resource_factory
from walkoff.server.problem import Problem
from walkoff.server.returncodes import *

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO

with_device = with_resource_factory(
    'device', lambda device_id: current_app.running_context.execution_db.
    session.query(Device).filter(Device.id == device_id).first())


def get_device_json_with_app_name(device):
    device_json = device.as_json()
    app = current_app.running_context.execution_db.session.query(App).filter(
        App.id == device.app_id).first()
    device_json['app_name'] = app.name if app is not None else ''
    return device_json


def read_all_devices():
    @jwt_required
    @permissions_accepted_for_resources(
        ResourcePermissions('devices', ['read']))
Пример #12
0
from flask import request, current_app
from flask_jwt_extended import jwt_required, get_jwt_identity

from walkoff.server.returncodes import *
from walkoff.database import add_user
from walkoff.server.extensions import db
from walkoff.database.user import User
from walkoff.security import permissions_accepted_for_resources, ResourcePermissions, admin_required
from walkoff.server.decorators import with_resource_factory

with_user = with_resource_factory(
    'user', lambda user_id: User.query.filter_by(id=user_id).first())


def read_all_users():
    @jwt_required
    @permissions_accepted_for_resources(ResourcePermissions('users', ['read']))
    def __func():
        return [user.as_json() for user in User.query.all()], SUCCESS

    return __func()


def create_user():
    @jwt_required
    @permissions_accepted_for_resources(
        ResourcePermissions('users', ['create']))
    def __func():
        data = request.get_json()
        username = data['username']
        if not User.query.filter_by(username=username).first():