mirror of
https://github.com/tgbot-collection/YYeTsBot.git
synced 2025-11-25 11:29:38 +08:00
ban IP rate limit
This commit is contained in:
@@ -99,6 +99,7 @@ def check_spam(ip, ua, author, content) -> int:
|
|||||||
|
|
||||||
class Cloudflare(Redis):
|
class Cloudflare(Redis):
|
||||||
key = "cf-blacklist-ip"
|
key = "cf-blacklist-ip"
|
||||||
|
expire = "cf-expire"
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.account_id = "e8d3ba82fe9e9a41cceb0047c2a2ab4f"
|
self.account_id = "e8d3ba82fe9e9a41cceb0047c2a2ab4f"
|
||||||
@@ -135,9 +136,10 @@ class Cloudflare(Redis):
|
|||||||
old_ips.append(ip)
|
old_ips.append(ip)
|
||||||
body = [{"ip": i} for i in set(old_ips)]
|
body = [{"ip": i} for i in set(old_ips)]
|
||||||
self.r.set(self.key, json.dumps(body))
|
self.r.set(self.key, json.dumps(body))
|
||||||
logging.warning("Adding %s to cloudflare managed challenge list", ip)
|
if not self.r.exists(self.expire):
|
||||||
resp = self.session.put(self.endpoint, json=body)
|
resp = self.session.put(self.endpoint, json=body)
|
||||||
logging.info(resp.json())
|
logging.info(resp.json())
|
||||||
|
self.r.set(self.expire, 1, ex=60)
|
||||||
|
|
||||||
def clear_fw(self):
|
def clear_fw(self):
|
||||||
logging.info("Clearing firewall rules")
|
logging.info("Clearing firewall rules")
|
||||||
|
|||||||
@@ -36,10 +36,7 @@ class ResourceHandler(BaseHandler):
|
|||||||
referer = self.request.headers.get("referer")
|
referer = self.request.headers.get("referer")
|
||||||
ip = self.get_real_ip()
|
ip = self.get_real_ip()
|
||||||
if not referer:
|
if not referer:
|
||||||
try:
|
cf.ban_new_ip(ip)
|
||||||
cf.ban_new_ip(ip)
|
|
||||||
except Exception as e:
|
|
||||||
logging.error("Failed to ban %s: %s", ip, e)
|
|
||||||
if os.getenv("GIFT"):
|
if os.getenv("GIFT"):
|
||||||
self.set_header("Content-Type", "text/html")
|
self.set_header("Content-Type", "text/html")
|
||||||
self.set_header("Content-Encoding", "gzip")
|
self.set_header("Content-Encoding", "gzip")
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ if __name__ == "__main__":
|
|||||||
scheduler.add_job(sync_douban, trigger=CronTrigger.from_crontab("1 1 1 * *"))
|
scheduler.add_job(sync_douban, trigger=CronTrigger.from_crontab("1 1 1 * *"))
|
||||||
scheduler.add_job(entry_dump, trigger=CronTrigger.from_crontab("2 2 1 * *"))
|
scheduler.add_job(entry_dump, trigger=CronTrigger.from_crontab("2 2 1 * *"))
|
||||||
scheduler.add_job(Other().import_ban_user, "interval", seconds=300)
|
scheduler.add_job(Other().import_ban_user, "interval", seconds=300)
|
||||||
scheduler.add_job(Cloudflare().clear_fw, trigger=CronTrigger.from_crontab("0 0 * * *"))
|
scheduler.add_job(Cloudflare().clear_fw, trigger=CronTrigger.from_crontab("0 0 * * 1"))
|
||||||
scheduler.add_job(YYSub().run, trigger=CronTrigger.from_crontab("0 1 * * *"))
|
scheduler.add_job(YYSub().run, trigger=CronTrigger.from_crontab("0 1 * * *"))
|
||||||
|
|
||||||
scheduler.start()
|
scheduler.start()
|
||||||
|
|||||||
Reference in New Issue
Block a user