diff --git a/propic.py b/propic.py new file mode 100644 index 0000000..4d715a4 --- /dev/null +++ b/propic.py @@ -0,0 +1,45 @@ +from sanic.response import html, redirect, text +from sanic import Blueprint, exceptions +from random import choice +from ext import * +from config import headers +from PIL import Image +from os.path import isfile +from os import unlink +from io import BytesIO +from hashlib import sha224 + +bp = Blueprint("propic", url_prefix="/manage/propic") + +@bp.post("/upload") +async def upload_propic(request, order: Order): + if not order: raise exceptions.Forbidden("You have been logged out. Please access the link in your E-Mail to login again!") + + if request.form.get('submit') == 'Delete main image': + await order.edit_answer('propic', None) + + if request.form.get('submit') == 'Delete fursuit image': + await order.edit_answer('propic_fursuiter', None) + + for fn, body in request.files.items(): + if fn not in ['propic', 'propic_fursuiter']: + continue + + if not body[0].body: continue + + h = sha224(body[0].body).hexdigest()[:32] + + try: + img = Image.open(BytesIO(body[0].body)) + img = img.convert('RGB') + img.thumbnail((512,512)) + img.save(f"res/propic/{fn}_{order.code}_{h}.jpg") + except: + raise + raise exceptions.BadRequest("The image you uploaded is not valid.") + else: + await order.edit_answer(fn, f"{fn}_{order.code}_{h}.jpg") + + await order.send_answers() + + return redirect("/manage/welcome#badge") diff --git a/requirements.txt b/requirements.txt index 0472e9a..9d83a6c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ sanic sanic-ext httpx +Pillow diff --git a/res/propic/default.png b/res/propic/default.png new file mode 100644 index 0000000..2b5307d Binary files /dev/null and b/res/propic/default.png differ diff --git a/tpl/welcome.html b/tpl/welcome.html index b451e80..698edf0 100644 --- a/tpl/welcome.html +++ b/tpl/welcome.html @@ -49,7 +49,7 @@ {# Show notice if the room is confirmed #} {% if order.room_confirmed %} -

✅ Your room has been confirmed

+

✅ Your {{[None,'single','double','triple','quadruple','quintuple'][len(room_members)]}} room has been confirmed

{% endif %} {# Show roommates if room is set #} @@ -58,14 +58,12 @@ {% set room = namespace(forbidden=false) %} {% for person in room_members %}
- +

{{person.ans('fursona_name')}}

- {% if person.code == order.room_id %}

ROOM OWNER

{% endif %} -

{{person.ans('staff_title') if person.ans('staff_title') else ''}}{{' · Fursuiter' if person.ans('is_fursuiter') != 'No'}}

+ {% if person.code == order.room_id %}

ROOM OWNER

{% endif %} +

{{person.ans('staff_title') if person.ans('staff_title') else ''}} {{'Fursuiter' if person.ans('is_fursuiter') != 'No'}}

{% if person.status == 'pending' %}

UNPAID

- {% else %} -

PAID

{% endif %} {% if order.room_owner and person.code != order.code and (not order.room_confirmed) %}KICK{% endif %}
@@ -107,7 +105,7 @@ {% if order.room_owner %}

- {% if len(room_members) == 1 %} + {% if len(room_members) == 1 and not order.room_confirmed %} Delete room {% endif %} @@ -124,15 +122,13 @@ {% for person in pending_roommates %} - + {% if person.status == 'pending' %} - {% else %} - {% endif %} - - + + @@ -144,15 +140,58 @@ {% endif %} {# Room availability is always shown #} -

Room availability

-
{{person.name}}UNPAIDPAIDApproveRejectApproveReject
- {% for q in quota.data['results'] if 'Room' in q['name'] %} - - - - - {% endfor %} -
{{q['name']}}{{q['available_number']}} left
+ {% if not order.room_confirmed %} +

Room availability

+ + {% for q in quota.data['results'] if 'Room' in q['name'] %} + + + + + {% endfor %} +
{{q['name']}}{{q['available_number']}} left
+ {% endif %} + + +
+ {# Badge is always shown #} +

Badge

+ {% if not order.ans('propic') %} +

⚠️ One or more badge pictures are missing! This will cause you badge to be empty, so make sure to upload something before the deadline!

+ {% endif %} +
+
+
+ {% if not order.ans('propic') %} + + {% else %} + + {% endif %} +

Normal Badge

+
+ {% if order.ans('is_fursuiter') %} +
+ {% if not order.ans('propic_fursuiter') %} + + {% else %} + + {% endif %} +

Fursuit Badge

+
+ {% endif %} +
+

Min size: 64x64 - Max Size: 5MB, 2048x2048 - Formats: jpg, png

+
+ {% if order.ans('propic') %} + + {% endif %} + {% if order.ans('propic_fursuiter') %} + + {% endif %} + +
+ +
{% if order.room_owner and not order.room_confirmed %}