Beispiel #1
0
def get_all_report_attachments(report=None):
    """ Get attached documents for a report
    """
    if 'filters' in request.args:
        code, resp, nb_attached = ReportsController.get_all_attachments(report=report, filters=request.args['filters'])
    else:
        code, resp, nb_attached = ReportsController.get_all_attachments(report=report)
    return code, resp
Beispiel #2
0
def get_all_items_screenshot(report=None):
    """ Get all available screenshots for given report
    """
    if 'filters' in request.args:
        code, resp = ReportsController.get_items_screenshot(report=report, filters=request.args['filters'])
    else:
        code, resp = ReportsController.get_items_screenshot(report=report)
    return code, resp
Beispiel #3
0
def update_report(report=None):
    """ Update a given report
    """
    if request.method == 'PUT':
        body = request.get_json()
        code, resp = ReportsController.update(report, body, g.user)
    else:
        code, resp = ReportsController.destroy(report)
    return code, resp
Beispiel #4
0
def bulk_add_reports():
    """ Bulk add on reports
    """
    body = request.get_json()
    if request.method == 'PUT':
        code, resp = ReportsController.bulk_add(body, g.user, request.method)
    else:
        code, resp = ReportsController.bulk_delete(body, g.user, request.method)
    return code, resp
Beispiel #5
0
def get_all_reports():
    """ Get abuse reports

        Filtering is possible through "filters" query string, JSON double encoded format
    """
    if 'filters' in request.args:
        code, resp, nb_reps = ReportsController.index(filters=request.args['filters'], user=g.user)
    else:
        code, resp, nb_reps = ReportsController.index(user=g.user)
    return code, resp
Beispiel #6
0
def search(**kwargs):
    """ Global Search
    """
    filters = {}
    user = kwargs['user']

    if 'filters' in kwargs:
        try:
            filters = json.loads(unquote(unquote(kwargs['filters'])))
        except (ValueError, SyntaxError):
            return 400, {'status': 'Bad Request', 'code': 400, 'message': 'Unable to decode JSON'}

    custom_filters = {
        'ticket': {
            'fields': SEARCH_TICKET_FIELDS,
            'filters': deepcopy(filters),
        },
        'report': {
            'fields': SEARCH_REPORT_FIELDS,
            'filters': deepcopy(filters),
        },
    }

    try:
        for _, values in custom_filters.iteritems():
            for key, val in filters.iteritems():
                if key == 'queryFields':
                    values['filters'][key] = [q for q in val if q in values['fields']]
                if key == 'sortBy':
                    values['filters'][key] = {k: v for k, v in filters[key].iteritems() if k in values['fields']}
                if key == 'where':
                    for key2 in filters[key].keys():
                        values['filters'][key][key2] = [a for a in filters[key][key2] if a.keys()[0] in values['fields']]
    except AttributeError:
        return 400, {'status': 'Bad Request', 'code': 400, 'message': 'Invalid fields in body'}

    for _, values in custom_filters.iteritems():
        if 'where' in values['filters']:
            new_where = deepcopy(values['filters']['where'])
            for key, val in values['filters']['where'].iteritems():
                for field in values['filters']['where'][key]:
                    if field.keys()[0] in SEARCH_MAPPING:
                        for new_field in SEARCH_MAPPING[field.keys()[0]]:
                            new_where[key].append({new_field: field[field.keys()[0]]})
                        new_where[key].remove(field)
                    elif 'ticketTag' in field:
                        if Tag.objects.filter(name__in=field['ticketTag'], tagType='Report').count():
                            new_where[key].append({'reportsTag': field['ticketTag']})
                        else:
                            new_where[key].append({'ticketsTag': field['ticketTag']})
                        new_where[key].remove(field)
            values['filters']['where'] = new_where

    from api.controllers import ReportsController, TicketsController
    code1, reps, nb_reps = ReportsController.index(filters=json.dumps(custom_filters['report']['filters']), user=user)
    code2, ticks, nb_ticks = TicketsController.index(filters=json.dumps(custom_filters['ticket']['filters']), user=user)

    code = code1 if code1 > code2 else code2
    return code, {'tickets': ticks, 'reports': reps, 'ticketsCount': nb_ticks, 'reportsCount': nb_reps}
Beispiel #7
0
def get_report_attachment(report=None, attachment=None):
    """ Get attached documents for a report
    """
    code, resp = ReportsController.get_attachment(report, attachment)
    if code != 200:
        return make_response(json.dumps(resp), code, {'content-type': 'application/json'})

    bytes_io = BytesIO(resp['raw'])
    return send_file(bytes_io, attachment_filename=resp['filename'], mimetype=resp['filetype'], as_attachment=True)
Beispiel #8
0
def get_report(report=None):
    """ Get a given report
    """
    code, resp = ReportsController.show(report)
    return code, resp
Beispiel #9
0
def post_feedback(report=None):
    """ Post feeback
    """
    body = request.get_json()
    code, resp = ReportsController.parse_screenshot_feedback(report, body, g.user)
    return code, resp
Beispiel #10
0
def delete_report_tag(report=None, tag=None):
    """ Delete report tag
    """
    code, resp = ReportsController.remove_tag(report, tag)
    return code, resp
Beispiel #11
0
def add_report_tag(report=None):
    """ Add tag to report
    """
    body = request.get_json()
    code, resp = ReportsController.add_tag(report, body)
    return code, resp
Beispiel #12
0
def get_dehtmlified_report(report=None):
    """ Get raw email for a report
    """
    code, resp = ReportsController.get_dehtmlified(report)
    return code, resp
Beispiel #13
0
def get_raw_report(report=None):
    """ Get raw email for a report
    """
    code, resp = ReportsController.get_raw(report)
    return code, resp