Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Add documentation for the spam checker module #6906

Merged
merged 3 commits into from
Feb 13, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/6906.doc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add documentation for the spam checker.
85 changes: 85 additions & 0 deletions docs/spam_checker.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# 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.spam_checker_api.SpamCheckerApi`.

It then implements methods which return a boolean to alter behavior in Synapse.

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`

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

The `SpamCheckerApi` class provides a way for the custom spam checker class to
call back into the homeserver internals. It currently implements the following
methods:

* `get_state_events_in_room`

### Example

```python
class ExampleSpamChecker:
def __init__(self, config, api):
self.config = config
self.api = api

def check_event_for_spam(self, foo):
return False # allow all events

def user_may_invite(self, inviter_userid, invitee_userid, room_id):
return True # allow all invites

def user_may_create_room(self, userid):
return True # allow all room creations

def user_may_create_room_alias(self, userid, room_alias):
return True # allow all room aliases

def user_may_publish_room(self, userid, room_id):
return True # allow publishing of all rooms
```

## Configuration

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

`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:

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

## Examples

The [Mjolnir](https://github.com/matrix-org/mjolnir) project is a full fledged
example using the Synapse spam checking API, including a bot for dynamic
configuration.