114 lines
3.0 KiB
Python
114 lines
3.0 KiB
Python
from flask import render_template, request
|
|
from PIL import Image
|
|
# import database, re, bcrypt, secrets, time
|
|
import secrets, time, os, database
|
|
from auth import get_session
|
|
from app import app
|
|
|
|
@app.route("/entry/feed/<page>", methods=['GET'])
|
|
def feed(page):
|
|
page = int(page, 0)
|
|
page = max(0,page)
|
|
page = min(100,page)
|
|
|
|
count = 20
|
|
offset = page*count
|
|
|
|
posts = database.fetch("SELECT * FROM entry ORDER BY created_at DESC LIMIT ? OFFSET ?", [count, offset])
|
|
|
|
posts_with_usernames = []
|
|
for post in posts:
|
|
username = database.fetch("SELECT username FROM user WHERE uid = ?", [post[2]])
|
|
posts_with_usernames.append(post + username[0])
|
|
|
|
return render_template("entry/feed.html", posts=posts_with_usernames)
|
|
|
|
@app.route("/entry/create", methods=['GET', 'POST'])
|
|
def newentry():
|
|
session = get_session(request)
|
|
|
|
if not session:
|
|
return "Melde dich an, um einen Beitrag zu erstellen!"
|
|
|
|
uid = session[0]
|
|
|
|
if request.method == 'GET':
|
|
return render_template('entry/create.html')
|
|
|
|
content = str(request.form["content"])
|
|
content = content[:1000]
|
|
|
|
fileattached = False
|
|
if 'file' in request.files:
|
|
file = request.files['file']
|
|
fileattached=True
|
|
|
|
if fileattached:
|
|
fileattached = _storeimage(file)
|
|
|
|
if not fileattached and content == '':
|
|
return render_template('entry/create.html', responses=["Leerer Beitrag!"])
|
|
|
|
if not fileattached:
|
|
fileattached = "none"
|
|
|
|
pid = secrets.randbelow(999999999999)
|
|
now = int(time.time())
|
|
database.execute("""INSERT INTO entry
|
|
(pid, uid, created_at, content, filepath)
|
|
VALUES (?, ?, ?, ?, ?)""",
|
|
(pid, uid, now, content, fileattached))
|
|
|
|
return render_template('entry/create.html', responses=[content, str(fileattached)])
|
|
|
|
def _storeimage(file):
|
|
maxsize = 1024
|
|
tmpfile = secrets.randbelow(999999)
|
|
tmppath = f"tmp/{tmpfile}"
|
|
|
|
import resizegif
|
|
|
|
try:
|
|
file.save(tmppath)
|
|
|
|
i = Image.open(tmppath)
|
|
if i.format == 'GIF':
|
|
filetype = 'gif'
|
|
else:
|
|
i = i.convert("RGB")
|
|
filetype = 'jpg'
|
|
|
|
newpath = f"static/media/{int(time.time())}-{tmpfile}.{filetype}"
|
|
|
|
(width, height) = i.size;
|
|
aspect = width/height
|
|
|
|
if width < maxsize and height < maxsize:
|
|
if filetype == 'gif':
|
|
resizegif.resize_gif(i, newpath, (width, height))
|
|
else:
|
|
i.save(newpath)
|
|
|
|
os.remove(tmppath)
|
|
return newpath
|
|
|
|
if width > height:
|
|
width = maxsize
|
|
height = maxsize/aspect
|
|
else:
|
|
height = maxsize
|
|
width = aspect*maxsize
|
|
|
|
if filetype == 'gif':
|
|
resizegif.resize_gif(i, newpath, (width, height))
|
|
else:
|
|
i.thumbnail((width, height), Image.Resampling.LANCZOS)
|
|
i.save(newpath)
|
|
|
|
os.remove(tmppath)
|
|
return newpath
|
|
except Exception as e:
|
|
print(e)
|
|
os.remove(tmppath)
|
|
return False
|