From cc15eb40f61413c65d3c9872376eec73727a8969 Mon Sep 17 00:00:00 2001 From: cbdev Date: Sat, 23 Apr 2022 14:01:01 +0200 Subject: Sort listing before playout --- README.md | 17 ++++++++++++++++- backend/main.py | 9 +++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index dbbdc6f..9cbd7d1 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,25 @@ that lets them download or view the files you want them to have. ## Installation -TBD +* Install nginx and uwsgi +* Create a directory where cargohold will store the uploaded files +* Set the directory's owner to the user you want uwsgi to run the application under +* Edit `backend/config.py` to match your setup +* Edit `configs/nginx.config` to match your setup + * Note that the `client_max_body_size` will limit the maximum size of a single uploaded file +* Install `configs/nginx.config` to `/etc/nginx/sites-enabled` +* Edit `configs/uwsgi.ini` to match your setup + * Note that the `limit-post` option will limit the maximum size of a single uploaded file +* Install `configs/uwsgi.ini` to `/etc/uwsgi/apps-enabled/cargohold.ini` + +TBD: Extend this. ## Usage TBD ## Interface + +cargohold integrates somewhat tightly with nginx using the X-Accel-Redirect mechanism. +Other httpds may provide a similar mechanism, which will need to be called out to in the +`playout()` routine in `main.py`. diff --git a/backend/main.py b/backend/main.py index 76aca81..8af66ca 100644 --- a/backend/main.py +++ b/backend/main.py @@ -5,8 +5,8 @@ import os import sqlite3 import mimetypes -def playout(filename, content = "application/octet-stream"): - return ["", [('Content-Type', content), ("X-Accel-Redirect", filename)], None] +def playout(filename, content = "text/html"): + return ["", [('Content-Type', content if content else "application/octet-stream"), ("X-Accel-Redirect", filename)], None] def home(): return ["", [('Content-Type','text/html'), ("Location", config.homepage)], "302 Home"] @@ -38,9 +38,10 @@ def resolve_alias(alias): def listing(session): listing = {"total": 0, "files": [], "access": session["access"], "display": session["display"]} + # TODO make sorting configurable if 'r' in session["access"]: directory = target_filename(session, None) - files = os.listdir(directory) + files = sorted(os.listdir(directory)) for filename in files: if os.path.isfile(directory + filename): @@ -96,7 +97,7 @@ def route(path, env, session, post): if len(path) > 1 and path[1] == "preview" and session["display"] == "gallery": return playout("/data/" + target_filename_internal(session, "preview/" + path[2]), mimetypes.guess_type(path[2])[0]) - return playout("/interface/listing.htm", "text/html") + return playout("/interface/listing.htm") def handle_request(env, response): path = env.get('PATH_INFO', '').lstrip('/').split('/') -- cgit v1.2.3