From 0a60da6fea0db5aa387ba213644d1e80d0833265 Mon Sep 17 00:00:00 2001 From: manetta Date: Thu, 10 Mar 2022 17:52:52 +0100 Subject: [PATCH] adding APPLICATION_ROOT to config + workaround for url mapping for non-root URL sitatuions --- config.py | 1 + octomode.py | 30 ++++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/config.py b/config.py index ec11508..eca98cd 100644 --- a/config.py +++ b/config.py @@ -1,4 +1,5 @@ class Config(object): + APPLICATION_ROOT = '/' PORTNUMBER = 5001 PAD_URL = 'https://pad.vvvvvvaria.org/' # with a slash in the end! PAD_API_URL = 'https://pad.vvvvvvaria.org/api/1.2.15/' diff --git a/octomode.py b/octomode.py index c08899c..258be31 100755 --- a/octomode.py +++ b/octomode.py @@ -17,6 +17,28 @@ import markdown APP = Flask(__name__) APP.config.from_object("config.Config") +# --- +# Workaround to map urls if the application runs from a non-root URL +# From: https://stackoverflow.com/questions/18967441/add-a-prefix-to-all-flask-routes + +class PrefixMiddleware(object): + + def __init__(self, app, prefix=''): + self.app = app + self.prefix = prefix + + def __call__(self, environ, start_response): + + if environ['PATH_INFO'].startswith(self.prefix): + environ['PATH_INFO'] = environ['PATH_INFO'][len(self.prefix):] + environ['SCRIPT_NAME'] = self.prefix + return self.app(environ, start_response) + else: + start_response('404', [('Content-Type', 'text/plain')]) + return ["This url does not belong to the app.".encode()] + +APP.wsgi_app = PrefixMiddleware(app.wsgi_app, prefix=APP.config['APPLICATION_ROOT']) + # --- def get_pad_content(pad_name, ext=""): @@ -108,13 +130,13 @@ def index(): exts = ['.md', '.css'] for ext in exts: create_pad_on_first_run(name, ext) - return redirect(f'/{ name }/') + return redirect(url_for('pad', name=name)) else: return render_template('start.html') -@APP.route('//', methods=['GET']) +@APP.route('//') def main(name): - return redirect(f'/{ name }/pad/') + return redirect(url_for('pad', name=name)) @APP.route('//pad/') def pad(name): @@ -122,7 +144,7 @@ def pad(name): url = os.path.join(APP.config['PAD_URL'], pad_name) return render_template('iframe.html', url=url, name=name.strip()) -@APP.route('//stylesheet/', methods=['GET']) +@APP.route('//stylesheet/') def stylesheet(name): pad_name = f'{ name }.css' url = os.path.join(APP.config['PAD_URL'], pad_name)