Esempio n. 1
0
def download():
    messages = []
    data = {}
    try:
        login_required()
        data_req = json_loads(request.form.get("meta"))
        job_id = data_req["job_id"]
        run_id = data_req["run_id"]
        path = data_req["path"]
        send_file = data_req["send_file"]
        assert path != "" and os.path.exists(
            path), "Path does not exist or you have no permission to enter it."
        path = normalize_path(path)
        allowed_dirs = get_allowed_base_dirs(job_id=job_id,
                                             run_id=run_id,
                                             allow_input=False,
                                             allow_upload=False,
                                             allow_download=True)
        base_dir = check_if_path_in_dirs(path, allowed_dirs)
        assert base_dir is not None, "Path does not exist or you have no permission to enter it."
        if os.path.isdir(path):
            data["zip_path"] = zip_dir(path)
        if send_file:
            return send_from_directory(
                os.path.dirname(path),
                os.path.basename(path),
                attachment_filename=os.path.basename(path),
                as_attachment=True)
    except AssertionError as e:
        messages.append(handle_known_error(e, return_front_end_message=True))
    except Exception as e:
        messages.append(handle_unknown_error(e, return_front_end_message=True))
    return jsonify({"data": data, "messages": messages})
Esempio n. 2
0
File: browse.py Progetto: nyue/CWLab
def upload_file():
    messages = []
    data = {}
    try:
        # load metadata:
        metadata = json_loads(request.form.get("meta"))
        dir_path = metadata["dir_path"]
        job_name = metadata["job_name"] if "job_name" in metadata.keys(
        ) else None
        access_token = metadata["access_token"]

        login_required(access_token=access_token)

        assert 'file' in request.files, 'No file received.'

        import_file = request.files['file']
        assert import_file.filename != '', "No file specified."

        filename = secure_filename(import_file.filename)

        # check if dir path allowed:
        allowed_dirs = get_allowed_base_dirs(job_name=job_name,
                                             allow_input=False,
                                             allow_upload=True,
                                             allow_download=False)

        assert dir_path != "", "Path does not exist or you have no permission to enter it."
        dir_path = normalize_path(dir_path)
        assert os.path.exists(dir_path) and \
            os.path.isdir(dir_path) and \
            check_if_path_in_dirs(dir_path, allowed_dirs) is not None, \
            "Path does not exist or you have no permission to enter it."

        import_filepath = os.path.join(dir_path, filename)
        import_file.save(import_filepath)
        data["file_path"] = import_filepath

        messages.append({
            "time": get_time_string(),
            "type": "success",
            "text": "Successfully uploaded file."
        })
    except AssertionError as e:
        messages.append(handle_known_error(e, return_front_end_message=True))
    except Exception as e:
        messages.append(handle_unknown_error(e, return_front_end_message=True))
    return jsonify({"data": data, "messages": messages})
Esempio n. 3
0
def browse_dir():
    messages = []
    data = {}
    try:
        login_required()
        data_req = request.get_json()
        path = remove_non_printable_characters(data_req["path"])
        ignore_files = data_req["ignore_files"]
        file_exts = data_req["file_exts"]
        show_only_hits = data_req["show_only_hits"]
        get_parent_dir = data_req["get_parent_dir"]
        allow_input = data_req["allow_input"]
        allow_upload = data_req["allow_upload"]
        allow_download = data_req["allow_download"]
        default_base_dir = data_req[
            "default_base_dir"] if "default_base_dir" in data_req.keys(
            ) else None
        job_id = data_req["job_id"] if "job_id" in data_req.keys() else None
        run_id = data_req["run_id"] if "run_id" in data_req.keys() else None
        on_error_return_base_dir_items = data_req[
            "on_error_return_base_dir_items"]
        fixed_base_dir = data_req[
            "fixed_base_dir"] if "fixed_base_dir" in data_req.keys() else None
        fixed_base_dir_name = data_req[
            "fixed_base_dir_name"] if "fixed_base_dir_name" in data_req.keys(
            ) else "FIXED_BASE_DIR"
        include_tmp_dir = data_req[
            "include_tmp_dir"] if "include_tmp_dir" in data_req.keys(
            ) else False

        data["allowed_dirs"] = get_allowed_base_dirs(
            job_id=job_id,
            run_id=run_id,
            allow_input=allow_input,
            allow_upload=allow_upload,
            allow_download=allow_download,
            include_tmp_dir=include_tmp_dir)

        if not fixed_base_dir is None:
            assert check_if_path_in_dirs(
                fixed_base_dir, data["allowed_dirs"]
            ) is not None, "Fixed base dir is not allowed."
            data["allowed_dirs"] = {
                fixed_base_dir_name: {
                    "path":
                    fixed_base_dir,
                    "mode":
                    data["allowed_dirs"][check_if_path_in_dirs(
                        fixed_base_dir, data["allowed_dirs"])]["mode"]
                }
            }

        try:
            assert path != "" and os.path.exists(
                path
            ), "Path does not exist or you have no permission to enter it."
            path = normalize_path(path)
            if get_parent_dir or not os.path.isdir(path):
                path = os.path.dirname(path)
            data["base_dir"] = check_if_path_in_dirs(path,
                                                     data["allowed_dirs"])
            assert data[
                "base_dir"] is not None, "Path does not exist or you have no permission to enter it."
            data["items"] = browse_dir_(path, ignore_files, file_exts,
                                        show_only_hits)
            data["dir"] = path
        except AssertionError as e:
            if on_error_return_base_dir_items:
                if (not default_base_dir is None
                    ) and default_base_dir in data["allowed_dirs"].keys():
                    data["base_dir"] = default_base_dir
                else:
                    data["base_dir"] = list(data["allowed_dirs"].keys())[0]
                path = data["allowed_dirs"][data["base_dir"]]["path"]
                data["dir"] = path
                data["items"] = browse_dir_(path, ignore_files, file_exts,
                                            show_only_hits)
            else:
                raise AssertionError(str(e))

    except AssertionError as e:
        messages.append(handle_known_error(e, return_front_end_message=True))
    except Exception as e:
        messages.append(handle_unknown_error(e, return_front_end_message=True))
    return jsonify({"data": data, "messages": messages})