Encode filenames to base64 and change URL to /result

This commit is contained in:
Alan Orth 2021-03-12 21:22:03 +02:00
parent 032fa5f2e7
commit 4de4388b1e
Signed by: alanorth
GPG Key ID: 0FB860CC9C45B1B9
2 changed files with 11 additions and 4 deletions

15
main.py
View File

@ -1,6 +1,7 @@
import os import os
import subprocess import subprocess
import sys import sys
from base64 import b64decode, b64encode
from ansi2html import Ansi2HTMLConverter from ansi2html import Ansi2HTMLConverter
from csv_metadata_quality.version import VERSION as cli_version from csv_metadata_quality.version import VERSION as cli_version
@ -30,15 +31,21 @@ def upload_file():
uploaded_file.save(os.path.join(app.config["UPLOAD_PATH"], filename)) uploaded_file.save(os.path.join(app.config["UPLOAD_PATH"], filename))
return redirect(url_for("process_file", filename=filename)) # generate a base64 representation of the filename to use as a slug
base64name = b64encode(filename.encode("ascii"))
return redirect(url_for("process_file", base64slug=base64name))
return "No file selected" return "No file selected"
# TODO: probably use a base64- and URL-encoded version of the filename here so # TODO: probably use a base64- and URL-encoded version of the filename here so
# we can allow results to be saved and shared? # we can allow results to be saved and shared?
@app.route("/process/<filename>") @app.route("/result/<base64slug>")
def process_file(filename): def process_file(base64slug):
# get filename from base64-encoded filename
filename = b64decode(base64slug).decode("ascii")
# do we need to use secure_filename again here? # do we need to use secure_filename again here?
input_file = os.path.join(app.config["UPLOAD_PATH"], filename) input_file = os.path.join(app.config["UPLOAD_PATH"], filename)
# TODO: write an output file based on the input file name # TODO: write an output file based on the input file name
@ -57,7 +64,7 @@ def process_file(filename):
conv = Ansi2HTMLConverter() conv = Ansi2HTMLConverter()
html = conv.convert(results.stdout) html = conv.convert(results.stdout)
return render_template( return render_template(
"process.html", cli_version=cli_version, filename=filename, stdout=html "result.html", cli_version=cli_version, filename=filename, stdout=html
) )
# I should remember this Flask-specific way to send files to the client # I should remember this Flask-specific way to send files to the client