diff --git a/files/routes/asset_submissions.py b/files/routes/asset_submissions.py index 620cf1348..ef3506564 100644 --- a/files/routes/asset_submissions.py +++ b/files/routes/asset_submissions.py @@ -29,7 +29,7 @@ def asset_submissions(path): @app.get("/submit/marseys") @auth_required -def submit_marseys(v): +def submit_marseys(v:User): if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_MARSEYS']: marseys = g.db.query(Marsey).filter(Marsey.submitter_id != None).all() else: @@ -44,7 +44,7 @@ def submit_marseys(v): @app.post("/submit/marseys") @auth_required -def submit_marsey(v): +def submit_marsey(v:User): file = request.files["image"] name = request.values.get('name', '').lower().strip() tags = request.values.get('tags', '').lower().strip() @@ -195,12 +195,12 @@ def remove_asset(cls, type_name:str, v:User, name:str) -> dict[str, str]: @app.post("/remove/marsey/") @auth_required -def remove_marsey(v, name): +def remove_marsey(v:User, name): return remove_asset(Marsey, "marsey", v, name) @app.get("/submit/hats") @auth_required -def submit_hats(v): +def submit_hats(v:User): if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_HATS']: hats = g.db.query(HatDef).filter(HatDef.submitter_id != None).all() else: hats = g.db.query(HatDef).filter(HatDef.submitter_id == v.id).all() return render_template("submit_hats.html", v=v, hats=hats) @@ -208,7 +208,7 @@ def submit_hats(v): @app.post("/submit/hats") @auth_required -def submit_hat(v): +def submit_hat(v:User): name = request.values.get('name', '').strip() description = request.values.get('description', '').strip() username = request.values.get('author', '').strip() @@ -328,7 +328,7 @@ def approve_hat(v, name): @app.post("/remove/hat/") @auth_required -def remove_hat(v, name): +def remove_hat(v:User, name): return remove_asset(HatDef, 'hat', v, name) @app.get("/admin/update/marseys") diff --git a/files/routes/awards.py b/files/routes/awards.py index 05a33bcdd..ee584f8c5 100644 --- a/files/routes/awards.py +++ b/files/routes/awards.py @@ -22,7 +22,7 @@ from .front import frontlist @app.get("/shop") @app.get("/settings/shop") @auth_required -def shop(v): +def shop(v:User): AWARDS = deepcopy(AWARDS2) if v.house: @@ -46,7 +46,7 @@ def shop(v): @app.post("/buy/") @limiter.limit("100/minute;200/hour;1000/day") @auth_required -def buy(v, award): +def buy(v:User, award): if award == 'benefactor' and not request.values.get("mb"): abort(403, "You can only buy the Benefactor award with marseybux.") diff --git a/files/routes/casino.py b/files/routes/casino.py index 93e1a830e..a55f39874 100644 --- a/files/routes/casino.py +++ b/files/routes/casino.py @@ -14,7 +14,7 @@ from files.__main__ import app, limiter @app.get("/casino") @limiter.limit("100/minute;2000/hour;12000/day") @auth_required -def casino(v): +def casino(v:User): if v.rehab: return render_template("casino/rehab.html", v=v), 403 @@ -24,7 +24,7 @@ def casino(v): @app.get("/casino/") @limiter.limit("100/minute;2000/hour;12000/day") @auth_required -def casino_game_page(v, game): +def casino_game_page(v:User, game): if v.rehab: return render_template("casino/rehab.html", v=v), 403 elif game not in CASINO_GAME_KINDS: @@ -53,7 +53,7 @@ def casino_game_page(v, game): @app.get("/casino//feed") @limiter.limit("100/minute;2000/hour;12000/day") @auth_required -def casino_game_feed(v, game): +def casino_game_feed(v:User, game): if v.rehab: abort(403, "You are under Rehab award effect!") elif game not in CASINO_GAME_KINDS: @@ -67,7 +67,7 @@ def casino_game_feed(v, game): @app.get("/lottershe") @limiter.limit("100/minute;2000/hour;12000/day") @auth_required -def lottershe(v): +def lottershe(v:User): if v.rehab: return render_template("casino/rehab.html", v=v) @@ -78,7 +78,7 @@ def lottershe(v): @app.post("/casino/slots") @limiter.limit("100/minute;2000/hour;12000/day") @auth_required -def pull_slots(v): +def pull_slots(v:User): if v.rehab: abort(403, "You are under Rehab award effect!") @@ -109,7 +109,7 @@ def pull_slots(v): @app.post("/casino/twentyone/deal") @limiter.limit("1/second;100/minute;2000/hour;12000/day") @auth_required -def blackjack_deal_to_player(v): +def blackjack_deal_to_player(v:User): if v.rehab: abort(403, "You are under Rehab award effect!") @@ -128,7 +128,7 @@ def blackjack_deal_to_player(v): @app.post("/casino/twentyone/hit") @limiter.limit("1/second;100/minute;2000/hour;12000/day") @auth_required -def blackjack_player_hit(v): +def blackjack_player_hit(v:User): if v.rehab: abort(403, "You are under Rehab award effect!") @@ -143,7 +143,7 @@ def blackjack_player_hit(v): @app.post("/casino/twentyone/stay") @limiter.limit("1/second;100/minute;2000/hour;12000/day") @auth_required -def blackjack_player_stay(v): +def blackjack_player_stay(v:User): if v.rehab: abort(403, "You are under Rehab award effect!") @@ -158,7 +158,7 @@ def blackjack_player_stay(v): @app.post("/casino/twentyone/double-down") @limiter.limit("1/second;100/minute;2000/hour;12000/day") @auth_required -def blackjack_player_doubled_down(v): +def blackjack_player_doubled_down(v:User): if v.rehab: abort(403, "You are under Rehab award effect!") @@ -173,7 +173,7 @@ def blackjack_player_doubled_down(v): @app.post("/casino/twentyone/buy-insurance") @limiter.limit("1/second;100/minute;2000/hour;12000/day") @auth_required -def blackjack_player_bought_insurance(v): +def blackjack_player_bought_insurance(v:User): if v.rehab: abort(403, "You are under Rehab award effect!") @@ -188,7 +188,7 @@ def blackjack_player_bought_insurance(v): @app.get("/casino/roulette/bets") @limiter.limit("100/minute;2000/hour;12000/day") @auth_required -def roulette_get_bets(v): +def roulette_get_bets(v:User): if v.rehab: abort(403, "You are under Rehab award effect!") @@ -200,7 +200,7 @@ def roulette_get_bets(v): @app.post("/casino/roulette/place-bet") @limiter.limit("100/minute;2000/hour;12000/day") @auth_required -def roulette_player_placed_bet(v): +def roulette_player_placed_bet(v:User): if v.rehab: abort(403, "You are under Rehab award effect!") diff --git a/files/routes/front.py b/files/routes/front.py index cc367e872..11d8b7109 100644 --- a/files/routes/front.py +++ b/files/routes/front.py @@ -179,7 +179,7 @@ def frontlist(v=None, sort="hot", page=1, t="all", ids_only=True, filter_words=' @app.get("/random_post") @auth_required -def random_post(v): +def random_post(v:User): p = g.db.query(Submission.id).filter(Submission.deleted_utc == 0, Submission.is_banned == False, Submission.private == False).order_by(func.random()).first() @@ -191,7 +191,7 @@ def random_post(v): @app.get("/random_user") @auth_required -def random_user(v): +def random_user(v:User): u = g.db.query(User.username).filter(User.song != None, User.shadowbanned == None).order_by(func.random()).first() if u: u = u[0] @@ -202,7 +202,7 @@ def random_user(v): @app.get("/comments") @auth_required -def all_comments(v): +def all_comments(v:User): try: page = max(int(request.values.get("page", 1)), 1) except: page = 1 diff --git a/files/routes/hats.py b/files/routes/hats.py index 0641efb73..fe7a4b7f8 100644 --- a/files/routes/hats.py +++ b/files/routes/hats.py @@ -9,7 +9,7 @@ from files.__main__ import app, limiter @app.get("/hats") @auth_required -def hats(v): +def hats(v:User): owned_hat_ids = [x.hat_id for x in v.owned_hats] if request.values.get("sort") == 'author_asc': @@ -34,7 +34,7 @@ def hats(v): @app.post("/buy_hat/") @limiter.limit('100/minute;1000/3 days') @auth_required -def buy_hat(v, hat_id): +def buy_hat(v:User, hat_id): try: hat_id = int(hat_id) except: abort(404, "Hat not found!") @@ -84,7 +84,7 @@ def buy_hat(v, hat_id): @app.post("/equip_hat/") @auth_required -def equip_hat(v, hat_id): +def equip_hat(v:User, hat_id): try: hat_id = int(hat_id) except: abort(404, "Hat not found!") @@ -98,7 +98,7 @@ def equip_hat(v, hat_id): @app.post("/unequip_hat/") @auth_required -def unequip_hat(v, hat_id): +def unequip_hat(v:User, hat_id): try: hat_id = int(hat_id) except: abort(404, "Hat not found!") @@ -112,7 +112,7 @@ def unequip_hat(v, hat_id): @app.get("/hat_owners/") @auth_required -def hat_owners(v, hat_id): +def hat_owners(v:User, hat_id): try: hat_id = int(hat_id) except: abort(404, "Hat not found!") diff --git a/files/routes/login.py b/files/routes/login.py index 727ae8c5e..02d39bf50 100644 --- a/files/routes/login.py +++ b/files/routes/login.py @@ -21,7 +21,7 @@ NO_LOGIN_REDIRECT_URLS = ("/login", "/logout", "/signup", "/forgot", "/reset", " @app.get("/login") @auth_desired -def login_get(v): +def login_get(v:Optional[User]): redir = request.values.get("redirect", "/").strip().rstrip('?').lower() if redir: if not is_site_url(redir) or redir in NO_LOGIN_REDIRECT_URLS: @@ -131,7 +131,7 @@ def on_login(account, redir=None): @app.get("/me") @app.get("/@me") @auth_required -def me(v): +def me(v:User): if v.client: return v.json else: return redirect(v.url) @@ -149,7 +149,7 @@ def logout(v): @app.get("/signup") @auth_desired -def sign_up_get(v): +def sign_up_get(v:Optional[User]): if not get_setting('Signups'): abort(403, "New account registration is currently closed. Please come back later.") @@ -199,7 +199,7 @@ def sign_up_get(v): @app.post("/signup") @limiter.limit("1/second;10/day") @auth_desired -def sign_up_post(v): +def sign_up_post(v:Optional[User]): if not get_setting('Signups'): abort(403, "New account registration is currently closed. Please come back later.") @@ -416,7 +416,7 @@ def get_reset(): @app.post("/reset") @limiter.limit(DEFAULT_RATELIMIT_SLOWER) @auth_desired -def post_reset(v): +def post_reset(v:Optional[User]): if v: return redirect('/') user_id = request.values.get("user_id") timestamp = 0 @@ -454,7 +454,7 @@ def post_reset(v): @app.get("/lost_2fa") @auth_desired -def lost_2fa(v): +def lost_2fa(v:Optional[User]): if v and not v.mfa_secret: abort(400, "You don't have 2FA enabled") return render_template("login/lost_2fa.html", v=v) diff --git a/files/routes/lottery.py b/files/routes/lottery.py index 4c7ee2953..707dd83af 100644 --- a/files/routes/lottery.py +++ b/files/routes/lottery.py @@ -23,7 +23,7 @@ def lottery_start(v): @app.post("/lottery/buy") @limiter.limit("3/second;100/minute;500/hour;1000/day") @auth_required -def lottery_buy(v): +def lottery_buy(v:User): try: quantity = int(request.values.get("quantity")) except: abort(400, "Invalid ticket quantity.") @@ -40,7 +40,7 @@ def lottery_buy(v): @app.get("/lottery/active") @limiter.limit("3/second;100/minute;500/hour;1000/day") @auth_required -def lottery_active(v): +def lottery_active(v:User): lottery, participants = get_active_lottery_stats() return {"message": "", "stats": {"user": v.lottery_stats, "lottery": lottery, "participants": participants}} diff --git a/files/routes/mail.py b/files/routes/mail.py index 6bb5f7bcb..e49bf29a0 100644 --- a/files/routes/mail.py +++ b/files/routes/mail.py @@ -19,7 +19,7 @@ def verify_email(v): @app.get("/activate") @auth_required -def activate(v): +def activate(v:User): email = request.values.get("email", "").strip().lower() if not email_regex.fullmatch(email): diff --git a/files/routes/notifications.py b/files/routes/notifications.py index 0654abc7d..80be4d52c 100644 --- a/files/routes/notifications.py +++ b/files/routes/notifications.py @@ -68,7 +68,7 @@ def notifications_modmail(v): @app.get("/notifications/messages") @auth_required -def notifications_messages(v): +def notifications_messages(v:User): try: page = max(int(request.values.get("page", 1)), 1) except: page = 1 @@ -137,7 +137,7 @@ def notifications_messages(v): @app.get("/notifications/posts") @auth_required -def notifications_posts(v): +def notifications_posts(v:User): try: page = max(int(request.values.get("page", 1)), 1) except: page = 1 @@ -179,7 +179,7 @@ def notifications_posts(v): @app.get("/notifications/modactions") @auth_required -def notifications_modactions(v): +def notifications_modactions(v:User): try: page = max(int(request.values.get("page", 1)), 1) except: page = 1 @@ -218,7 +218,7 @@ def notifications_modactions(v): @app.get("/notifications/reddit") @auth_required -def notifications_reddit(v): +def notifications_reddit(v:User): try: page = max(int(request.values.get("page", 1)), 1) except: page = 1 @@ -263,7 +263,7 @@ def notifications_reddit(v): @app.get("/notifications") @auth_required -def notifications(v): +def notifications(v:User): try: page = max(int(request.values.get("page", 1)), 1) except: page = 1 diff --git a/files/routes/oauth.py b/files/routes/oauth.py index 3e3f4e9fc..c095d4531 100644 --- a/files/routes/oauth.py +++ b/files/routes/oauth.py @@ -9,7 +9,7 @@ from files.__main__ import app, limiter @app.get("/authorize") @auth_required -def authorize_prompt(v): +def authorize_prompt(v:User): client_id = request.values.get("client_id") application = g.db.query(OauthApp).filter_by(client_id=client_id).one_or_none() if not application: return {"oauth_error": "Invalid `client_id`"}, 401 diff --git a/files/routes/posts.py b/files/routes/posts.py index e5c2c2f1e..a70c92483 100644 --- a/files/routes/posts.py +++ b/files/routes/posts.py @@ -123,7 +123,7 @@ def publish(pid, v): @app.get("/submit") @app.get("/h//submit") @auth_required -def submit_get(v, sub=None): +def submit_get(v:User, sub=None): sub = get_sub_by_name(sub, graceful=True) if request.path.startswith('/h/') and not sub: abort(404) @@ -604,7 +604,7 @@ def is_repost(): @limiter.limit(POST_RATE_LIMIT) @limiter.limit(POST_RATE_LIMIT, key_func=lambda:f'{SITE}-{session.get("lo_user")}') @auth_required -def submit_post(v, sub=None): +def submit_post(v:User, sub=None): url = request.values.get("url", "").strip() diff --git a/files/routes/search.py b/files/routes/search.py index 6b848b525..7515357aa 100644 --- a/files/routes/search.py +++ b/files/routes/search.py @@ -45,7 +45,7 @@ def searchparse(text): @app.get("/search/posts") @auth_required -def searchposts(v): +def searchposts(v:User): query = request.values.get("q", '').strip() @@ -181,7 +181,7 @@ def searchposts(v): @app.get("/search/comments") @auth_required -def searchcomments(v): +def searchcomments(v:User): query = request.values.get("q", '').strip() try: page = max(1, int(request.values.get("page", 1))) @@ -276,7 +276,7 @@ def searchcomments(v): @app.get("/search/users") @auth_required -def searchusers(v): +def searchusers(v:User): query = request.values.get("q", '').strip() diff --git a/files/routes/settings.py b/files/routes/settings.py index ff4045db7..e5bcfed5a 100644 --- a/files/routes/settings.py +++ b/files/routes/settings.py @@ -26,12 +26,12 @@ from files.__main__ import app, cache, limiter @app.get("/settings") @auth_required -def settings(v): +def settings(v:User): return redirect("/settings/personal") @app.get("/settings/personal") @auth_required -def settings_personal(v): +def settings_personal(v:User): return render_template("settings/personal.html", v=v) @app.delete('/settings/background') @@ -301,7 +301,7 @@ def settings_personal_post(v): @app.post("/settings/filters") @auth_required -def filters(v): +def filters(v:User): filters=request.values.get("filters")[:1000].strip() if filters == v.custom_filter_list: @@ -540,7 +540,7 @@ def settings_images_banner(v): @app.get("/settings/css") @auth_required -def settings_css_get(v): +def settings_css_get(v:User): return render_template("settings/css.html", v=v) @app.post("/settings/css") @@ -572,7 +572,7 @@ def settings_profilecss(v): @app.get("/settings/security") @auth_required -def settings_security(v): +def settings_security(v:User): return render_template("settings/security.html", v=v, mfa_secret=pyotp.random_base32() if not v.mfa_secret else None, @@ -622,12 +622,12 @@ def settings_unblock_user(v): @app.get("/settings/apps") @auth_required -def settings_apps(v): +def settings_apps(v:User): return render_template("settings/apps.html", v=v) @app.get("/settings/advanced") @auth_required -def settings_advanced_get(v): +def settings_advanced_get(v:User): return render_template("settings/advanced.html", v=v) @app.post("/settings/name_change") diff --git a/files/routes/static.py b/files/routes/static.py index 0705c07fc..5ac875f40 100644 --- a/files/routes/static.py +++ b/files/routes/static.py @@ -25,7 +25,7 @@ def rdrama(id, title): @app.get("/marseys") @auth_required -def marseys(v): +def marseys(v:User): if SITE == 'rdrama.net': marseys = g.db.query(Marsey, User).join(User, Marsey.author_id == User.id).filter(Marsey.submitter_id==None) sort = request.values.get("sort", "usage") @@ -74,13 +74,13 @@ def marsey_list(): @app.get('/sidebar') @auth_desired -def sidebar(v): +def sidebar(v:Optional[User]): return render_template('sidebar.html', v=v) @app.get("/stats") @auth_required -def participation_stats(v): +def participation_stats(v:User): if v.client: return stats_cached() return render_template("stats.html", v=v, title="Content Statistics", data=stats_cached()) @@ -94,12 +94,12 @@ def chart(): @app.get("/weekly_chart") @auth_required -def weekly_chart(v): +def weekly_chart(v:User): return send_file(statshelper.chart_path(kind="weekly", site=SITE)) @app.get("/daily_chart") @auth_required -def daily_chart(v): +def daily_chart(v:User): return send_file(statshelper.chart_path(kind="daily", site=SITE)) @app.get("/patrons") @@ -115,14 +115,14 @@ def patrons(v): @app.get("/admins") @app.get("/badmins") @auth_required -def admins(v): +def admins(v:User): admins = g.db.query(User).filter(User.admin_level >= PERMS['ADMIN_MOP_VISIBLE']).order_by(User.truescore.desc()).all() return render_template("admins.html", v=v, admins=admins) @app.get("/log") @app.get("/modlog") @auth_required -def log(v): +def log(v:User): try: page = max(int(request.values.get("page", 1)), 1) except: page = 1 @@ -185,7 +185,7 @@ def log_item(id, v): @app.get("/directory") @auth_required -def static_megathread_index(v): +def static_megathread_index(v:User): return render_template("megathread_index.html", v=v) @app.get("/contact") @@ -194,7 +194,7 @@ def static_megathread_index(v): @app.get("/press") @app.get("/media") @auth_desired -def contact(v): +def contact(v:Optional[User]): return render_template("contact.html", v=v) @app.post("/send_admin") @@ -321,7 +321,7 @@ def badge_list(site): @app.get("/badges") @feature_required('BADGES') @auth_required -def badges(v): +def badges(v:User): badges, counts = badge_list(SITE) return render_template("badges.html", v=v, badges=badges, counts=counts) @@ -342,7 +342,7 @@ def blocks(v): @app.get("/banned") @auth_required -def banned(v): +def banned(v:User): users = g.db.query(User).filter(User.is_banned > 0, User.unban_utc == 0) if not v.can_see_shadowbanned: users = users.filter(User.shadowbanned == None) @@ -351,12 +351,12 @@ def banned(v): @app.get("/formatting") @auth_required -def formatting(v): +def formatting(v:User): return render_template("formatting.html", v=v) @app.get("/app") @auth_desired -def mobile_app(v): +def mobile_app(v:Optional[User]): return render_template("app.html", v=v) @app.get("/service-worker.js") @@ -384,7 +384,7 @@ def transfers_id(id, v): @app.get("/transfers") @auth_required -def transfers(v): +def transfers(v:User): comments = g.db.query(Comment).filter(Comment.author_id == AUTOJANNY_ID, Comment.parent_submission == None, Comment.body_html.like("% has transferred %")).order_by(Comment.id.desc()) diff --git a/files/routes/subs.py b/files/routes/subs.py index 815f09879..0e8a06426 100644 --- a/files/routes/subs.py +++ b/files/routes/subs.py @@ -107,7 +107,7 @@ def unexile(v, sub, uid): @app.post("/h//block") @auth_required -def block_sub(v, sub): +def block_sub(v:User, sub): sub = get_sub_by_name(sub).name existing = g.db.query(SubBlock).filter_by(user_id=v.id, sub=sub).one_or_none() @@ -121,7 +121,7 @@ def block_sub(v, sub): @app.post("/h//unblock") @auth_required -def unblock_sub(v, sub): +def unblock_sub(v:User, sub): sub = get_sub_by_name(sub).name if sub == "chudrama" and not v.can_see_chudrama: abort(403) block = g.db.query(SubBlock).filter_by(user_id=v.id, sub=sub).one_or_none() @@ -135,7 +135,7 @@ def unblock_sub(v, sub): @app.post("/h//subscribe") @auth_required -def subscribe_sub(v, sub): +def subscribe_sub(v:User, sub): sub = get_sub_by_name(sub).name existing = g.db.query(SubJoin).filter_by(user_id=v.id, sub=sub).one_or_none() @@ -148,7 +148,7 @@ def subscribe_sub(v, sub): @app.post("/h//unsubscribe") @auth_required -def unsubscribe_sub(v, sub): +def unsubscribe_sub(v:User, sub): sub = get_sub_by_name(sub).name subscribe = g.db.query(SubJoin).filter_by(user_id=v.id, sub=sub).one_or_none() @@ -160,7 +160,7 @@ def unsubscribe_sub(v, sub): @app.post("/h//follow") @auth_required -def follow_sub(v, sub): +def follow_sub(v:User, sub): sub = get_sub_by_name(sub) if sub.name == "chudrama" and not v.can_see_chudrama: abort(403) existing = g.db.query(SubSubscription).filter_by(user_id=v.id, sub=sub.name).one_or_none() @@ -173,7 +173,7 @@ def follow_sub(v, sub): @app.post("/h//unfollow") @auth_required -def unfollow_sub(v, sub): +def unfollow_sub(v:User, sub): sub = get_sub_by_name(sub) subscription = g.db.query(SubSubscription).filter_by(user_id=v.id, sub=sub.name).one_or_none() if subscription: @@ -184,7 +184,7 @@ def unfollow_sub(v, sub): @app.get("/h//mods") @auth_required -def mods(v, sub): +def mods(v:User, sub): sub = get_sub_by_name(sub) if sub.name == "chudrama" and not v.can_see_chudrama: abort(403) users = g.db.query(User, Mod).join(Mod).filter_by(sub=sub.name).order_by(Mod.created_utc).all() @@ -194,7 +194,7 @@ def mods(v, sub): @app.get("/h//exilees") @auth_required -def sub_exilees(v, sub): +def sub_exilees(v:User, sub): sub = get_sub_by_name(sub) if sub.name == "chudrama" and not v.can_see_chudrama: abort(403) users = g.db.query(User, Exile).join(Exile, Exile.user_id==User.id) \ @@ -206,7 +206,7 @@ def sub_exilees(v, sub): @app.get("/h//blockers") @auth_required -def sub_blockers(v, sub): +def sub_blockers(v:User, sub): sub = get_sub_by_name(sub) if sub.name == "chudrama" and not v.can_see_chudrama: abort(403) users = g.db.query(User, SubBlock).join(SubBlock) \ @@ -219,7 +219,7 @@ def sub_blockers(v, sub): @app.get("/h//followers") @auth_required -def sub_followers(v, sub): +def sub_followers(v:User, sub): sub = get_sub_by_name(sub) if sub.name == "chudrama" and not v.can_see_chudrama: abort(403) users = g.db.query(User, SubSubscription).join(SubSubscription) \ @@ -554,7 +554,7 @@ def sub_marsey(v, sub): @app.get("/holes") @auth_required -def subs(v): +def subs(v:User): subs = g.db.query(Sub, func.count(Submission.sub)).outerjoin(Submission, Sub.name == Submission.sub).group_by(Sub.name).order_by(func.count(Submission.sub).desc()).all() total_users = g.db.query(User).count() return render_template('sub/subs.html', v=v, subs=subs, total_users=total_users) @@ -699,7 +699,7 @@ def mod_unpin(cid, v): @app.get("/h//log") @app.get("/h//modlog") @auth_required -def hole_log(v, sub): +def hole_log(v:User, sub): sub = get_sub_by_name(sub) if sub.name == "chudrama" and not v.can_see_chudrama: abort(403) try: page = max(int(request.values.get("page", 1)), 1) diff --git a/files/routes/users.py b/files/routes/users.py index 15415ff91..c5eb28ec0 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -56,25 +56,25 @@ def upvoters_downvoters(v, username, uid, cls, vote_cls, vote_dir, template, sta @app.get("/@/upvoters//posts") @auth_required -def upvoters_posts(v, username, uid): +def upvoters_posts(v:User, username, uid): return upvoters_downvoters(v, username, uid, Submission, Vote, 1, "userpage/voted_posts.html", None) @app.get("/@/upvoters//comments") @auth_required -def upvoters_comments(v, username, uid): +def upvoters_comments(v:User, username, uid): return upvoters_downvoters(v, username, uid, Comment, CommentVote, 1, "userpage/voted_comments.html", True) @app.get("/@/downvoters//posts") @auth_required -def downvoters_posts(v, username, uid): +def downvoters_posts(v:User, username, uid): return upvoters_downvoters(v, username, uid, Submission, Vote, -1, "userpage/voted_posts.html", None) @app.get("/@/downvoters//comments") @auth_required -def downvoters_comments(v, username, uid): +def downvoters_comments(v:User, username, uid): return upvoters_downvoters(v, username, uid, Comment, CommentVote, -1, "userpage/voted_comments.html", True) def upvoting_downvoting(v, username, uid, cls, vote_cls, vote_dir, template, standalone): @@ -107,25 +107,25 @@ def upvoting_downvoting(v, username, uid, cls, vote_cls, vote_dir, template, sta @app.get("/@/upvoting//posts") @auth_required -def upvoting_posts(v, username, uid): +def upvoting_posts(v:User, username, uid): return upvoting_downvoting(v, username, uid, Submission, Vote, 1, "userpage/voted_posts.html", None) @app.get("/@/upvoting//comments") @auth_required -def upvoting_comments(v, username, uid): +def upvoting_comments(v:User, username, uid): return upvoting_downvoting(v, username, uid, Comment, CommentVote, 1, "userpage/voted_comments.html", True) @app.get("/@/downvoting//posts") @auth_required -def downvoting_posts(v, username, uid): +def downvoting_posts(v:User, username, uid): return upvoting_downvoting(v, username, uid, Submission, Vote, -1, "userpage/voted_posts.html", None) @app.get("/@/downvoting//comments") @auth_required -def downvoting_comments(v, username, uid): +def downvoting_comments(v:User, username, uid): return upvoting_downvoting(v, username, uid, Comment, CommentVote, -1, "userpage/voted_comments.html", True) def user_voted(v, username, cls, vote_cls, template, standalone): @@ -158,19 +158,19 @@ def user_voted(v, username, cls, vote_cls, template, standalone): @app.get("/@/voted/posts") @auth_required -def user_voted_posts(v, username): +def user_voted_posts(v:User, username): return user_voted(v, username, Submission, Vote, "userpage/voted_posts.html", None) @app.get("/@/voted/comments") @auth_required -def user_voted_comments(v, username): +def user_voted_comments(v:User, username): return user_voted(v, username, Comment, CommentVote, "userpage/voted_comments.html", True) @app.get("/grassed") @auth_required -def grassed(v): +def grassed(v:User): users = g.db.query(User).filter(User.ban_reason.like('grass award used by @%')) if not v.can_see_shadowbanned: users = users.filter(User.shadowbanned == None) @@ -179,7 +179,7 @@ def grassed(v): @app.get("/chuds") @auth_required -def chuds(v): +def chuds(v:User): users = g.db.query(User).filter(User.agendaposter == 1) if not v.can_see_shadowbanned: users = users.filter(User.shadowbanned == None) @@ -233,22 +233,22 @@ def all_upvoters_downvoters(v, username, vote_dir, is_who_simps_hates): @app.get("/@/upvoters") @auth_required -def upvoters(v, username): +def upvoters(v:User, username): return all_upvoters_downvoters(v, username, 1, False) @app.get("/@/downvoters") @auth_required -def downvoters(v, username): +def downvoters(v:User, username): return all_upvoters_downvoters(v, username, -1, False) @app.get("/@/upvoting") @auth_required -def upvoting(v, username): +def upvoting(v:User, username): return all_upvoters_downvoters(v, username, 1, True) @app.get("/@/downvoting") @auth_required -def downvoting(v, username): +def downvoting(v:User, username): return all_upvoters_downvoters(v, username, -1, True) @app.post("/@/suicide") @@ -266,7 +266,7 @@ def suicide(v, username): @app.get("/@/coins") @auth_required -def get_coins(v, username): +def get_coins(v:User, username): user = get_user(username, v=v, include_shadowbanned=False) return {"coins": user.coins} @@ -326,7 +326,7 @@ def transfer_bux(v, username): @app.get("/leaderboard") @auth_required -def leaderboard(v): +def leaderboard(v:User): users = g.db.query(User) if not v.can_see_shadowbanned: users = users.filter(User.shadowbanned == None) @@ -656,7 +656,7 @@ def following(username, v): @app.get("/views") @auth_required -def visitors(v): +def visitors(v:User): if not v.viewers_recorded: return render_template("errors/patron.html", v=v) viewers=sorted(v.viewers, key = lambda x: x.last_view_utc, reverse=True) @@ -963,7 +963,7 @@ def get_saves_and_subscribes(v, template, relationship_cls, page:int, standalone @app.get("/@/saved/posts") @auth_required -def saved_posts(v, username): +def saved_posts(v:User, username): try: page = max(1, int(request.values.get("page", 1))) except: abort(400, "Invalid page input!") @@ -971,7 +971,7 @@ def saved_posts(v, username): @app.get("/@/saved/comments") @auth_required -def saved_comments(v, username): +def saved_comments(v:User, username): try: page = max(1, int(request.values.get("page", 1))) except: abort(400, "Invalid page input!") @@ -979,7 +979,7 @@ def saved_comments(v, username): @app.get("/@/subscribed/posts") @auth_required -def subscribed_posts(v, username): +def subscribed_posts(v:User, username): try: page = max(1, int(request.values.get("page", 1))) except: abort(400, "Invalid page input!") @@ -987,7 +987,7 @@ def subscribed_posts(v, username): @app.post("/fp/") @auth_required -def fp(v, fp): +def fp(v:User, fp): v.fp = fp users = g.db.query(User).filter(User.fp == fp, User.id != v.id).all() if users: print(f'{v.username}: fp', flush=True) @@ -1033,7 +1033,7 @@ def toggle_holes(): @app.get("/badge_owners/") @auth_required -def bid_list(v, bid): +def bid_list(v:User, bid): try: bid = int(bid) except: abort(400) @@ -1095,7 +1095,7 @@ kofi_tiers={ @app.post("/settings/kofi") @limiter.limit(DEFAULT_RATELIMIT_SLOWER) @auth_required -def settings_kofi(v): +def settings_kofi(v:User): if not KOFI_TOKEN or KOFI_TOKEN == DEFAULT_CONFIG_VALUE: abort(404) if not (v.email and v.is_activated): abort(400, f"You must have a verified email to verify {patron} status and claim your rewards!")