Example #1
0
def push():
    dn = Domain()
    dn.uid = str(uuid.uuid4())
    dn.name = request.form['domain']
    dn.status = "legitimate"

    if not re.match(r'^[a-zA-Z0-9-_\\.]+$', dn.name):
        raise BadRequest('Invalid domain name')

    while dn.name.startswith('*.'):
        dn.name = dn.name.split('.', 1)[1]

    keywords = app.config['SUSPICIOUS_KEYWORDS']
    matches = []

    for k in keywords:
        matches.extend([{
            "keyword": k,
            "matched": word,
            "score": score
        } for word, score in fuzzy_process.extractBests(k, (dn.name, ),
                                                        score_cutoff=70)])

    if matches or request.form.get('from-ui'):
        dn.status = "check-queued"

    try:
        db.session.add(dn)
        db.session.commit()
    except IntegrityError:
        db.session.rollback()
        if request.form.get('from-ui'):
            return redirect('/')

        return jsonify({"status": "already-exists", "matches": matches})
    else:
        if matches or request.form.get('from-ui'):
            rs.rpush('screen-jobs', json.dumps({"uid": dn.uid}))

        if request.form.get('from-ui'):
            return redirect('/')

        return jsonify({"status": dn.status, "matches": matches})