Move conf in a specific file and handle hot-reload of it

This commit is contained in:
Mathieu Velten 2021-06-28 14:06:34 +02:00
parent 05ab228953
commit 8d79db4230
2 changed files with 34 additions and 75 deletions

View File

@ -1,25 +0,0 @@
class AntiSpamInvites(object):
def __init__(self, config):
self._blocked_homeservers = config.get("blocked_homeservers", [])
def check_event_for_spam(self, event):
return False # allowed
def user_may_invite(self, inviter_user_id, invitee_user_id, room_id):
for bad_hs in self._blocked_homeservers:
if inviter_user_id.endswith(":" + bad_hs):
return False # not allowed
return True # allowed
def user_may_create_room(self, user_id):
return True # allowed
def user_may_create_room_alias(self, user_id, room_alias):
return True # allowed
def user_may_publish_room(self, user_id, room_id):
return True # allowed
@staticmethod
def parse_config(config):
return config # no parsing needed

View File

@ -1,70 +1,54 @@
import re
class AntiSpamHomeserverMessages(object):
class SimpleAntiSpam(object):
def __init__(self, config):
self._blocked_homeservers = config.get("blocked_homeservers", [])
self._reload_config(config)
try:
from synapse.app._base import register_sighup
register_sighup(self._reload_config)
except Exception:
logger.warning(
"Failed to install sighup handler for anti spam rule reloading"
)
def _reload_config(self, config):
with open(rules_file) as f:
spam_config = yaml.safe_load(config["rules_file"])
self._blocked_messages_by_homeserver = spam_config.get("blocked_messages_by_homeserver", [])
self._blocked_messages_by_user = spam_config.get("blocked_messages_by_user", [])
self._blocked_messages_by_text = spam_config.get("blocked_messages_by_text", [])
self._blocked_messages_by_pattern = [re.compile(v) for v in spam_config.get("blocked_messages_by_pattern", [])]
self._blocked_invites_by_homeserver = spam_config.get("blocked_invites_by_homeserver", [])
def check_event_for_spam(self, event):
for bad_hs in self._blocked_homeservers:
for bad_hs in self._blocked_messages_by_homeserver:
if event.get("sender", "").endswith(":" + bad_hs):
return True # not allowed (spam)
return False # not spam
def user_may_invite(self, inviter_user_id, invitee_user_id, room_id):
return True # allowed
for bad_user in self._blocked_messages_by_user:
if event.get("sender", "") == bad_user:
return True # not allowed (spam)
def user_may_create_room(self, user_id):
return True # allowed
def user_may_create_room_alias(self, user_id, room_alias):
return True # allowed
def user_may_publish_room(self, user_id, room_id):
return True # allowed
@staticmethod
def parse_config(config):
return config # no parsing needed
class AntiSpamText(object):
def __init__(self, config):
self._blocked_texts = config.get("blocked_messages", [])
def check_event_for_spam(self, event):
for msg in self._blocked_texts:
for msg in self._blocked_messages_by_text:
if event.get("content", {}).get("body", "") == msg:
return True # not allowed (spam)
return False # not spam
def user_may_invite(self, inviter_user_id, invitee_user_id, room_id):
return True # allowed
def user_may_create_room(self, user_id):
return True # allowed
def user_may_create_room_alias(self, user_id, room_alias):
return True # allowed
def user_may_publish_room(self, user_id, room_id):
return True # allowed
@staticmethod
def parse_config(config):
return config # no parsing needed
class AntiSpamRegex(object):
def __init__(self, config):
self._blocked_texts = [re.compile(v) for v in config.get("blocked_messages", [])]
def check_event_for_spam(self, event):
for msg in self._blocked_texts:
for msg in self._blocked_messages_by_pattern:
if msg.search(event.get("content", {}).get("body", "")):
return True # not allowed (spam)
return False # not spam
def user_may_invite(self, inviter_user_id, invitee_user_id, room_id):
for bad_hs in self.blocked_invites_by_homeserver:
if inviter_user_id.endswith(":" + bad_hs):
return False # not allowed
return True # allowed
def user_may_create_room(self, user_id):