def parameters(request): """ Get parameters from volatility api, returns form """ data = dict() if request.method == "POST": form = ParametersForm(data=request.POST, dynamic_fields=parameters) if form.is_valid(): data["form_is_valid"] = True else: data["form_is_valid"] = False else: data = { "selected_plugin": request.GET.get("selected_plugin"), "selected_index": request.GET.get("selected_index"), "selected_name": request.GET.get("selected_name"), } parameters = get_parameters(data["selected_plugin"]) form = ParametersForm(initial=data, dynamic_fields=parameters) context = {"form": form} data["html_form"] = render_to_string( "website/partial_params.html", context, request=request, ) return JsonResponse(data)
def plugin(request): """ Prepares for plugin resubmission on selected index with/without parameters """ if request.method == "POST": dump = get_object_or_404(Dump, index=request.POST.get("selected_index")) if dump not in get_objects_for_user(request.user, "website.can_see"): raise Http404("404") plugin = get_object_or_404(Plugin, name=request.POST.get("selected_plugin")) up = get_object_or_404(UserPlugin, plugin=plugin, user=request.user) result = get_object_or_404(Result, dump=dump, plugin=plugin) params = {} parameters = get_parameters(plugin.name) for parameter in parameters: if parameter["name"] in request.POST.keys(): if parameter["mode"] == "list": value = shlex.shlex(request.POST.get(parameter["name"]), posix=True) value.whitespace += "," value.whitespace_split = True value = list(value) if parameter["type"] == int: value = [int(x) for x in value] params[parameter["name"]] = value else: if parameter["type"] == bool: params[parameter["name"]] = ( True if request.POST.get(parameter["name"]) in ["true", "on"] else False ) else: params[parameter["name"]] = request.POST.get(parameter["name"]) for filename in request.FILES: filepath = handle_uploaded_file( dump.index, plugin.name, request.FILES.get(filename) ) params[filename] = "file:" + pathname2url(filepath) # REMOVE OLD DATA es_client = Elasticsearch([settings.ELASTICSEARCH_URL]) es_client.indices.delete( "{}_{}".format(dump.index, plugin.name.lower()), ignore=[400, 404] ) # REMOVE OLD DUMPED FILE AND INFO if plugin.local_dump and os.path.exists( "{}/{}/{}".format(settings.MEDIA_ROOT, dump.index, plugin.name) ): # shutil.rmtree("{}/{}/{}".format(settings.MEDIA_ROOT, dump.index, plugin.name)) pass eds = ExtractedDump.objects.filter(result=result) eds.delete() result.result = 0 request.description = None result.parameter = params result.save() plugin_f_and_f(dump, plugin, params) return JsonResponse( { "ok": True, "plugin": plugin.name, "name": request.POST.get("selected_name"), } ) else: raise Http404("404")