uploadr/uploadr.py

103 lines
3.0 KiB
Python
Raw Normal View History

2018-04-07 16:20:47 +00:00
#!/usr/bin/env python3
import os
import glob
2017-10-24 20:34:55 +00:00
import time
import flask
import qrcode
import urllib.parse
2017-10-24 20:34:55 +00:00
from flask import Flask
from flask import render_template
from flask import request
from flask import send_from_directory
from config import uploadr as config
2017-10-24 20:34:55 +00:00
from werkzeug.utils import secure_filename
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(24)
encode = urllib.parse.quote
decode = urllib.parse.unquote
2017-10-24 20:34:55 +00:00
2018-05-27 15:02:37 +00:00
def check_create(dir):
if not os.path.isdir(dir):
os.makedirs(dir)
2018-05-27 15:02:37 +00:00
check_create(config.uploads)
check_create(config.qrcodes)
2018-05-27 15:02:37 +00:00
@app.route("/")
2018-05-27 15:02:37 +00:00
@app.route('/upload', methods=['GET', 'POST'])
2017-10-24 20:34:55 +00:00
def upload_file():
if request.method == 'POST':
f = request.files['file']
filename = secure_filename(f.filename)
time_uploaded = str(time.time())
file_dir = config.uploads + '/' + filename
check_create(file_dir)
check_create(file_dir + '/' + time_uploaded)
2018-05-27 15:02:37 +00:00
f.save(config.uploads
+ '/' + encode(filename)
+ '/' + time_uploaded
+ '/' + filename)
return render_template('upload_success.html',
2018-05-27 15:02:37 +00:00
link=filename + '?version=' + time_uploaded,
port=config.port,
)
2017-10-24 20:34:55 +00:00
else:
2018-05-27 15:02:37 +00:00
return render_template('upload.html', port=config.port)
2017-10-24 20:34:55 +00:00
@app.route('/qrcodes/<filename>')
def qrcodes(filename):
link = 'http://{0}:{1}/download/{2}?version={3}'.format(
2018-05-27 15:02:37 +00:00
config.domain, config.port, encode(filename),
request.args.get('version')
)
image = qrcode.make(link)
2018-05-27 15:02:37 +00:00
with open(config.qrcodes + '/' + filename + '.png', mode='bw+') as file:
image.save(file)
2018-05-27 15:02:37 +00:00
return send_from_directory(config.qrcodes, filename + '.png',
as_attachment=True)
@app.route('/qr/<filename>')
def qr(filename=None):
2018-05-27 15:02:37 +00:00
return render_template('qr.html', imagesrc='http://{0}:{1}/qrcodes/{2}?'
'version={3}'.format(
config.domain, config.port, filename,
request.args.get('version')
)
)
2017-10-24 20:34:55 +00:00
@app.route('/download/<filename>')
def download(filename=None):
provided_version = request.args.get('version')
directory_base = config.uploads + '/' + filename + '/'
directory = directory_base + str(provided_version)
if not os.path.isdir(directory):
existing_versions = glob.glob(directory_base + '*')
existing_versions.sort()
latest_version = existing_versions[-1]
2018-05-27 15:02:37 +00:00
directory = latest_version
return flask.send_from_directory(directory, decode(filename),
as_attachment=True)
2017-10-24 20:34:55 +00:00
@app.route('/css/<filename>')
def css(filename=None):
return flask.send_from_directory('css', filename)
2018-05-27 15:02:37 +00:00
2017-10-24 20:34:55 +00:00
@app.route('/fonts/<filename>')
def fonts(filename=None):
return flask.send_from_directory('fonts', filename)
2018-05-27 15:02:37 +00:00
2017-10-24 22:58:20 +00:00
if __name__ == '__main__':
app.debug = True
app.run()