コード例 #1
0
ファイル: report.py プロジェクト: raoulodc/isthislegit
def report():
    ''' Receives a report in JSON format '''
    payload = request.get_json()

    reported_by = payload.get('reported_by', '').encode('utf-8')
    if not reported_by:
        return json_error(400, 'Missing reported_by param', {})
    reported_domain = address.parse(reported_by).hostname

    msg_id = payload.get('message_id', '').encode('utf-8')
    report = payload.get('report', '').encode('utf-8')

    if msg_id:
        raw = email_provider.fetch(userId=reported_by, messageId=msg_id)
    elif report:
        raw = payload.get('report').encode('utf-8')
    else:
        return json_error(400, 'Missing message_id or report params', {})

    try:
        report = EmailReport.from_raw(raw)
        report.reported_by = reported_by
        report.put()

        event_key = EventReportCreated(report=report).put()
        report.events.append(event_key)
        report.put()

        ReporterCount.increment(report.reported_domain, reported_by)

    except Exception as e:
        print str(e)
        return json_error(400, str(e), {})

    rules = Rule.domain_query(reported_domain).fetch()
    rule_match = False
    for rule in rules:
        if not rule.active:
            continue
        result = rule.evaluate(report)
        if result:
            rule_match = True
            event_key = EventRuleMatch(rule=rule, report=report).put()
            report.events.append(event_key)
    # Only do a PUT operation once to save time
    if rule_match:
        report.put()

    StatusTimeline.update(report.date_reported.date(), report.reported_domain,
                          report.status)

    # parse the stuff
    return jsonify({'success': True, 'error': None, 'data': {}})