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

Allow spam-checker modules to be async #8890

Merged
merged 14 commits into from
Dec 11, 2020
Merged

Allow spam-checker modules to be async #8890

merged 14 commits into from
Dec 11, 2020

Conversation

Yoric
Copy link
Contributor

@Yoric Yoric commented Dec 7, 2020

The methods of spam checker plugins can now be async. This also consistently uses the maybe_awaitable helper in some more places (generally where we accept helpers that may or may not return Awaitables).

This will let us write spam checkers that need to hit a database or an external service before responding.

@richvdh richvdh changed the title Method check_event_for_spam in both class SpamCheck and plug-in s… Allow spam-checker modules to be async Dec 8, 2020
@richvdh
Copy link
Member

richvdh commented Dec 8, 2020

@Yoric as a general rule it's best to keep the first line of a git commit comment to 50 characters or less; they get truncated above a certain limit anyway. https://chris.beams.io/posts/git-commit/#limit-50 has some more info here.

I've fixed the subject of this PR.

@Yoric Yoric force-pushed the async-spamcheck branch 3 times, most recently from d33caf7 to 3632dfb Compare December 8, 2020 12:05
@Yoric
Copy link
Contributor Author

Yoric commented Dec 8, 2020

@Yoric as a general rule it's best to keep the first line of a git commit comment to 50 characters or less; they get truncated above a certain limit anyway. https://chris.beams.io/posts/git-commit/#limit-50 has some more info here.

I've fixed the subject of this PR.

Oops, got to unlearn a few things from mercurial/phabricator, thanks :)

@Yoric Yoric force-pushed the async-spamcheck branch 2 times, most recently from a2f8425 to 0daba3c Compare December 8, 2020 13:28
Method `check_event_for_spam` in both `class SpamCheck` and in plug-in spam checkers is currently
sync. This makes it impossible to write spam checkers that need to e.g. check with a database
before responding.

Signed-off-by: Your Name <davidt@element.io>
Note that this would ideally switch the entire callstack to async/await
instead, but the callstack is complicated by using many callback functions
and a DeferredList.
@clokep
Copy link
Member

clokep commented Dec 8, 2020

A couple of other random thoughts on this:

  • Would we want to allow any of the spam check methods to be async?
  • I'm not sure we should be using maybe_awaitable, it seems rather unused in our code.

@Yoric
Copy link
Contributor Author

Yoric commented Dec 8, 2020

A couple of other random thoughts on this:

* Would we want to allow any of the spam check methods to be async?

If it's not too much work, definitely.

* I'm not sure we should be using `maybe_awaitable`, it seems rather unused in our code.

@clokep clokep requested review from a team and removed request for a team December 9, 2020 12:21
@clokep clokep self-assigned this Dec 10, 2020
@clokep
Copy link
Member

clokep commented Dec 10, 2020

I realized this could be simplified a bit since we can hide all the "is the spam check plugin" async inside of synapse.events.spamcheck.SpamChecker class and make all the methods in that async. (Since that class itself isn't pluggable, just the under-lying checkers...yes the naming is confusing.)

@clokep clokep requested a review from a team December 10, 2020 17:46
@@ -78,6 +78,7 @@ def _check_sigs_and_hashes(

ctx = current_context()

@defer.inlineCallbacks
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mentioned this in the commit, but it is sad to add an inlineCallbacks back in, but without this we need to convert a huge stack to async/await. I'd rather do that as a follow-up.

@clokep clokep requested a review from a team December 11, 2020 15:06
synapse/util/async_helpers.py Outdated Show resolved Hide resolved
"""Convert a value to an awaitable if not already an awaitable.
"""

if hasattr(value, "__await__"):
if inspect.isawaitable(value):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it is worthwhile to be consistent here with other spots?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup, fair

@clokep clokep merged commit f14428b into develop Dec 11, 2020
@clokep clokep deleted the async-spamcheck branch December 11, 2020 19:05
clokep added a commit that referenced this pull request Jan 6, 2021
Synapse 1.25.0rc1 (2021-01-06)
==============================

Removal warning
---------------

The old [Purge Room API](https://github.com/matrix-org/synapse/tree/master/docs/admin_api/purge_room.md)
and [Shutdown Room API](https://github.com/matrix-org/synapse/tree/master/docs/admin_api/shutdown_room.md)
are deprecated and will be removed in a future release. They will be replaced by the
[Delete Room API](https://github.com/matrix-org/synapse/tree/master/docs/admin_api/rooms.md#delete-room-api).

`POST /_synapse/admin/v1/rooms/<room_id>/delete` replaces `POST /_synapse/admin/v1/purge_room` and
`POST /_synapse/admin/v1/shutdown_room/<room_id>`.

Features
--------

- Add an admin API that lets server admins get power in rooms in which local users have power. ([\#8756](#8756))
- Add optional HTTP authentication to replication endpoints. ([\#8853](#8853))
- Improve the error messages printed as a result of configuration problems for extension modules. ([\#8874](#8874))
- Add the number of local devices to Room Details Admin API. Contributed by @dklimpel. ([\#8886](#8886))
- Add `X-Robots-Tag` header to stop web crawlers from indexing media. Contributed by Aaron Raimist. ([\#8887](#8887))
- Spam-checkers may now define their methods as `async`. ([\#8890](#8890))
- Add support for allowing users to pick their own user ID during a single-sign-on login. ([\#8897](#8897), [\#8900](#8900), [\#8911](#8911), [\#8938](#8938), [\#8941](#8941), [\#8942](#8942), [\#8951](#8951))
- Add an `email.invite_client_location` configuration option to send a web client location to the invite endpoint on the identity server which allows customisation of the email template. ([\#8930](#8930))
- The search term in the list room and list user Admin APIs is now treated as case-insensitive. ([\#8931](#8931))
- Apply an IP range blacklist to push and key revocation requests. ([\#8821](#8821), [\#8870](#8870), [\#8954](#8954))
- Add an option to allow re-use of user-interactive authentication sessions for a period of time. ([\#8970](#8970))
- Allow running the redact endpoint on workers. ([\#8994](#8994))

Bugfixes
--------

- Fix bug where we might not correctly calculate the current state for rooms with multiple extremities. ([\#8827](#8827))
- Fix a long-standing bug in the register admin endpoint (`/_synapse/admin/v1/register`) when the `mac` field was not provided. The endpoint now properly returns a 400 error. Contributed by @edwargix. ([\#8837](#8837))
- Fix a long-standing bug on Synapse instances supporting Single-Sign-On, where users would be prompted to enter their password to confirm certain actions, even though they have not set a password. ([\#8858](#8858))
- Fix a longstanding bug where a 500 error would be returned if the `Content-Length` header was not provided to the upload media resource. ([\#8862](#8862))
- Add additional validation to pusher URLs to be compliant with the specification. ([\#8865](#8865))
- Fix the error code that is returned when a user tries to register on a homeserver on which new-user registration has been disabled. ([\#8867](#8867))
- Fix a bug where `PUT /_synapse/admin/v2/users/<user_id>` failed to create a new user when `avatar_url` is specified. Bug introduced in Synapse v1.9.0. ([\#8872](#8872))
- Fix a 500 error when attempting to preview an empty HTML file. ([\#8883](#8883))
- Fix occasional deadlock when handling SIGHUP. ([\#8918](#8918))
- Fix login API to not ratelimit application services that have ratelimiting disabled. ([\#8920](#8920))
- Fix bug where we ratelimited auto joining of rooms on registration (using `auto_join_rooms` config). ([\#8921](#8921))
- Fix a bug where deactivated users appeared in the user directory when their profile information was updated. ([\#8933](#8933), [\#8964](#8964))
- Fix bug introduced in Synapse v1.24.0 which would cause an exception on startup if both `enabled` and `localdb_enabled` were set to `False` in the `password_config` setting of the configuration file. ([\#8937](#8937))
- Fix a bug where 500 errors would be returned if the `m.room_history_visibility` event had invalid content. ([\#8945](#8945))
- Fix a bug causing common English words to not be considered for a user directory search. ([\#8959](#8959))
- Fix bug where application services couldn't register new ghost users if the server had reached its MAU limit. ([\#8962](#8962))
- Fix a long-standing bug where a `m.image` event without a `url` would cause errors on push. ([\#8965](#8965))
- Fix a small bug in v2 state resolution algorithm, which could also cause performance issues for rooms with large numbers of power levels. ([\#8971](#8971))
- Add validation to the `sendToDevice` API to raise a missing parameters error instead of a 500 error. ([\#8975](#8975))
- Add validation of group IDs to raise a 400 error instead of a 500 eror. ([\#8977](#8977))

Improved Documentation
----------------------

- Fix the "Event persist rate" section of the included grafana dashboard by adding missing prometheus rules. ([\#8802](#8802))
- Combine related media admin API docs. ([\#8839](#8839))
- Fix an error in the documentation for the SAML username mapping provider. ([\#8873](#8873))
- Clarify comments around template directories in `sample_config.yaml`. ([\#8891](#8891))
- Moved instructions for database setup, adjusted heading levels and improved syntax highlighting in [INSTALL.md](../INSTALL.md). Contributed by fossterer. ([\#8987](#8987))
- Update the example value of `group_creation_prefix` in the sample configuration. ([\#8992](#8992))
- Link the Synapse developer room to the development section in the docs. ([\#9002](#9002))

Deprecations and Removals
-------------------------

- Deprecate Shutdown Room and Purge Room Admin APIs. ([\#8829](#8829))

Internal Changes
----------------

- Properly store the mapping of external ID to Matrix ID for CAS users. ([\#8856](#8856), [\#8958](#8958))
- Remove some unnecessary stubbing from unit tests. ([\#8861](#8861))
- Remove unused `FakeResponse` class from unit tests. ([\#8864](#8864))
- Pass `room_id` to `get_auth_chain_difference`. ([\#8879](#8879))
- Add type hints to push module. ([\#8880](#8880), [\#8882](#8882), [\#8901](#8901), [\#8940](#8940), [\#8943](#8943), [\#9020](#9020))
- Simplify logic for handling user-interactive-auth via single-sign-on servers. ([\#8881](#8881))
- Skip the SAML tests if the requirements (`pysaml2` and `xmlsec1`) aren't available. ([\#8905](#8905))
- Fix multiarch docker image builds. ([\#8906](#8906))
- Don't publish `latest` docker image until all archs are built. ([\#8909](#8909))
- Various clean-ups to the structured logging and logging context code. ([\#8916](#8916), [\#8935](#8935))
- Automatically drop stale forward-extremities under some specific conditions. ([\#8929](#8929))
- Refactor test utilities for injecting HTTP requests. ([\#8946](#8946))
- Add a maximum size of 50 kilobytes to .well-known lookups. ([\#8950](#8950))
- Fix bug in `generate_log_config` script which made it write empty files. ([\#8952](#8952))
- Clean up tox.ini file; disable coverage checking for non-test runs. ([\#8963](#8963))
- Add type hints to the admin and room list handlers. ([\#8973](#8973))
- Add type hints to the receipts and user directory handlers. ([\#8976](#8976))
- Drop the unused `local_invites` table. ([\#8979](#8979))
- Add type hints to the base storage code. ([\#8980](#8980))
- Support using PyJWT v2.0.0 in the test suite. ([\#8986](#8986))
- Fix `tests.federation.transport.RoomDirectoryFederationTests` and ensure it runs in CI. ([\#8998](#8998))
- Add type hints to the crypto module. ([\#8999](#8999))
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jan 13, 2021
Synapse 1.25.0 (2021-01-13)
===========================

Ending Support for Python 3.5 and Postgres 9.5
----------------------------------------------

With this release, the Synapse team is announcing a formal deprecation policy for our platform dependencies, like Python and PostgreSQL:

All future releases of Synapse will follow the upstream end-of-life schedules.

Which means:

* This is the last release which guarantees support for Python 3.5.
* We will end support for PostgreSQL 9.5 early next month.
* We will end support for Python 3.6 and PostgreSQL 9.6 near the end of the year.

Crucially, this means __we will not produce .deb packages for Debian 9 (Stretch) or Ubuntu 16.04 (Xenial)__ beyond the transition period described below.

The website https://endoflife.date/ has convenient summaries of the support schedules for projects like [Python](https://endoflife.date/python) and [PostgreSQL](https://endoflife.date/postgresql).

If you are unable to upgrade your environment to a supported version of Python or Postgres, we encourage you to consider using the [Synapse Docker images](./INSTALL.md#docker-images-and-ansible-playbooks) instead.

### Transition Period

We will make a good faith attempt to avoid breaking compatibility in all releases through the end of March 2021. However, critical security vulnerabilities in dependencies or other unanticipated circumstances may arise which necessitate breaking compatibility earlier.

We intend to continue producing .deb packages for Debian 9 (Stretch) and Ubuntu 16.04 (Xenial) through the transition period.

Removal warning
---------------

The old [Purge Room API](https://github.com/matrix-org/synapse/tree/master/docs/admin_api/purge_room.md)
and [Shutdown Room API](https://github.com/matrix-org/synapse/tree/master/docs/admin_api/shutdown_room.md)
are deprecated and will be removed in a future release. They will be replaced by the
[Delete Room API](https://github.com/matrix-org/synapse/tree/master/docs/admin_api/rooms.md#delete-room-api).

`POST /_synapse/admin/v1/rooms/<room_id>/delete` replaces `POST /_synapse/admin/v1/purge_room` and
`POST /_synapse/admin/v1/shutdown_room/<room_id>`.

Bugfixes
--------

- Fix HTTP proxy support when using a proxy that is on a blacklisted IP. Introduced in v1.25.0rc1. Contributed by @Bubu. ([\#9084](matrix-org/synapse#9084))


Synapse 1.25.0rc1 (2021-01-06)
==============================

Features
--------

- Add an admin API that lets server admins get power in rooms in which local users have power. ([\#8756](matrix-org/synapse#8756))
- Add optional HTTP authentication to replication endpoints. ([\#8853](matrix-org/synapse#8853))
- Improve the error messages printed as a result of configuration problems for extension modules. ([\#8874](matrix-org/synapse#8874))
- Add the number of local devices to Room Details Admin API. Contributed by @dklimpel. ([\#8886](matrix-org/synapse#8886))
- Add `X-Robots-Tag` header to stop web crawlers from indexing media. Contributed by Aaron Raimist. ([\#8887](matrix-org/synapse#8887))
- Spam-checkers may now define their methods as `async`. ([\#8890](matrix-org/synapse#8890))
- Add support for allowing users to pick their own user ID during a single-sign-on login. ([\#8897](matrix-org/synapse#8897), [\#8900](matrix-org/synapse#8900), [\#8911](matrix-org/synapse#8911), [\#8938](matrix-org/synapse#8938), [\#8941](matrix-org/synapse#8941), [\#8942](matrix-org/synapse#8942), [\#8951](matrix-org/synapse#8951))
- Add an `email.invite_client_location` configuration option to send a web client location to the invite endpoint on the identity server which allows customisation of the email template. ([\#8930](matrix-org/synapse#8930))
- The search term in the list room and list user Admin APIs is now treated as case-insensitive. ([\#8931](matrix-org/synapse#8931))
- Apply an IP range blacklist to push and key revocation requests. ([\#8821](matrix-org/synapse#8821), [\#8870](matrix-org/synapse#8870), [\#8954](matrix-org/synapse#8954))
- Add an option to allow re-use of user-interactive authentication sessions for a period of time. ([\#8970](matrix-org/synapse#8970))
- Allow running the redact endpoint on workers. ([\#8994](matrix-org/synapse#8994))


Bugfixes
--------

- Fix bug where we might not correctly calculate the current state for rooms with multiple extremities. ([\#8827](matrix-org/synapse#8827))
- Fix a long-standing bug in the register admin endpoint (`/_synapse/admin/v1/register`) when the `mac` field was not provided. The endpoint now properly returns a 400 error. Contributed by @edwargix. ([\#8837](matrix-org/synapse#8837))
- Fix a long-standing bug on Synapse instances supporting Single-Sign-On, where users would be prompted to enter their password to confirm certain actions, even though they have not set a password. ([\#8858](matrix-org/synapse#8858))
- Fix a longstanding bug where a 500 error would be returned if the `Content-Length` header was not provided to the upload media resource. ([\#8862](matrix-org/synapse#8862))
- Add additional validation to pusher URLs to be compliant with the specification. ([\#8865](matrix-org/synapse#8865))
- Fix the error code that is returned when a user tries to register on a homeserver on which new-user registration has been disabled. ([\#8867](matrix-org/synapse#8867))
- Fix a bug where `PUT /_synapse/admin/v2/users/<user_id>` failed to create a new user when `avatar_url` is specified. Bug introduced in Synapse v1.9.0. ([\#8872](matrix-org/synapse#8872))
- Fix a 500 error when attempting to preview an empty HTML file. ([\#8883](matrix-org/synapse#8883))
- Fix occasional deadlock when handling SIGHUP. ([\#8918](matrix-org/synapse#8918))
- Fix login API to not ratelimit application services that have ratelimiting disabled. ([\#8920](matrix-org/synapse#8920))
- Fix bug where we ratelimited auto joining of rooms on registration (using `auto_join_rooms` config). ([\#8921](matrix-org/synapse#8921))
- Fix a bug where deactivated users appeared in the user directory when their profile information was updated. ([\#8933](matrix-org/synapse#8933), [\#8964](matrix-org/synapse#8964))
- Fix bug introduced in Synapse v1.24.0 which would cause an exception on startup if both `enabled` and `localdb_enabled` were set to `False` in the `password_config` setting of the configuration file. ([\#8937](matrix-org/synapse#8937))
- Fix a bug where 500 errors would be returned if the `m.room_history_visibility` event had invalid content. ([\#8945](matrix-org/synapse#8945))
- Fix a bug causing common English words to not be considered for a user directory search. ([\#8959](matrix-org/synapse#8959))
- Fix bug where application services couldn't register new ghost users if the server had reached its MAU limit. ([\#8962](matrix-org/synapse#8962))
- Fix a long-standing bug where a `m.image` event without a `url` would cause errors on push. ([\#8965](matrix-org/synapse#8965))
- Fix a small bug in v2 state resolution algorithm, which could also cause performance issues for rooms with large numbers of power levels. ([\#8971](matrix-org/synapse#8971))
- Add validation to the `sendToDevice` API to raise a missing parameters error instead of a 500 error. ([\#8975](matrix-org/synapse#8975))
- Add validation of group IDs to raise a 400 error instead of a 500 eror. ([\#8977](matrix-org/synapse#8977))


Improved Documentation
----------------------

- Fix the "Event persist rate" section of the included grafana dashboard by adding missing prometheus rules. ([\#8802](matrix-org/synapse#8802))
- Combine related media admin API docs. ([\#8839](matrix-org/synapse#8839))
- Fix an error in the documentation for the SAML username mapping provider. ([\#8873](matrix-org/synapse#8873))
- Clarify comments around template directories in `sample_config.yaml`. ([\#8891](matrix-org/synapse#8891))
- Move instructions for database setup, adjusted heading levels and improved syntax highlighting in [INSTALL.md](../INSTALL.md). Contributed by @fossterer. ([\#8987](matrix-org/synapse#8987))
- Update the example value of `group_creation_prefix` in the sample configuration. ([\#8992](matrix-org/synapse#8992))
- Link the Synapse developer room to the development section in the docs. ([\#9002](matrix-org/synapse#9002))


Deprecations and Removals
-------------------------

- Deprecate Shutdown Room and Purge Room Admin APIs. ([\#8829](matrix-org/synapse#8829))


Internal Changes
----------------

- Properly store the mapping of external ID to Matrix ID for CAS users. ([\#8856](matrix-org/synapse#8856), [\#8958](matrix-org/synapse#8958))
- Remove some unnecessary stubbing from unit tests. ([\#8861](matrix-org/synapse#8861))
- Remove unused `FakeResponse` class from unit tests. ([\#8864](matrix-org/synapse#8864))
- Pass `room_id` to `get_auth_chain_difference`. ([\#8879](matrix-org/synapse#8879))
- Add type hints to push module. ([\#8880](matrix-org/synapse#8880), [\#8882](matrix-org/synapse#8882), [\#8901](matrix-org/synapse#8901), [\#8940](matrix-org/synapse#8940), [\#8943](matrix-org/synapse#8943), [\#9020](matrix-org/synapse#9020))
- Simplify logic for handling user-interactive-auth via single-sign-on servers. ([\#8881](matrix-org/synapse#8881))
- Skip the SAML tests if the requirements (`pysaml2` and `xmlsec1`) aren't available. ([\#8905](matrix-org/synapse#8905))
- Fix multiarch docker image builds. ([\#8906](matrix-org/synapse#8906))
- Don't publish `latest` docker image until all archs are built. ([\#8909](matrix-org/synapse#8909))
- Various clean-ups to the structured logging and logging context code. ([\#8916](matrix-org/synapse#8916), [\#8935](matrix-org/synapse#8935))
- Automatically drop stale forward-extremities under some specific conditions. ([\#8929](matrix-org/synapse#8929))
- Refactor test utilities for injecting HTTP requests. ([\#8946](matrix-org/synapse#8946))
- Add a maximum size of 50 kilobytes to .well-known lookups. ([\#8950](matrix-org/synapse#8950))
- Fix bug in `generate_log_config` script which made it write empty files. ([\#8952](matrix-org/synapse#8952))
- Clean up tox.ini file; disable coverage checking for non-test runs. ([\#8963](matrix-org/synapse#8963))
- Add type hints to the admin and room list handlers. ([\#8973](matrix-org/synapse#8973))
- Add type hints to the receipts and user directory handlers. ([\#8976](matrix-org/synapse#8976))
- Drop the unused `local_invites` table. ([\#8979](matrix-org/synapse#8979))
- Add type hints to the base storage code. ([\#8980](matrix-org/synapse#8980))
- Support using PyJWT v2.0.0 in the test suite. ([\#8986](matrix-org/synapse#8986))
- Fix `tests.federation.transport.RoomDirectoryFederationTests` and ensure it runs in CI. ([\#8998](matrix-org/synapse#8998))
- Add type hints to the crypto module. ([\#8999](matrix-org/synapse#8999))
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants