#!/usr/bin/python3 from flask import ( Flask, redirect, url_for, request, make_response, render_template_string, render_template, abort, ) from app.db import LocalDb import os import string import random import subprocess import sys appx = Flask(__name__) def generate_cock(): letters = string.ascii_lowercase return "".join(random.choice(letters) for i in range(32)) def db_conn(): mydb = LocalDb() conn_string = "host='db' dbname = 'Users' user='postgres' password = 'password'" mydb.connect(conn_string) return mydb @appx.route("/") def redir(): return redirect(url_for("login")) @appx.route("/register", methods=["GET", "POST"]) def register(): if request.method == "GET": return render_template("register.html") else: name = request.form["username"] password = request.form["password"] if name != "" and password != "": # mydb = db_conn() # try: result = mydb.execute( "SELECT * FROM Users WHERE username='" + name + "';") print(result, file=sys.stderr) if result != []: return "User alredy exist" print(name, file=sys.stderr) mydb.execute( "INSERT INTO Users (username,password) VALUES ('" + name + "','" + password + "');" ) if not os.path.isdir("./images/" + name): os.mkdir("./images/" + name) return "Sucessfully registered" # except Exception as e: # return "Exception" return "Vvedi normalniye credi ti che" @appx.route("/login", methods=["GET", "POST"]) def login(): global logged_users if request.method == "GET": return render_template("login.html") else: print("Login entered...") name = request.form["username"] password = request.form["password"] if name != "" and password != "": if name in logged_users.values(): return "Already logged in" # mydb = db_conn() # try: result = mydb.execute( "SELECT * FROM Users WHERE username='" + name + "' AND password='" + password + "';" ) if result == []: abort(404) cock = generate_cock() if len(logged_users) > 10000: logged_users = {} logged_users[cock] = name resp = make_response( render_template_string("Sucessfully logged in") ) resp.set_cookie("token", cock) return resp # except Exception as e: # return "Exeception" return render_template_string("Vvedi normalniye credi ti che") @appx.route("/logout", methods=["GET"]) def logout(): cock = request.cookies.get("token") if cock is None: abort(401) elif logged_users.get(cock) is None: abort(401) del logged_users[cock] return "Sucessfully logout" @appx.route("/images", methods=["GET"]) def get_images(): cock = request.cookies.get("token") if cock is None: abort(401) elif logged_users.get(cock) is None: abort(401) usr = logged_users.get(cock) path = "./images/" + usr onlyfiles = [f for f in os.listdir( path) if os.path.isfile(os.path.join(path, f))] if len(onlyfiles) < 1: return "No images" img = onlyfiles[0] image_binary = open("./images/" + usr + "/" + img, "rb").read() response = make_response(image_binary) response.headers.set("Content-Type", "image/png") response.headers.set("Content-Disposition", "attachment", filename="%s.png" % img) return response @appx.route("/apply_filter", methods=["GET", "POST"]) def filtrate(): cock = request.cookies.get("token") if cock is None: abort(401) elif logged_users.get(cock) is None: abort(401) if request.method == "GET": return render_template("apply_filter.html") else: filter_name = request.form["filter"] filename = request.form["filename"] imagefile = request.files.get("image", "") print(imagefile,file=sys.stderr) if imagefile is None: return "Undefined" usr = logged_users.get(cock) if filename == "": return "Undefined filename" imagefile.save("./images/" + usr + "/" + filename) path = "./images/" + usr + "/" + filename if filter_name == "black": subprocess.Popen(["./filterer/filterer", path, "black"]) return "Image blacked" elif filter_name == "none": return "Image saved" return "Undefined" global logged_users global mydb if __name__ == "__main__": mydb = db_conn() logged_users = {} appx.run(host="0.0.0.0", port=6969)