Example #1
0
def create_resource(user):
    try:
        resource_name = request.json["resource_name"].strip()
        resource_type = request.json["resource_type"].lower()

        resource_type = ResourceType.get_type_from_string(resource_type)

        resource = Resources.get(resource_name, resource_type, get_by_name=True)

        project = User(user).get_active_project()
        project.add_resource(resource)

        response = []
        response.append(
            {
                "success_message": f"Added new resource: {resource_name}",
                "new_resource": resource.to_JSON(),
                "type": resource.get_type_value(),
            }
        )

        resource.launch_plugins(project.get_id())

        # Deal with the case of URL resources where we have the chance to add a Domain or IP
        if resource.get_type() == ResourceType.URL:
            ip_or_domain = urllib.parse.urlparse(resource_name).netloc
            resource_type = ResourceType.validate_ip_or_domain(ip_or_domain)
            if ip_or_domain:
                resource = Resources.get(ip_or_domain, resource_type, get_by_name=True)
                project.add_resource(resource)
                response.append(
                    {
                        "success_message": f"Added new resource: {ip_or_domain}",
                        "new_resource": resource.to_JSON(),
                        "type": resource.get_type_value(),
                    }
                )
                resource.launch_plugins(project.get_id())

        # TODO: Deal with the case of domain -> IP
        # TODO: Deal with the case of emails -> domains -> IP

        return jsonify(response)

    except ResourceTypeException:
        return jsonify({"error_message": "Trying to add an unkown resource type"}), 400

    except Exception as e:
        tb1 = traceback.TracebackException.from_exception(e)
        print("".join(tb1.format()))
        return jsonify({"error_message": "Server error :("}), 400
Example #2
0
def get_active_project(user):
    try:
        active_project = User(user.get("_id")).get_active_project()
        if not active_project:
            return jsonify({})
        else:
            return jsonify({"project_id": active_project.get_id()})

    except Exception as e:
        print(f"Error when getting active project {e}")
        return jsonify({"error_message": "Error getting active project"}), 400
Example #3
0
def launch_plugin(user):
    try:
        resource_id = bson.ObjectId(request.json["resource_id"])
        plugin_name = request.json["plugin_name"]

        project = User(user).get_active_project()
        resource = Resource(resource_id)

        resource.launch_plugin(project.get_id(), plugin_name)
        return jsonify({"sucess_message": "ok"})

    except Exception as e:
        print(f"[launch_plugin]: {e}")
        return jsonify({"error_message": "Error launching plugin"}), 400
Example #4
0
def launch_plugin(user):
    try:
        resource_id = bson.ObjectId(request.json["resource_id"])
        resource_type_as_string = request.json["resource_type"]
        plugin_name = request.json["plugin_name"]

        project = User(user).get_active_project()
        resource_type = ResourceType(resource_type_as_string)
        resource = Resources.get(resource_id, resource_type)

        resource.launch_plugin(project.get_id(), plugin_name)
        return jsonify({"sucess_message": "ok"})

    except Exception as e:
        print(e)
        return jsonify(
            {"error_message": "Error unlinking resource from project"}), 400