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
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
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
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