store/wishlist_add: ratelimit wishlist proposal to once every 15 days per user

This commit is contained in:
Alexandre Aubin
2024-01-04 01:57:18 +01:00
parent e9524f63e6
commit 3db73ec95d
3 changed files with 42 additions and 11 deletions

View File

@ -1,3 +1,4 @@
import time
import base64
import os
import json
@ -6,7 +7,7 @@ import subprocess
import pycmarkgfm
from emoji import emojize
from flask import request
from hashlib import md5
AVAILABLE_LANGUAGES = ["en"] + os.listdir("translations")
@ -92,6 +93,26 @@ def get_stars():
get_stars.cache_checksum = None
get_stars()
def check_wishlist_submit_ratelimit(user):
dir_ = os.path.join(".wishlist_ratelimit")
if not os.path.exists(dir_):
os.mkdir(dir_)
f = os.path.join(dir_, md5(user.encode()).hexdigest())
return not os.path.exists(f) or (time.time() - os.path.getmtime(f)) > (15 * 24 * 3600) # 15 days
def save_wishlist_submit_for_ratelimit(user):
dir_ = os.path.join(".wishlist_ratelimit")
if not os.path.exists(dir_):
os.mkdir(dir_)
f = os.path.join(dir_, md5(user.encode()).hexdigest())
open(f, "w").write("")
def human_to_binary(size: str) -> int:
symbols = ("K", "M", "G", "T", "P", "E", "Z", "Y")