From 8288aaf349d1a3e9b5ad981e3671cbc1dc23d26d Mon Sep 17 00:00:00 2001 From: Ed Date: Mon, 19 Dec 2022 22:07:53 +0100 Subject: [PATCH] Added support for propic --- propic.py | 45 +++++++++++++++++++++++ requirements.txt | 1 + res/propic/default.png | Bin 0 -> 19295 bytes tpl/welcome.html | 81 ++++++++++++++++++++++++++++++----------- 4 files changed, 106 insertions(+), 21 deletions(-) create mode 100644 propic.py create mode 100644 res/propic/default.png 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 0000000000000000000000000000000000000000..2b5307d14d55b5ff723f97e7bd0a1a34090da18a GIT binary patch literal 19295 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 t=6`DazkK1p8u0(}5dNDCH(NV*hH)-kGwX✅ 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 %}