From 74007ef5eee52d565048a68f870200c84a3e5721 Mon Sep 17 00:00:00 2001 From: richvdh Date: Wed, 7 Jul 2021 09:44:14 +0000 Subject: deploy: 7c823789921ac34f1fee670be7ef7f6c8266832b --- latest/spam_checker.html | 358 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 358 insertions(+) create mode 100644 latest/spam_checker.html (limited to 'latest/spam_checker.html') diff --git a/latest/spam_checker.html b/latest/spam_checker.html new file mode 100644 index 0000000000..febf302961 --- /dev/null +++ b/latest/spam_checker.html @@ -0,0 +1,358 @@ + + + + + + Spam Checker - Synapse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + +
+
+ +
+ +
+ +

Note: this page of the Synapse documentation is now deprecated. For up to date +documentation on setting up or writing a spam checker module, please see +this page.

+

Handling spam in Synapse

+

Synapse has support to customize spam checking behavior. It can plug into a +variety of events and affect how they are presented to users on your homeserver.

+

The spam checking behavior is implemented as a Python class, which must be +able to be imported by the running Synapse.

+

Python spam checker class

+

The Python class is instantiated with two objects:

+
    +
  • Any configuration (see below).
  • +
  • An instance of synapse.module_api.ModuleApi.
  • +
+

It then implements methods which return a boolean to alter behavior in Synapse. +All the methods must be defined.

+

There's a generic method for checking every event (check_event_for_spam), as +well as some specific methods:

+
    +
  • user_may_invite
  • +
  • user_may_create_room
  • +
  • user_may_create_room_alias
  • +
  • user_may_publish_room
  • +
  • check_username_for_spam
  • +
  • check_registration_for_spam
  • +
  • check_media_file_for_spam
  • +
+

The details of each of these methods (as well as their inputs and outputs) +are documented in the synapse.events.spamcheck.SpamChecker class.

+

The ModuleApi class provides a way for the custom spam checker class to +call back into the homeserver internals.

+

Additionally, a parse_config method is mandatory and receives the plugin config +dictionary. After parsing, It must return an object which will be +passed to __init__ later.

+

Example

+
from synapse.spam_checker_api import RegistrationBehaviour
+
+class ExampleSpamChecker:
+    def __init__(self, config, api):
+        self.config = config
+        self.api = api
+
+    @staticmethod
+    def parse_config(config):
+        return config
+        
+    async def check_event_for_spam(self, foo):
+        return False  # allow all events
+
+    async def user_may_invite(self, inviter_userid, invitee_userid, room_id):
+        return True  # allow all invites
+
+    async def user_may_create_room(self, userid):
+        return True  # allow all room creations
+
+    async def user_may_create_room_alias(self, userid, room_alias):
+        return True  # allow all room aliases
+
+    async def user_may_publish_room(self, userid, room_id):
+        return True  # allow publishing of all rooms
+
+    async def check_username_for_spam(self, user_profile):
+        return False  # allow all usernames
+
+    async def check_registration_for_spam(
+        self,
+        email_threepid,
+        username,
+        request_info,
+        auth_provider_id,
+    ):
+        return RegistrationBehaviour.ALLOW  # allow all registrations
+
+    async def check_media_file_for_spam(self, file_wrapper, file_info):
+        return False  # allow all media
+
+

Configuration

+

Modify the spam_checker section of your homeserver.yaml in the following +manner:

+

Create a list entry with the keys module and config.

+
    +
  • +

    module should point to the fully qualified Python class that implements your +custom logic, e.g. my_module.ExampleSpamChecker.

    +
  • +
  • +

    config is a dictionary that gets passed to the spam checker class.

    +
  • +
+

Example

+

This section might look like:

+
spam_checker:
+  - module: my_module.ExampleSpamChecker
+    config:
+      # Enable or disable a specific option in ExampleSpamChecker.
+      my_custom_option: true
+
+

More spam checkers can be added in tandem by appending more items to the list. An +action is blocked when at least one of the configured spam checkers flags it.

+

Examples

+

The Mjolnir project is a full fledged +example using the Synapse spam checking API, including a bot for dynamic +configuration.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- cgit 1.5.1