Ejemplo n.º 1
0
    def post(self):
        args = self.parser.parse_args(
        )  # need to exists for input payload validation

        query_id = args['query_id']
        status = 'failure'
        message = None

        add_tags = args['add_tags'].split(',')
        remove_tags = args['remove_tags'].split(',')
        if not (add_tags or remove_tags):
            message = 'Please provide tags'
        else:
            query = dao.get_query_by_id(query_id)
            if not query:
                message = 'Invalid query id. Query with this id does not exist'
            else:
                if add_tags:
                    add_tags = create_tags(*add_tags)
                    for add_tag in add_tags:
                        if not add_tag in query.tags:
                            query.tags.append(add_tag)

                if remove_tags:
                    remove_tags = get_tags(*remove_tags)
                    for remove_tag in remove_tags:
                        if remove_tag in query.tags:
                            query.tags.remove(remove_tag)
                query.save()
                status = 'success'
                message = 'Successfully modified the tag(s)'
        return marshal(respcls(message, status),
                       parentwrapper.common_response_wrapper,
                       skip_none=True)
Ejemplo n.º 2
0
    def post(self):
        args = self.parser.parse_args()  # need to exists for input payload validation
        status = 'failure'
        host_identifier = args['host_identifier']
        add_tags = args['add_tags'].split(',')
        remove_tags = args['remove_tags'].split(',')
        node = dao.get_node_by_host_identifier(host_identifier)
        if not node:
            message = 'Invalid host identifier. This node does not exist'
        else:
            if add_tags:
                add_tags = create_tags(*add_tags)
                for add_tag in add_tags:
                    if not add_tag in node.tags:
                        node.tags.append(add_tag)

            if remove_tags:
                remove_tags = get_tags(*remove_tags)
                for remove_tag in remove_tags:
                    if remove_tag in node.tags:
                        node.tags.remove(remove_tag)

            node.save()
            status = 'success'
            message = 'Successfully modified the tag(s)'

        return marshal(respcls(message,status), parentwrapper.common_response_wrapper, skip_none=True)
Ejemplo n.º 3
0
    def post(self):
        args = self.parser.parse_args(
        )  # need to exists for input payload validation

        name = args['name']
        sql = args['query']
        interval = args['interval']
        tags = args['tags'].split(',')

        query = dao.get_query_by_name(name)
        if query:
            message = 'Query with this name already exists'
        elif not validate_osquery_query(sql):
            message = ('Invalid osquery query: "{0}"'.format(args['query']))
        else:
            query = dao.create_query_obj(name,
                                         sql,
                                         interval,
                                         args['platform'],
                                         args['version'],
                                         args['description'],
                                         args['value'],
                                         100,
                                         snapshot=args['snapshot'])
            if tags:
                query.tags = create_tags(*tags)
            query.save()
            return marshal({'query_id': query.id}, wrapper.add_query_wrapper)
        return marshal(respcls(message), parentwrapper.failure_response_parent)
Ejemplo n.º 4
0
    def post(self):
        args = self.parser.parse_args(
        )  # need to exists for input payload validation
        pack_id = args['pack_id']
        status = 'failure'
        message = None

        add_tags = args['add_tags'].split(',')
        remove_tags = args['remove_tags'].split(',')

        pack = dao.get_pack_by_id(pack_id)
        if not pack:
            message = 'Invalid pack id. Pack with this id does not exist'
        else:
            if add_tags:
                add_tags = create_tags(*add_tags)
                for add_tag in add_tags:
                    if not add_tag in pack.tags:
                        pack.tags.append(add_tag)

            if remove_tags:
                remove_tags = get_tags(*remove_tags)
                for remove_tag in remove_tags:
                    if remove_tag in pack.tags:
                        pack.tags.remove(remove_tag)

            pack.save()
            status = 'success'
            message = 'Successfully modified the tag(s)'

        return marshal(respcls(message, status),
                       parentwrapper.common_response_wrapper,
                       skip_none=True)
Ejemplo n.º 5
0
 def post(self):
     args = self.parser.parse_args(
     )  # need to exists for input payload validation
     add_tags = args['tags'].split(',')
     add_tags = create_tags(*add_tags)
     message = "Tags are added successfully"
     status = "success"
     return marshal(respcls(message, status),
                    parentwrapper.failure_response_parent)
Ejemplo n.º 6
0
def add_pack_through_json_data(args):
    from polylogyx.wrappers.v1 import parent_wrappers
    from polylogyx.utils import create_tags, validate_osquery_query
    from flask_restplus import marshal

    if 'tags' in args:
        tags = args['tags'].split(',')
    else:
        tags = []
    name = args['name']
    queries = args['queries']
    category = args['category']
    platform = args.get('platform', None)
    version = args.get('version', None)
    description = args.get('description', None)
    shard = args.get('shard', None)

    pack = packs_dao.get_pack_by_name(name)
    if not pack:
        pack = packs_dao.add_pack(name, category, platform, version,
                                  description, shard)

    for query_name, query in queries.items():
        if not validate_osquery_query(query['query']):
            message = ('Invalid osquery query: "{0}"'.format(query['query']))
            return marshal({'message': message},
                           parent_wrappers.failure_response_parent)
        q = queries_dao.get_query_by_name(query_name)

        if not q:
            q = queries_dao.add_query(query_name, **query)
            pack.queries.append(q)
            current_app.logger.debug("Adding new query %s to pack %s", q.name,
                                     pack.name)
            continue
        else:
            if q.sql == query['query']:
                current_app.logger.debug("Adding existing query %s to pack %s",
                                         q.name, pack.name)
                pack.queries.append(q)
            else:
                q2 = queries_dao.add_query(query_name, **query)
                current_app.logger.debug(
                    "Created another query named %s, but different sql: %r vs %r",
                    query_name, q2.sql.encode('utf-8'), q.sql.encode('utf-8'))
                pack.queries.append(q2)

            if q in pack.queries:
                continue

    if pack:
        if tags:
            pack.tags = create_tags(*tags)
        pack.save()
    return pack
Ejemplo n.º 7
0
    def post(self):
        from polylogyx.dao.v1 import packs_dao
        args = self.parser.parse_args()

        name = args['name']
        sql = args['query']
        interval = args['interval']
        if args['snapshot'] == "true":
            args['snapshot'] = True
        else:
            args['snapshot'] = False

        if args['tags']:
            tags = args['tags'].split(',')
        else:
            tags = args['tags']
        packs = []
        if args['packs']: packs = args['packs'].split(',')
        query = dao.get_query_by_name(name)
        if query:
            message = 'Query with this name already exists'
        elif not validate_osquery_query(sql):
            message = ('Invalid osquery query: "{0}"'.format(args['query']))
        elif not is_number_positive(interval):
            message = 'Interval provided is not valid! Please provide an inverval greater than 0'
        else:
            query = dao.create_query_obj(name,
                                         sql,
                                         interval,
                                         args['platform'],
                                         args['version'],
                                         args['description'],
                                         args['value'],
                                         100,
                                         snapshot=args['snapshot'])
            if tags:
                query.tags = create_tags(*tags)
            if packs:
                packs_list = []
                for pack_name in packs:
                    pack = packs_dao.get_pack_by_name(pack_name)
                    if pack:
                        packs_list.append(pack)
                query.packs = packs_list
            query.save()
            return marshal({'query_id': query.id}, wrapper.add_query_wrapper)
        return marshal(respcls(message), parentwrapper.failure_response_parent)
Ejemplo n.º 8
0
def add_pack_through_json_data(args):

    from polylogyx.dao import packs_dao, queries_dao
    from polylogyx.wrappers import parent_wrappers
    from polylogyx.utils import create_tags, validate_osquery_query
    from flask_restplus import marshal

    tags = args['tags']
    name = args['name']
    queries = args['queries']
    pack = packs_dao.get_pack_by_name(name)
    if not pack:
        pack = packs_dao.add_pack(**args)

    for query_name, query in queries.items():
        if not validate_osquery_query(query['query']):
            message = ('Invalid osquery query: "{0}"'.format(query['query']))
            return marshal({'message': message}, parent_wrappers.failure_response_parent)
        q = queries_dao.get_query_by_name(query_name)

        if not q:
            q = queries_dao.add_query(query_name, **query)
            pack.queries.append(q)
            current_app.logger.debug("Adding new query %s to pack %s",
                                     q.name, pack.name)
            continue

        if q in pack.queries:
            continue

        if q.sql == query['query']:
            current_app.logger.debug("Adding existing query %s to pack %s",
                                     q.name, pack.name)
            pack.queries.append(q)
        else:
            q2 = queries_dao.add_query(query_name, **query)
            current_app.logger.debug(
                "Created another query named %s, but different sql: %r vs %r",
                query_name, q2.sql.encode('utf-8'), q.sql.encode('utf-8'))
            pack.queries.append(q2)

    if pack:
        if tags:
            pack.tags = create_tags(*tags)
        pack.save()
    return pack