コード例 #1
0
ファイル: views.py プロジェクト: N4rr34n6/orochi
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)
コード例 #2
0
ファイル: views.py プロジェクト: N4rr34n6/orochi
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")