#!/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)