def submit_new(request, opts):
    """
    submit_new(opts)

    submit a new result of a run on (probably remote) host

    opts is dictionary, it has to contain these entries:
     * host: string with hostname of a host where scan was done (optional)
     * data: content of file
    """
    # as soon as the tarball will be unpacked, this die will be erased
    tmp_dir = os.path.join(settings.MEDIA_ROOT, uuid.uuid4().hex)
    try:
        os.makedirs(tmp_dir, mode=0o0744)
    except OSError as e:
        # TODO: log
        return {
            'status': 'ERROR',
            'message': 'Failed to create temporary directory: %s' % e,
        }
    report_path = os.path.join(tmp_dir, 'result.tar.gz')
    with open(report_path, 'wb+') as destination:
        destination.write(opts['data'].data)

    host, created = Host.objects.get_or_create(hostname=opts['host'])
    run_object = Run.objects.create_for_host(host)
    hostrun = run_object.first_hostrun()

    import_report(report_path, hostrun.id)
    rel_url = reverse('result-detail', args=(hostrun.result.id, ))
    return {'status': 'OK', 'url': request.build_absolute_uri(rel_url)}
def submit_new(request, opts):
    """
    submit_new(opts)

    submit a new result of a run on (probably remote) host

    opts is dictionary, it has to contain these entries:
     * host: string with hostname of a host where scan was done (optional)
     * data: content of file
    """
    # as soon as the tarball will be unpacked, this die will be erased
    tmp_dir = os.path.join(settings.MEDIA_ROOT, uuid.uuid4().hex)
    try:
        os.makedirs(tmp_dir, mode=0o0744)
    except OSError as e:
        # TODO: log
        return {"status": "ERROR", "message": "Failed to create temporary directory: %s" % e}
    report_path = os.path.join(tmp_dir, "result.tar.gz")
    with open(report_path, "wb+") as destination:
        destination.write(opts["data"].data)

    host, created = Host.objects.get_or_create(hostname=opts["host"])
    run_object = Run.objects.create_for_host(host)
    hostrun = run_object.first_hostrun()

    import_report(report_path, hostrun.id)
    rel_url = reverse("result-detail", args=(hostrun.result.id,))
    return {"status": "OK", "url": request.build_absolute_uri(rel_url)}
def upload_results(request, opts):
    """
    upload_results(opts)

    opts is dictionary, it has to contain these entries:
     * filename: tarball's filename
     * data: content of file
     * runhost_id: ID of run for specific host
    """
    p = os.path.join(settings.MEDIA_ROOT, opts['filename'])
    with open(p, 'wb+') as destination:
        destination.write(opts['data'].data)
    import_report(p, opts['hostrun_id'])
    return 'OK'
def upload_results(request, opts):
    """
    upload_results(opts)

    opts is dictionary, it has to contain these entries:
     * filename: tarball's filename
     * data: content of file
     * runhost_id: ID of run for specific host
    """
    p = os.path.join(settings.MEDIA_ROOT, opts["filename"])
    with open(p, "wb+") as destination:
        destination.write(opts["data"].data)
    import_report(p, opts["hostrun_id"])
    return "OK"