tRemove threading and serve file from memory. - blck - ephemeral pastebin/url shortener
HTML git clone https://git.parazyd.org/blck
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
DIR commit c4dbb4b86dc0b76b616647ea2d440ee7cdab6694
DIR parent 8039a048e1e59621c0cc0bfc7d281f5de12b4d72
HTML Author: parazyd <parazyd@dyne.org>
Date: Tue, 9 Feb 2021 10:25:33 +0100
Remove threading and serve file from memory.
Diffstat:
M blck.py | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
---
DIR diff --git a/blck.py b/blck.py
t@@ -2,15 +2,14 @@
# copyleft (c) 2017-2021 parazyd <parazyd@dyne.org>
# see LICENSE file for copyright and license details.
+from io import BytesIO
from os import remove, rename
-from os.path import join
+from os.path import join, isfile
from random import choice
from string import ascii_uppercase, ascii_lowercase
-from threading import Thread
-from time import sleep
-from flask import (Flask, Blueprint, render_template, request,
- send_from_directory)
+from flask import (Flask, Blueprint, render_template, request, safe_join,
+ send_file, abort)
import magic
bp = Blueprint('blck', __name__, template_folder='templates')
t@@ -24,20 +23,21 @@ def main():
@bp.route("<urlshort>")
def urlget(urlshort):
- thread = Thread(target=del_file, args=(urlshort,))
- thread.daemon = True
- thread.start()
- return send_from_directory('files', urlshort)
-
-
-def del_file(f):
- sleep(10)
- remove(join('files', f))
+ fp = safe_join('files', urlshort)
+ if not isfile(fp):
+ abort(404)
+ r = BytesIO()
+ mime = magic.from_file(fp, mime=True)
+ with open(fp, 'rb') as fo:
+ r.write(fo.read())
+ r.seek(0)
+ remove(fp)
+ return send_file(r, mimetype=mime)
def short(c):
if not c or not c['c']:
- return "invalid paste\n"
+ return abort(400)
s = genid()
f = c['c']