From 6cc9cddef038dac82ae648948b0a9fd863c4a40c Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Sat, 26 Feb 2022 16:21:07 +0200 Subject: [PATCH] fug --- files/classes/user.py | 8 ++++++-- files/classes/views.py | 1 + files/helpers/get.py | 3 +++ files/routes/admin.py | 36 ++++++++++++++++++++++++++++++++++++ files/routes/posts.py | 1 + files/routes/users.py | 7 ------- 6 files changed, 47 insertions(+), 9 deletions(-) diff --git a/files/classes/user.py b/files/classes/user.py index a094f248c..3ffddc8df 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -131,7 +131,12 @@ class User(Base): nwordpass = Column(Boolean) subs_created = Column(Integer, default=0) - badges = relationship("Badge", viewonly=True) + badges = relationship("Badge") + awards = relationship("AwardRelationship") + mods = relationship("Mod") + comments = relationship("Comment", primaryjoin="User.id==Comment.author_id") + submissions = relationship("Submission", primaryjoin="User.id==Submission.author_id") + subscriptions = relationship("Subscription", viewonly=True) following = relationship("Follow", primaryjoin="Follow.user_id==User.id", viewonly=True) followers = relationship("Follow", primaryjoin="Follow.target_id==User.id", viewonly=True) @@ -139,7 +144,6 @@ class User(Base): blocking = relationship("UserBlock", lazy="dynamic", primaryjoin="User.id==UserBlock.user_id", viewonly=True) blocked = relationship("UserBlock", lazy="dynamic", primaryjoin="User.id==UserBlock.target_id", viewonly=True) authorizations = relationship("ClientAuth", viewonly=True) - awards = relationship("AwardRelationship", primaryjoin="User.id==AwardRelationship.user_id", viewonly=True) referrals = relationship("User", viewonly=True) def __init__(self, **kwargs): diff --git a/files/classes/views.py b/files/classes/views.py index 229410a07..e91d094ea 100644 --- a/files/classes/views.py +++ b/files/classes/views.py @@ -2,6 +2,7 @@ from sqlalchemy import * from sqlalchemy.orm import relationship from files.__main__ import Base from files.helpers.lazy import * +import time class ViewerRelationship(Base): diff --git a/files/helpers/get.py b/files/helpers/get.py index 76f2140e3..e6fc03e7a 100644 --- a/files/helpers/get.py +++ b/files/helpers/get.py @@ -67,6 +67,9 @@ def get_user(username, v=None, graceful=False): def get_account(id, v=None): + try: id = int(id) + except: abort(404) + user = g.db.query(User).filter_by(id = id).one_or_none() if not user: abort(404) diff --git a/files/routes/admin.py b/files/routes/admin.py index dad061af2..3975146e2 100644 --- a/files/routes/admin.py +++ b/files/routes/admin.py @@ -22,6 +22,42 @@ GUMROAD_TOKEN = environ.get("GUMROAD_TOKEN", "").strip() month = datetime.now().strftime('%B') +@app.get('/admin/merge//') +@admin_level_required(3) +def merge(v, id1, id2): + if v.id != 1: abort(403) + user1 = get_user(id1) + user2 = get_user(id2) + + for award in user2.awards: + award.user_id = user1.id + g.db.add(award) + for badge in user2.badges: + if not user1.has_badge(badge.badge_id): + badge.user_id = user1.id + g.db.add(badge) + for mod in user2.mods: + mod.user_id = user1.id + g.db.add(mod) + for comment in user2.comments: + comment.author_id = user1.id + g.db.add(comment) + for submission in user2.submissions: + submission.author_id = user1.id + g.db.add(submission) + + for kind in ('comment_count', 'post_count', 'winnings', 'received_award_count', 'coins_spent', 'lootboxes_bought', 'coins', 'truecoins', 'procoins', 'subs_created'): + setattr(user1, kind, getattr(user2, kind)) + setattr(user2, kind, 0) + + g.db.add(user1) + g.db.add(user2) + g.db.commit() + return f"Success! moved @{user2.username} to @{user1.username}" + + + + if SITE_NAME == 'PCM': @app.get('/admin/sidebar') @admin_level_required(3) diff --git a/files/routes/posts.py b/files/routes/posts.py index 2b1d426fd..83fca0431 100644 --- a/files/routes/posts.py +++ b/files/routes/posts.py @@ -1369,6 +1369,7 @@ def submit_post(v, sub=None): g.db.add(c) + snappy = g.db.query(User).filter_by(id = SNAPPY_ID).one_or_none() snappy.comment_count += 1 snappy.coins += 1 g.db.add(snappy) diff --git a/files/routes/users.py b/files/routes/users.py index 17303d313..0a6ecb906 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -651,8 +651,6 @@ def api_is_available(name, v): @app.get("/id/") @auth_required def user_id(id, v): - try: id = int(id) - except: abort(404) user = get_account(id) return redirect(user.url) @@ -886,9 +884,6 @@ def u_username_info(username, v=None): @auth_required def u_user_id_info(id, v=None): - try: id = int(id) - except: abort(404) - user=get_account(id, v=v) if hasattr(user, 'is_blocking') and user.is_blocking: @@ -976,8 +971,6 @@ def remove_follow(username, v): def user_profile_uid(v, id): if not v and not request.path.startswith('/logged_out'): return redirect(f"{SITE_FULL}/logged_out{request.full_path}") - try: id = int(id) - except: abort(404) x=get_account(id) return redirect(x.profile_url)