2018-04-07 16:20:47 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
2017-10-29 17:35:00 +00:00
|
|
|
import os
|
|
|
|
import glob
|
2017-10-24 20:34:55 +00:00
|
|
|
import time
|
|
|
|
import flask
|
2017-10-25 11:50:03 +00:00
|
|
|
import qrcode
|
2017-10-29 17:35:00 +00:00
|
|
|
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
|
2017-10-25 11:50:03 +00:00
|
|
|
from config import uploadr as config
|
2017-10-24 20:34:55 +00:00
|
|
|
from werkzeug.utils import secure_filename
|
|
|
|
app = Flask(__name__)
|
2017-10-24 22:57:29 +00:00
|
|
|
app.config['SECRET_KEY'] = os.urandom(24)
|
2017-10-29 17:35:00 +00:00
|
|
|
encode = urllib.parse.quote
|
|
|
|
decode = urllib.parse.unquote
|
2017-10-24 20:34:55 +00:00
|
|
|
|
2017-10-29 17:35:00 +00:00
|
|
|
def check_create(dir):
|
|
|
|
if not os.path.isdir(dir):
|
|
|
|
os.makedirs(dir)
|
2017-10-25 12:26:03 +00:00
|
|
|
|
2017-10-29 17:35:00 +00:00
|
|
|
check_create(config.uploads)
|
|
|
|
check_create(config.qrcodes)
|
2017-10-25 12:26:03 +00:00
|
|
|
|
2017-10-24 21:17:45 +00:00
|
|
|
@app.route("/")
|
2017-10-24 20:34:55 +00:00
|
|
|
@app.route('/upload', methods=['GET','POST'])
|
|
|
|
def upload_file():
|
|
|
|
if request.method == 'POST':
|
2017-10-29 17:35:00 +00:00
|
|
|
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)
|
|
|
|
f.save(config.uploads
|
|
|
|
+ '/' + encode(filename)
|
|
|
|
+ '/' + time_uploaded
|
|
|
|
+ '/' + filename)
|
2017-10-24 22:57:29 +00:00
|
|
|
return render_template('upload_success.html',
|
2017-10-29 17:35:00 +00:00
|
|
|
link = filename + '?version=' + time_uploaded,
|
2017-10-24 22:57:29 +00:00
|
|
|
port = config.port,
|
2017-10-24 21:17:45 +00:00
|
|
|
)
|
2017-10-24 20:34:55 +00:00
|
|
|
else:
|
2017-10-24 22:57:29 +00:00
|
|
|
return render_template('upload.html',
|
|
|
|
port = config.port,
|
2017-10-24 21:17:45 +00:00
|
|
|
)
|
2017-10-24 20:34:55 +00:00
|
|
|
|
2017-10-25 11:50:03 +00:00
|
|
|
@app.route('/qrcodes/<filename>')
|
|
|
|
def qrcodes(filename):
|
2017-10-29 17:35:00 +00:00
|
|
|
link = 'http://{0}:{1}/download/{2}?version={3}'.format(
|
2017-10-25 11:50:03 +00:00
|
|
|
config.domain
|
|
|
|
, config.port
|
2017-10-29 17:35:00 +00:00
|
|
|
, encode(filename)
|
|
|
|
, request.args.get('version')
|
2017-10-25 11:50:03 +00:00
|
|
|
)
|
|
|
|
image = qrcode.make(link)
|
|
|
|
with open('qrcodes/' + filename+ '.png', mode = 'bw+') as file:
|
|
|
|
image.save(file)
|
2017-10-25 12:26:49 +00:00
|
|
|
return send_from_directory(config.qrcodes, filename + '.png', as_attachment=True)
|
2017-10-25 11:50:03 +00:00
|
|
|
|
|
|
|
@app.route('/qr/<filename>')
|
|
|
|
def qr(filename=None):
|
2017-10-29 17:35:00 +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-25 11:50:03 +00:00
|
|
|
)
|
|
|
|
|
2017-10-24 20:34:55 +00:00
|
|
|
@app.route('/download/<filename>')
|
|
|
|
def download(filename=None):
|
2017-10-29 17:35:00 +00:00
|
|
|
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]
|
|
|
|
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)
|
|
|
|
|
|
|
|
@app.route('/fonts/<filename>')
|
|
|
|
def fonts(filename=None):
|
|
|
|
return flask.send_from_directory('fonts', filename)
|
2017-10-24 22:57:29 +00:00
|
|
|
|
2017-10-24 22:58:20 +00:00
|
|
|
if __name__ == '__main__':
|
|
|
|
app.debug = True
|
|
|
|
app.run()
|