diff --git a/files/classes/user.py b/files/classes/user.py index 880ad077c..f3518e80f 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -617,6 +617,9 @@ class User(Base): def is_suspended(self): return (self.is_banned and (self.unban_utc == 0 or self.unban_utc > time.time())) + @property + def is_suspended_permanently(self): + return (self.is_banned and self.unban_utc == 0) @property @lazy diff --git a/files/helpers/wrappers.py b/files/helpers/wrappers.py index 261946621..8800c37a8 100644 --- a/files/helpers/wrappers.py +++ b/files/helpers/wrappers.py @@ -91,8 +91,8 @@ def is_not_permabanned(f): check_ban_evade(v) - if v.is_banned and v.unban_utc == 0: - return {"error": "Interal server error"}, 500 + if v.is_suspended_permanently: + return {"error": "Forbidden: you are permabanned."}, 403 g.v = v return make_response(f(*args, v=v, **kwargs)) diff --git a/files/routes/users.py b/files/routes/users.py index 87665ab5e..cc57518a5 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -562,8 +562,11 @@ def reportbugs(v): @app.post("/@/message") @limiter.limit("1/second;10/minute;20/hour;50/day") -@is_not_permabanned +@auth_required def message2(v, username): + if v.is_suspended_permanently: + return {"error": "You have been permabanned and cannot send messages; " + \ + "contact modmail if you think this decision was incorrect."}, 403 user = get_user(username, v=v) if hasattr(user, 'is_blocking') and user.is_blocking: return {"error": "You're blocking this user."}, 403