diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-08-18 18:10:42 +0100 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2020-08-18 18:10:42 +0100 |
commit | e85d1755f058e661e451f0ab77401f820d0c836e (patch) | |
tree | 179894573c8a3a05ab701cc310b025336c392aee /app/models.py | |
parent | 1c4fe1b80c6bf6f0634e80e73403ac5f6c900170 (diff) | |
download | cheatdb-e85d1755f058e661e451f0ab77401f820d0c836e.tar.xz |
Increase thread/comment ratelimiting based on rank
Diffstat (limited to 'app/models.py')
-rw-r--r-- | app/models.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/app/models.py b/app/models.py index 568981a..4c0ccc3 100644 --- a/app/models.py +++ b/app/models.py @@ -222,22 +222,34 @@ class User(db.Model, UserMixin): raise Exception("Permission {} is not related to users".format(perm.name)) def canCommentRL(self): + factor = 1 + if self.rank.atLeast(UserRank.ADMIN): + return True + elif self.rank.atLeast(UserRank.TRUSTED_MEMBER): + factor *= 2 + one_min_ago = datetime.datetime.utcnow() - datetime.timedelta(minutes=1) if ThreadReply.query.filter_by(author=self) \ - .filter(ThreadReply.created_at > one_min_ago).count() >= 3: + .filter(ThreadReply.created_at > one_min_ago).count() >= 3 * factor: return False hour_ago = datetime.datetime.utcnow() - datetime.timedelta(hours=1) if ThreadReply.query.filter_by(author=self) \ - .filter(ThreadReply.created_at > hour_ago).count() >= 20: + .filter(ThreadReply.created_at > hour_ago).count() >= 20 * factor: return False return True def canOpenThreadRL(self): + factor = 1 + if self.rank.atLeast(UserRank.ADMIN): + return True + elif self.rank.atLeast(UserRank.TRUSTED_MEMBER): + factor *= 5 + hour_ago = datetime.datetime.utcnow() - datetime.timedelta(hours=1) return Thread.query.filter_by(author=self) \ - .filter(Thread.created_at > hour_ago).count() < 2 + .filter(Thread.created_at > hour_ago).count() < 2 * factor def __eq__(self, other): if other is None: |