userpanel.py (1941B)
1 from flask import Blueprint, render_template, request, abort, redirect, send_file, url_for 2 from blueprints.utils import crypto 3 from werkzeug.utils import secure_filename 4 from . import util 5 import logging 6 7 user_bp = Blueprint('userpanel', __name__, template_folder='templates', static_folder='static', 8 static_url_path='/static/userpanel') 9 10 11 @user_bp.route("/", methods=["GET"]) 12 @crypto.require_token 13 def index(jwt_data): 14 logging.info(f"User {jwt_data['username']} accessed user panel") 15 return render_template("userpanel/index.html", userData=jwt_data) 16 17 18 @user_bp.route("/upload", methods=["POST"]) 19 @crypto.require_token 20 def upload(jwt_data): 21 file = request.files["picture"] 22 filename = secure_filename(file.filename) 23 24 try: 25 if file.filename == "" or not util.allowed_extension(filename): 26 logging.warning(f"User {jwt_data['username']} tried to upload an invalid file") 27 return abort(400) 28 except ValueError: 29 logging.error(f"ValueError exception got triggered by user {jwt_data['username']} while uploading a file") 30 return abort(400) 31 32 try: 33 extension = util.get_file_extension(filename) 34 except ValueError: 35 logging.error(f"ValueError exception got triggered by user {jwt_data['username']} while uploading a file") 36 return abort(400) 37 38 file.save("uploads/pictures/custom/" + jwt_data["username"] + "." + extension) 39 logging.info(f"User {jwt_data['username']} uploaded a file") 40 return redirect(url_for("userpanel.index"), code=302) 41 42 @user_bp.route("/image/<username>") 43 @crypto.require_token 44 def get_image(username, jwt_data): 45 if jwt_data["username"] != username: 46 logging.warning(f"User {jwt_data['username']} tried to access the image of user {username}") 47 return abort(403) 48 49 logging.info(f"User {jwt_data['username']} accessed their image") 50 return send_file(util.get_user_picture(username))