def task_delete(request, task_id): """ Deletes a task :param body: required: task_id :return: """ task = db.view_task(task_id) if task: if task.status == TASK_RUNNING: return json_fatal_response("The task is currently being " "processed, cannot delete") if db.delete_task(task_id): Folders.delete(os.path.join(cwd(), "storage", "analyses", "%d" % task_id)) else: return json_fatal_response("An error occurred while trying to " "delete the task") else: return json_error_response("Task not found") return JsonResponse({"status": True})
def task_delete(request, task_id): """ Deletes a task :param body: required: task_id :return: """ task = db.view_task(task_id) if task: if task.status == TASK_RUNNING: return json_fatal_response("The task is currently being " "processed, cannot delete") if db.delete_task(task_id): Folders.delete( os.path.join(cwd(), "storage", "analyses", "%d" % task_id)) else: return json_fatal_response("An error occurred while trying to " "delete the task") else: return json_error_response("Task not found") return JsonResponse({"status": True})
def tasks_reschedule(request, task_id, priority=None): """ Reschedules a task :param body: required: task_id, priority :return: new task_id """ if not db.view_task(task_id): return json_error_response("There is no analysis with the specified ID") new_task_id = db.reschedule(task_id, priority) if new_task_id: return JsonResponse({"status": True, "task_id": new_task_id}, safe=False) else: return json_fatal_response("An error occurred while trying to " "reschedule the task")
def view(request, md5=None, sha256=None, sample_id=None): data = {} if md5: sample = db.find_sample(md5=md5) elif sha256: sample = db.find_sample(sha256=sha256) elif sample_id: sample = db.view_sample(sample_id) else: return json_fatal_response("Invalid lookup term") if not sample: return json_error_response("File not found") data["sample"] = sample.to_dict() return JsonResponse({"status": True, "data": data})
def view(request, md5=None, sha256=None, sample_id=None): data = {} if md5: sample = db.find_target(md5=md5) elif sha256: sample = db.find_target(sha256=sha256) elif sample_id: sample = db.view_target(id=sample_id) else: return json_fatal_response("Invalid lookup term") if not sample: return json_error_response("File not found") data["sample"] = sample.to_dict() return JsonResponse({"status": True, "data": data})
def task_report(request, task_id, report_format="json"): # @TO-DO: test /api/task/report/<task_id>/all/?tarmode=bz2 # duplicate filenames? task_id = int(task_id) tarmode = request.REQUEST.get("tarmode", "bz2") formats = { "json": "report.json", "html": "report.html", } bz_formats = { "all": { "type": "-", "files": ["memory.dmp"] }, "dropped": { "type": "+", "files": ["files"] }, "package_files": { "type": "+", "files": ["package_files"] }, } tar_formats = { "bz2": "w:bz2", "gz": "w:gz", "tar": "w", } if report_format.lower() in formats: report_path = os.path.join(cwd(), "storage", "analyses", str(task_id), "reports", formats[report_format.lower()]) elif report_format.lower() in bz_formats: bzf = bz_formats[report_format.lower()] srcdir = os.path.join(cwd(), "storage", "analyses", str(task_id)) s = io.BytesIO() # By default go for bz2 encoded tar files (for legacy reasons). if tarmode not in tar_formats: tarmode = tar_formats["bz2"] else: tarmode = tar_formats[tarmode] tar = tarfile.open(fileobj=s, mode=tarmode, dereference=True) for filedir in os.listdir(srcdir): filepath = os.path.join(srcdir, filedir) if not os.path.exists(filepath): continue if bzf["type"] == "-" and filedir not in bzf["files"]: tar.add(filepath, arcname=filedir) if bzf["type"] == "+" and filedir in bzf["files"]: tar.add(filepath, arcname=filedir) tar.close() s.seek(0) response = file_response( data=s, filename="analysis_report_%s.tar" % str(task_id), content_type="application/x-tar; charset=UTF-8") return response else: return json_fatal_response("Invalid report format") if os.path.exists(report_path): if report_format == "json": response = file_response( data=open(report_path, "rb"), filename="analysis_report_%s.json" % str(task_id), content_type="application/json; charset=UTF-8") return response else: return open(report_path, "rb").read() else: return json_error_response("Report not found")
def vpn_status(request): status = rooter("vpn_status") if status is None: return json_fatal_response("Rooter not available") return JsonResponse({"status": True, "vpns": status})
def task_report(request, task_id, report_format="json"): # @TO-DO: test /api/task/report/<task_id>/all/?tarmode=bz2 # duplicate filenames? task_id = int(task_id) tarmode = request.REQUEST.get("tarmode", "bz2") formats = { "json": "report.json", "html": "report.html", } bz_formats = { "all": {"type": "-", "files": ["memory.dmp"]}, "dropped": {"type": "+", "files": ["files"]}, "package_files": {"type": "+", "files": ["package_files"]}, } tar_formats = { "bz2": "w:bz2", "gz": "w:gz", "tar": "w", } if report_format.lower() in formats: report_path = os.path.join(cwd(), "storage", "analyses", str(task_id), "reports", formats[report_format.lower()]) elif report_format.lower() in bz_formats: bzf = bz_formats[report_format.lower()] srcdir = os.path.join(cwd(), "storage", "analyses", str(task_id)) s = io.BytesIO() # By default go for bz2 encoded tar files (for legacy reasons). if tarmode not in tar_formats: tarmode = tar_formats["bz2"] else: tarmode = tar_formats[tarmode] tar = tarfile.open(fileobj=s, mode=tarmode, dereference=True) for filedir in os.listdir(srcdir): filepath = os.path.join(srcdir, filedir) if not os.path.exists(filepath): continue if bzf["type"] == "-" and filedir not in bzf["files"]: tar.add(filepath, arcname=filedir) if bzf["type"] == "+" and filedir in bzf["files"]: tar.add(filepath, arcname=filedir) tar.close() s.seek(0) response = file_response(data=s, filename="analysis_report_%s.tar" % str(task_id), content_type="application/x-tar; charset=UTF-8") return response else: return json_fatal_response("Invalid report format") if os.path.exists(report_path): if report_format == "json": response = file_response(data=open(report_path, "rb"), filename="analysis_report_%s.json" % str(task_id), content_type="application/json; charset=UTF-8") return response else: return open(report_path, "rb").read() else: return json_error_response("Report not found")