From bed714890d6d6d5f7ea404d56c88d7860ecc684a Mon Sep 17 00:00:00 2001 From: allegroai <> Date: Wed, 17 Jul 2019 18:16:43 +0300 Subject: [PATCH] Add File server CORS support --- {webserver => fileserver}/config/__init__.py | 0 {webserver => fileserver}/config/basic.py | 0 fileserver/config/default/fileserver.conf | 8 ++++++++ fileserver/{ => config/default}/logging.conf | 0 fileserver/fileserver.py | 18 ++++++++++++++---- fileserver/requirements.txt | 2 ++ 6 files changed, 24 insertions(+), 4 deletions(-) rename {webserver => fileserver}/config/__init__.py (100%) rename {webserver => fileserver}/config/basic.py (100%) create mode 100644 fileserver/config/default/fileserver.conf rename fileserver/{ => config/default}/logging.conf (100%) diff --git a/webserver/config/__init__.py b/fileserver/config/__init__.py similarity index 100% rename from webserver/config/__init__.py rename to fileserver/config/__init__.py diff --git a/webserver/config/basic.py b/fileserver/config/basic.py similarity index 100% rename from webserver/config/basic.py rename to fileserver/config/basic.py diff --git a/fileserver/config/default/fileserver.conf b/fileserver/config/default/fileserver.conf new file mode 100644 index 0000000..5e197a4 --- /dev/null +++ b/fileserver/config/default/fileserver.conf @@ -0,0 +1,8 @@ +download { + # Add response headers requesting no caching for served files + disable_browser_caching: false +} + +cors { + origins: "*" +} \ No newline at end of file diff --git a/fileserver/logging.conf b/fileserver/config/default/logging.conf similarity index 100% rename from fileserver/logging.conf rename to fileserver/config/default/logging.conf diff --git a/fileserver/fileserver.py b/fileserver/fileserver.py index df84d2f..387c385 100644 --- a/fileserver/fileserver.py +++ b/fileserver/fileserver.py @@ -1,16 +1,18 @@ """ A Simple file server for uploading and downloading files """ import json -import logging.config import os from argparse import ArgumentParser from pathlib import Path from flask import Flask, request, send_from_directory, safe_join -from pyhocon import ConfigFactory +from flask_compress import Compress +from flask_cors import CORS -logging.config.dictConfig(ConfigFactory.parse_file("logging.conf")) +from config import config app = Flask(__name__) +CORS(app, **config.get("fileserver.cors")) +Compress(app) @app.route("/", methods=["POST"]) @@ -29,7 +31,15 @@ def upload(): @app.route("/", methods=["GET"]) def download(path): - return send_from_directory(app.config["UPLOAD_FOLDER"], path) + response = send_from_directory(app.config["UPLOAD_FOLDER"], path) + if config.get("fileserver.download.disable_browser_caching", False): + headers = response.headers + headers["Pragma-directive"] = "no-cache" + headers["Cache-directive"] = "no-cache" + headers["Cache-control"] = "no-cache" + headers["Pragma"] = "no-cache" + headers["Expires"] = "0" + return response def main(): diff --git a/fileserver/requirements.txt b/fileserver/requirements.txt index 5dd231f..1cc293b 100644 --- a/fileserver/requirements.txt +++ b/fileserver/requirements.txt @@ -1,2 +1,4 @@ Flask +Flask-Cors>=3.0.5 +Flask-Compress>=1.4.0 pyhocon>=0.3.35 \ No newline at end of file