예제 #1
0
def node_post():
    if "name" not in request.form:
        return json_error(404, "Missing node name")

    if "ip" not in request.form and "url" not in request.form:
        return json_error(404, "Missing IP address or direct URL")

    if Node.query.filter_by(name=request.form["name"]).first():
        return json_error(409, "There is already a node with this name")

    url = node_url(ip=request.form.get("ip"), url=request.form.get("url"))
    node = Node(name=request.form["name"], url=url,
                mode=request.form.get("mode", "normal"))

    try:
        machines = list_machines(url)
    except Exception as e:
        return json_error(404, "Error connecting to Cuckoo node: %s", e)

    for machine in machines:
        m = Machine(name=machine["name"], platform=machine["platform"],
                    tags=machine["tags"])
        node.machines.append(m)
        db.session.add(m)

    db.session.add(node)
    db.session.commit()
    return jsonify(success=True, machines=machines)
예제 #2
0
def node_refresh(name):
    node = Node.query.filter_by(name=name).first()
    if not node:
        return json_error(404, "No such node")

    try:
        machines = list_machines(node.url)
    except Exception as e:
        return json_error(404, "Error connecting to Cuckoo node: %s", e)

    machines_existing = {}
    for machine in node.machines:
        machine_values = machine.name, machine.platform
        machines_existing[machine_values] = machine

    # Add new machines.
    for machine in machines:
        machine_values = machine["name"], machine["platform"]
        if machine_values in machines_existing:
            # Update the associated tags for this machine.
            machines_existing[machine_values].tags = machine["tags"]
            del machines_existing[machine_values]
            continue

        m = Machine(name=machine["name"], platform=machine["platform"],
                    tags=machine["tags"])
        node.machines.append(m)
        db.session.add(m)

    # Unlink older machines.
    for machine in machines_existing.values():
        node.machines.remove(machine)

    db.session.commit()
    return jsonify(success=True, machines=machines)