summary refs log tree commit diff
path: root/synapse/push (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Refactor `EventContext` (#12689)Erik Johnston2022-05-101-0/+4
| | | | | | | | | | Refactor how the `EventContext` class works, with the intention of reducing the amount of state we fetch from the DB during event processing. The idea here is to get rid of the cached `current_state_ids` and `prev_state_ids` that live in the `EventContext`, and instead defer straight to the database (and its caching). One change that may have a noticeable effect is that we now no longer prefill the `get_current_state_ids` cache on a state change. However, that query is relatively light, since its just a case of reading a table from the DB (unlike fetching state at an event which is more heavyweight). For deployments with workers this cache isn't even used. Part of #12684
* Move free functions into PushRuleEvaluatorForEvent. (#12677)Patrick Cloke2022-05-102-34/+68
| | | | | | * Move `_condition_checker` into `PushRuleEvaluatorForEvent`. * Move the condition cache into `PushRuleEvaluatorForEvent`. * Improve docstrings. * Inline a method which is only called once.
* Add class-diagrams and notes for push. (#12676)Patrick Cloke2022-05-101-0/+79
|
* Implement MSC3786: Add a default push rule to ignore m.room.server_acl ↵Šimon Brandner2022-05-101-0/+15
| | | | | | events (#12601) Fixes vector-im/element-web#20788 Implements matrix-org/matrix-spec-proposals#3786
* Implement changes to MSC2285 (hidden read receipts) (#12168)Šimon Brandner2022-05-041-1/+3
| | | | | * Changes hidden read receipts to be a separate receipt type (instead of a field on `m.read`). * Updates the `/receipts` endpoint to accept `m.fully_read`.
* Refactor and convert `Linearizer` to async (#12357)Sean Quah2022-04-051-1/+1
| | | | | | | | | | | Refactor and convert `Linearizer` to async. This makes a `Linearizer` cancellation bug easier to fix. Also refactor to use an async context manager, which eliminates an unlikely footgun where code that doesn't immediately use the context manager could forget to release the lock. Signed-off-by: Sean Quah <seanq@element.io>
* Un-revert Jinja2 fix (#12313)Brendan Abolivier2022-03-281-4/+5
| | | Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Add cache for `get_membership_from_event_ids` (#12272)Erik Johnston2022-03-251-14/+16
| | | | | This should speed up push rule calculations for rooms with large numbers of local users when the main push rule cache fails. Co-authored-by: reivilibre <oliverw@matrix.org>
* Merge branch 'master' into developRichard van der Hoff2022-03-241-5/+4
|\
| * Revert "Replace instances of deprecated `Jinja2.Markup` with ↵Andrew Morgan2022-03-241-5/+4
| | | | | | | | | | `markupsafe.Markup`" (#12296) This reverts commit 8810c93e828a9ed1dcb008d08be8aa9fcb4d28c3.
* | Merge branch 'master' into developAndrew Morgan2022-03-241-4/+5
|\|
| * Replace instances of deprecated `Jinja2.Markup` with `markupsafe.Markup` ↵Andrew Morgan2022-03-241-4/+5
| | | | | | | | | | (#12289) Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
* | Use the ignored_users table to test event visibility & sync. (#12225)Patrick Cloke2022-03-151-1/+1
|/ | | | | Instead of fetching the raw account data and re-parsing it. The ignored_users table is a denormalised version of the account data for quick searching.
* Add an additional HTTP pusher + push rule tests. (#12188)Nick Mills-Barrett2022-03-113-25/+25
| | | And rename the field used for caching from _id to _cache_key.
* Fix `PushRuleEvaluator` and `Filter` to work on frozendicts (#12100)Richard van der Hoff2022-02-281-4/+4
| | | | | | | | | | * Fix `PushRuleEvaluator` to work on frozendicts frozendicts do not (necessarily) inherit from dict, so this needs to handle them correctly. * Fix event filtering for frozen events Looks like this one was introduced by #11194.
* Remove `HomeServer.get_datastore()` (#12031)Richard van der Hoff2022-02-236-8/+8
| | | | | | | The presence of this method was confusing, and mostly present for backwards compatibility. Let's get rid of it. Part of #11733
* Upgrade mypy to version 0.931 (#12030)Sean Quah2022-02-182-5/+7
| | | Upgrade mypy to 0.931, mypy-zope to 0.3.5 and fix new complaints.
* Prevent duplicate push notifications for room reads (#11835)lukasdenk2022-02-171-1/+6
|
* Revert experimental push rules from #7997. (#11884)Patrick Cloke2022-02-021-212/+7
| | | Manually reverts the merge from cdbb8e6d6e36e0b6bc36e676d8fe66c96986b399.
* Improvements to bundling aggregations. (#11815)Patrick Cloke2022-01-261-1/+1
| | | | | | | | | | | This is some odds and ends found during the review of #11791 and while continuing to work in this code: * Return attrs classes instead of dictionaries from some methods to improve type safety. * Call `get_bundled_aggregations` fewer times. * Adds a missing assertion in the tests. * Do not return empty bundled aggregations for an event (preferring to not include the bundle at all, as the docstring states).
* Fix missing app variable in mail subject (#11745)David Robertson2022-01-131-2/+2
| | | | | documentation claims that you can use the %(app)s variable in password_reset and email_validation subjects, but if you do you end up with an error 500 Co-authored-by: br4nnigan <10244835+br4nnigan@users.noreply.github.com>
* Use auto_attribs/native type hints for attrs classes. (#11692)Patrick Cloke2022-01-132-28/+28
|
* Re-apply: Move glob_to_regex and re_word_boundary to matrix-python-common ↵reivilibre2022-01-051-3/+4
| | | | | #11505 (#11687) Co-authored-by: Sean Quah <seanq@element.io>
* Add type hints to event_push_actions. (#11594)Patrick Cloke2021-12-214-38/+36
|
* Ensure emails are canonicalized before fetching associated user. (#11547)Patrick Cloke2021-12-101-1/+4
| | | | This should fix pushers with an email in non-canonical form is used as the pushkey.
* Add a constant for receipt types (m.read). (#11531)Patrick Cloke2021-12-081-1/+2
| | | And expand some type hints in the receipts storage module.
* Revert "Move `glob_to_regex` and `re_word_boundary` to ↵Sean Quah2021-12-071-4/+3
| | | | | | `matrix-python-common` (#11505) (#11527) This reverts commit a77c36989785c0d5565ab9a1169f4f88e512ce8a.
* Move `glob_to_regex` and `re_word_boundary` to `matrix-python-common` (#11505)Sean Quah2021-12-061-3/+4
|
* Improved push typing (#11409)Marcus2021-11-304-34/+187
| | | Co-authored-by: Sean Quah <8349537+squahtx@users.noreply.github.com>
* Add remaining type hints to `synapse.events`. (#11098)Patrick Cloke2021-11-022-6/+8
|
* disallow-untyped-defs for synapse.push (#11023)David Robertson2021-10-114-8/+22
|
* Relax `ignore-missing-imports` for modules that have stubs now and update ↵David Robertson2021-10-081-1/+1
| | | | | | | | | | | | mypy (#11006) Updating mypy past version 0.9 means that third-party stubs are no-longer distributed with typeshed. See http://mypy-lang.blogspot.com/2021/06/mypy-0900-released.html for details. We therefore pull in stub packages in setup.py Additionally, some modules that we were previously ignoring import failures for now have stubs. So let's use them. The rest of this change consists of fixups to make the newer mypy + stubs pass CI. Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
* Encode JSON responses on a thread in C, mk2 (#10905)Erik Johnston2021-09-281-1/+1
| | | | | | | | | | Currently we use `JsonEncoder.iterencode` to write JSON responses, which ensures that we don't block the main reactor thread when encoding huge objects. The downside to this is that `iterencode` falls back to using a pure Python encoder that is *much* less efficient and can easily burn a lot of CPU for huge responses. To fix this, while still ensuring we don't block the reactor loop, we encode the JSON on a threadpool using the standard `JsonEncoder.encode` functions, which is backed by a C library. Doing so, however, requires `respond_with_json` to have access to the reactor, which it previously didn't. There are two ways of doing this: 1. threading through the reactor object, which is a bit fiddly as e.g. `DirectServeJsonResource` doesn't currently take a reactor, but is exposed to modules and so is a PITA to change; or 2. expose the reactor in `SynapseRequest`, which requires updating a bunch of servlet types. I went with the latter as that is just a mechanical change, and I think makes sense as a request already has a reactor associated with it (via its http channel).
* Use direct references for configuration variables (part 4). (#10893)Patrick Cloke2021-09-231-1/+3
|
* Use direct references for some configuration variables (part 3) (#10885)Patrick Cloke2021-09-231-1/+1
| | | | | | | | This avoids the overhead of searching through the various configuration classes by directly referencing the class that the attributes are in. It also improves type hints since mypy can now resolve the types of the configuration variables.
* Use direct references for some configuration variables (part 2) (#10812)Patrick Cloke2021-09-154-11/+11
|
* Use direct references for some configuration variables (#10798)Patrick Cloke2021-09-131-7/+7
| | | | Instead of proxying through the magic getter of the RootConfig object. This should be more performant (and is more explicit).
* Correctly include room avatars in email notifications (#10658)David Robertson2021-09-011-1/+23
| | | | | | | | Judging by the template, this was intended ages ago, but we never actually passed an avatar URL to the template. So let's provide one. Closes #1546. Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
* Remove shebang line from module files (#10415)V024602021-07-291-1/+0
| | | Signed-off-by: Kai A. Hiller <V02460@gmail.com>
* Update the notification email subject when invited to a space. (#10426)Patrick Cloke2021-07-211-1/+17
|
* Add a module type for account validity (#9884)Brendan Abolivier2021-07-161-16/+8
| | | | | This adds an API for third-party plugin modules to implement account validity, so they can provide this feature instead of Synapse. The module implementing the current behaviour for this feature can be found at https://github.com/matrix-org/synapse-email-account-validity. To allow for a smooth transition between the current feature and the new module, hooks have been added to the existing account validity endpoints to allow their behaviours to be overridden by a module.
* Use inline type hints in various other places (in `synapse/`) (#10380)Jonathan de Jong2021-07-159-21/+21
|
* Move methods involving event authentication to EventAuthHandler. (#10268)Patrick Cloke2021-07-011-2/+2
| | | Instead of mixing them with user authentication methods.
* Split multiplart email sending into a dedicated handler (#9977)Brendan Abolivier2021-05-171-45/+8
| | | Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com>
* Merge pull request from GHSA-x345-32rc-8h85Richard van der Hoff2021-05-111-52/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * tests for push rule pattern matching * tests for acl pattern matching * factor out common `re.escape` * Factor out common re.compile * Factor out common anchoring code * add word_boundary support to `glob_to_regex` * Use `glob_to_regex` in push rule evaluator NB that this drops support for character classes. I don't think anyone ever used them. * Improve efficiency of globs with multiple wildcards The idea here is that we compress multiple `*` globs into a single `.*`. We also need to consider `?`, since `*?*` is as hard to implement efficiently as `**`. * add assertion on regex pattern * Fix mypy * Simplify glob_to_regex * Inline the glob_to_regex helper function Signed-off-by: Dan Callahan <danc@element.io> * Moar comments Signed-off-by: Dan Callahan <danc@element.io> Co-authored-by: Dan Callahan <danc@element.io>
* Only store data in caches, not "smart" objects (#9845)Erik Johnston2021-04-231-69/+92
|
* Limit length of accepted email addresses (#9855)Erik Johnston2021-04-221-1/+8
|
* Port "Allow users to click account renewal links multiple times without ↵Andrew Morgan2021-04-191-3/+5
| | | | | hitting an 'Invalid Token' page #74" from synapse-dinsic (#9832) This attempts to be a direct port of https://github.com/matrix-org/synapse-dinsic/pull/74 to mainline. There was some fiddling required to deal with the changes that have been made to mainline since (mainly dealing with the split of `RegistrationWorkerStore` from `RegistrationStore`, and the changes made to `self.make_request` in test code).
* Remove redundant "coding: utf-8" lines (#9786)Jonathan de Jong2021-04-1412-12/+0
| | | | | | | Part of #9744 Removes all redundant `# -*- coding: utf-8 -*-` lines from files, as python 3 automatically reads source code as utf-8 now. `Signed-off-by: Jonathan de Jong <jonathan@automatia.nl>`
* Import HomeServer from the proper module. (#9665)Patrick Cloke2021-03-237-7/+7
|
* Fixed code misc. quality issues (#9649)Ankit Dobhal2021-03-221-1/+1
| | | | | - Merge 'isinstance' calls. - Remove unnecessary dict call outside of comprehension. - Use 'sys.exit()' calls.
* Fix additional type hints from Twisted 21.2.0. (#9591)Patrick Cloke2021-03-121-2/+2
|
* Fix additional type hints from Twisted upgrade. (#9518)Patrick Cloke2021-03-031-2/+3
|
* Test that we require validated email for email pushers (#9496)Erik Johnston2021-02-251-0/+6
|
* Clean up `ShardedWorkerHandlingConfig` (#9466)Erik Johnston2021-02-241-1/+3
| | | | | | | | | | | | | | | | | * Split ShardedWorkerHandlingConfig This is so that we have a type level understanding of when it is safe to call `get_instance(..)` (as opposed to `should_handle(..)`). * Remove special cases in ShardedWorkerHandlingConfig. `ShardedWorkerHandlingConfig` tried to handle the various different ways it was possible to configure federation senders and pushers. This led to special cases that weren't hit during testing. To fix this the handling of the different cases is moved from there and `generic_worker` into the worker config class. This allows us to have the logic in one place and allows the rest of the code to ignore the different cases.
* Fix deleting pushers when using sharded pushers. (#9465)Erik Johnston2021-02-222-7/+19
|
* Update black, and run auto formatting over the codebase (#9381)Eric Eastwood2021-02-164-28/+37
| | | | | | | - Update black version to the latest - Run black auto formatting over the codebase - Run autoformatting according to [`docs/code_style.md `](https://github.com/matrix-org/synapse/blob/80d6dc9783aa80886a133756028984dbf8920168/docs/code_style.md) - Update `code_style.md` docs around installing black to use the correct version
* Fix some typos.Patrick Cloke2021-02-121-1/+1
|
* Handle empty rooms when generating email notifications. (#9257)Patrick Cloke2021-02-041-37/+176
| | | | | | Fixes some exceptions if the room state isn't quite as expected. If the expected state events aren't found, try to find them in the historical room state. If they still aren't found, fallback to a reasonable, although ugly, value.
* Refactor email summary generation. (#9260)Patrick Cloke2021-02-011-122/+173
| | | | | | * Fixes a case where no summary text was returned. * The use of messages_from_person vs. messages_from_person_and_others was tweaked to depend on whether there was 1 sender or multiple senders, not based on if there was 1 room or multiple rooms.
* Clean-up the template loading code. (#9200)Patrick Cloke2021-01-271-2/+16
| | | | | * Enables autoescape by default for HTML files. * Adds a new read_template method for reading a single template. * Some logic clean-up.
* Handle missing content keys when calculating presentable names. (#9165)Patrick Cloke2021-01-251-15/+11
| | | | Treat the content as untrusted and do not assume it is of the proper form.
* Improve the performance of calculating ignored users in large rooms (#9024)Patrick Cloke2021-01-071-4/+8
| | | | | | This allows for efficiently finding which users ignore a particular user. Co-authored-by: Erik Johnston <erik@matrix.org>
* Fix-up assertions about last stream token in push (#9020)Patrick Cloke2021-01-054-14/+7
| | | The last stream token is always known and we do not need to handle none.
* Ensure that a URL exists in the content during push. (#8965)Patrick Cloke2020-12-181-1/+5
| | | | This fixes an KeyError exception, after this PR the content is just considered unknown.
* Convert internal pusher dicts to attrs classes. (#8940)Patrick Cloke2020-12-165-115/+167
| | | This improves type hinting and should use less memory.
* Fix handling of stream tokens for push. (#8943)Patrick Cloke2020-12-154-40/+17
| | | | Removes faulty assertions and fixes the logic to ensure the max stream token is always set.
* Add type hints to the push module. (#8901)Patrick Cloke2020-12-116-80/+155
|
* Add type hints for HTTP and email pushers. (#8880)Patrick Cloke2020-12-076-101/+164
|
* Add type hints to the push mailer module. (#8882)Patrick Cloke2020-12-071-40/+83
|
* Add additional validation to pusher URLs. (#8865)Patrick Cloke2020-12-042-3/+16
| | | | Pusher URLs now must end in `/_matrix/push/v1/notify` per the specification.
* Apply an IP range blacklist to push and key revocation requests. (#8821)Patrick Cloke2020-12-021-1/+1
| | | | | | | | | | | | Replaces the `federation_ip_range_blacklist` configuration setting with an `ip_range_blacklist` setting with wider scope. It now applies to: * Federation * Identity servers * Push notifications * Checking key validitity for third-party invite events The old `federation_ip_range_blacklist` setting is still honored if present, but with reduced scope (it only applies to federation and identity servers).
* Add a config option to change whether unread push notification counts are ↵Andrew Morgan2020-11-302-7/+22
| | | | | | | | per-message or per-room (#8820) This PR adds a new config option to the `push` section of the homeserver config, `group_unread_count_by_room`. By default Synapse will group push notifications by room (so if you have 1000 unread messages, if they lie in 55 rooms, you'll see an unread count on your phone of 55). However, it is also useful to be able to send out the true count of unread messages if desired. If `group_unread_count_by_room` is set to `false`, then with the above example, one would see an unread count of 1000 (email anyone?).
* Add base pushrule to notify for jitsi conferences (#8286)David Baker2020-11-021-0/+24
| | | This could be customised to trigger a different kind of notification in the future, but for now it's a normal non-highlight one.
* Implement and use an @lru_cache decorator (#8595)Richard van der Hoff2020-10-301-13/+24
| | | We don't always need the full power of a DeferredCache.
* Start fewer opentracing spans (#8640)Erik Johnston2020-10-261-2/+16
| | | | | | | #8567 started a span for every background process. This is good as it means all Synapse code that gets run should be in a span (unless in the sentinel logging context), but it means we generate about 15x the number of spans as we did previously. This PR attempts to reduce that number by a) not starting one for send commands to Redis, and b) deferring starting background processes until after we're sure they're necessary. I don't really know how much this will help.
* Fix typos and spelling errors. (#8639)Patrick Cloke2020-10-232-3/+3
|
* Fix email notifications for invites without local state. (#8627)Erik Johnston2020-10-231-13/+28
| | | | This can happen if e.g. the room invited into is no longer on the server (or if all users left the room).
* Add `DeferredCache.get_immediate` method (#8568)Richard van der Hoff2020-10-191-1/+1
| | | | | | | | | | | * Add `DeferredCache.get_immediate` method A bunch of things that are currently calling `DeferredCache.get` are only really interested in the result if it's completed. We can optimise and simplify this case. * Remove unused 'default' parameter to DeferredCache.get() * another get_immediate instance
* Include a simple message in email notifications that include encrypted ↵Patrick Cloke2020-10-191-5/+11
| | | | content (#8545)
* Apply suggestions from code reviewRichard van der Hoff2020-10-161-1/+1
| | | Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
* type annotations for LruCacheRichard van der Hoff2020-10-161-7/+9
|
* Make LruCache register its own metrics (#8561)Richard van der Hoff2020-10-161-3/+1
| | | | | rather than have everything that instantiates an LruCache manage metrics separately, have LruCache do it itself.
* Fix not sending events over federation when using sharded event persisters ↵Erik Johnston2020-10-143-4/+22
| | | | | | | | | | | | | | | | | (#8536) * Fix outbound federaion with multiple event persisters. We incorrectly notified federation senders that the minimum persisted stream position had advanced when we got an `RDATA` from an event persister. Notifying of federation senders already correctly happens in the notifier, so we just delete the offending line. * Change some interfaces to use RoomStreamToken. By enforcing use of `RoomStreamTokens` we make it less likely that people pass in random ints that they got from somewhere random.
* Enable mypy checking for unreachable code and fix instances. (#8432)Patrick Cloke2020-10-011-2/+2
|
* Don't push if an user account has expired (#8353)Mathieu Velten2020-09-231-0/+18
|
* Simplify super() calls to Python 3 syntax. (#8344)Patrick Cloke2020-09-181-1/+1
| | | | | | | This converts calls like super(Foo, self) -> super(). Generated with: sed -i "" -Ee 's/super\([^\(]+\)/super()/g' **/*.py
* Clean up `Notifier.on_new_room_event` code path (#8288)Erik Johnston2020-09-101-1/+1
| | | | | | | | | | | | | The idea here is that we pass the `max_stream_id` to everything, and only use the stream ID of the particular event to figure out *when* the max stream position has caught up to the event and we can notify people about it. This is to maintain the distinction between the position of an item in the stream (i.e. event A has stream ID 513) and a token that can be used to partition the stream (i.e. give me all events after stream ID 352). This distinction becomes important when the tokens are more complicated than a single number, which they will be once we start tracking the position of multiple writers in the tokens. The valid operations here are: 1. Is a position before or after a token 2. Fetching all events between two tokens 3. Merging multiple tokens to get the "max", i.e. `C = max(A, B)` means that for all positions P where P is before A *or* before B, then P is before C. Future PR will change the token type to a dedicated type.
* Show a confirmation page during user password reset (#8004)Andrew Morgan2020-09-101-1/+1
| | | | | This PR adds a confirmation step to resetting your user password between clicking the link in your email and your password actually being reset. This is to better align our password reset flow with the industry standard of requiring a confirmation from the user after email validation.
* Fixup pusher pool notifications (#8287)Erik Johnston2020-09-093-5/+18
| | | | | `pusher_pool.on_new_notifications` expected a min and max stream ID, however that was not what we were passing in. Instead, let's just pass it the current max stream ID and have it track the last stream ID it got passed. I believe that it mostly worked as we called the function for every event. However, it would break for events that got persisted out of order, i.e, that were persisted but the max stream ID wasn't incremented as not all preceding events had finished persisting, and push for that event would be delayed until another event got pushed to the effected users.
* Revert "Fixup pusher pool notifications"Erik Johnston2020-09-093-18/+5
| | | | This reverts commit e7fd336a53a4ca489cdafc389b494d5477019dc0.
* Fixup pusher pool notificationsErik Johnston2020-09-093-5/+18
|
* Only add rows to the push actions table if the event notifies or should be ↵Brendan Abolivier2020-09-071-1/+6
| | | | marked unread (#8274)
* Unread counts fixes (#8254)Brendan Abolivier2020-09-041-1/+1
| | | | | | | | | | | | | | * Fixup `ALTER TABLE` database queries Make the new columns nullable, because doing otherwise can wedge a server with a big database, as setting a default value rewrites the table. * Switch back to using the notifications count in the push badge Clients are likely to be confused if we send a push but the badge count is the unread messages one, and not the notifications one. * Changelog
* Stop sub-classing object (#8249)Patrick Cloke2020-09-047-8/+8
|
* Re-implement unread counts (again) (#8059)Brendan Abolivier2020-09-022-29/+65
|
* Use the default templates when a custom template file cannot be found (#8037)Andrew Morgan2020-08-172-95/+8
| | | Fixes https://github.com/matrix-org/synapse/issues/6583
* Implement new experimental push rules (#7997)Brendan Abolivier2020-08-101-8/+208
|\ | | | | With an undocumented configuration setting to enable them for specific users.
| * Incorporate reviewBrendan Abolivier2020-08-061-16/+4
| |
| * LintBrendan Abolivier2020-07-301-19/+32
| |
| * Merge branch 'develop' of github.com:matrix-org/synapse into ↵Brendan Abolivier2020-07-306-148/+97
| |\ | | | | | | | | | babolivier/new_push_rules
| * | Implement new experimental push rules with a database hack to enable themBrendan Abolivier2020-07-281-9/+208
| | |
* | | Revert #7736 (#8039)Brendan Abolivier2020-08-061-4/+13
| | |
* | | Convert synapse.api to async/await (#8031)Patrick Cloke2020-08-061-1/+1
| |/ |/|
* | Re-implement unread counts (#7736)Brendan Abolivier2020-07-291-13/+4
| |
* | Convert push to async/await. (#7948)Patrick Cloke2020-07-276-139/+95
| |
* | Convert state resolution to async/await (#7942)Patrick Cloke2020-07-241-1/+3
|/
* Add ability to run multiple pusher instances (#7855)Erik Johnston2020-07-161-36/+42
| | | This reuses the same scheme as federation sender sharding
* Allow email subjects to be customised through Synapse's configuration (#7846)Brendan Abolivier2020-07-141-31/+20
|
* Correctly pass app_name to all email templates. (#7829)Erik Johnston2020-07-141-2/+8
| | | We didn't do this for e.g. registration emails.
* Don't ignore `set_tweak` actions with no explicit `value`. (#7766)reivilibre2020-07-061-4/+27
| | | | | | | | | | | | | | * Fix spec compliance; tweaks without values are valid (default to True, which is only concretely specified for `highlight`, but it seems only reasonable to generalise) * Changelog for 7766. * Add documentation to `tweaks_for_actions` May as well tidy up when I'm here. * Add a test for `tweaks_for_actions`
* Hack to add push priority to push notifications (#7765)reivilibre2020-07-011-3/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Remove obsolete comment about ancient temporary code Signed-off-by: Olivier Wilkinson (reivilibre) <olivier@librepush.net> * Implement hack to set push priority based on whether the tweaks indicate the event might cause effects. * Changelog for 7765 Signed-off-by: Olivier Wilkinson (reivilibre) <olivier@librepush.net> * Antilint * Add tests for push priority Signed-off-by: Olivier Wilkinson (reivilibre) <olivier@librepush.net> * Update synapse/push/httppusher.py Co-authored-by: Brendan Abolivier <babolivier@matrix.org> * Antilint * Remove needless invites from tests. Co-authored-by: Brendan Abolivier <babolivier@matrix.org>
* Back out MSC2625 implementation (#7761)Brendan Abolivier2020-07-012-9/+3
|
* add a commentRichard van der Hoff2020-06-181-0/+2
|
* Fix unread counts in syncBrendan Abolivier2020-06-171-1/+1
| | | | | * Always return an unread_count in get_unread_event_push_actions_by_room_for_user * Don't always expect unread_count to be there so we don't take out sync entirely if something goes wrong
* Implement unread counter (MSC2625) (#7673)Brendan Abolivier2020-06-172-3/+9
|\ | | | | Implementation of https://github.com/matrix-org/matrix-doc/pull/2625
| * Merge branch 'develop' into babolivier/mark_unreadBrendan Abolivier2020-06-151-8/+6
| |\
| * | Incorporate review bitsBrendan Abolivier2020-06-121-7/+6
| | |
| * | Actually act on mark_unreadBrendan Abolivier2020-06-111-3/+7
| | |
| * | Add a new unread_counter to sync responsesBrendan Abolivier2020-06-101-1/+4
| | |
* | | Refactor getting replication updates from database. (#7636)Erik Johnston2020-06-161-3/+1
| | | | | | | | | The aim here is to make it easier to reason about when streams are limited and when they're not, by moving the logic into the database functions themselves. This should mean we can kill of `db_query_to_update_function` function.
* | | Replace all remaining six usage with native Python 3 equivalents (#7704)Dagfinn Ilmari Mannsåker2020-06-162-5/+2
| | |
* | | Ensure the body is a string before comparing push rules. (#7701)Patrick Cloke2020-06-151-2/+2
| |/ |/|
* | Replace iteritems/itervalues/iterkeys with native versions. (#7692)Patrick Cloke2020-06-151-8/+6
|/
* Convert sending mail to async/await. (#7557)Erik Johnston2020-05-222-69/+53
| | | | Mainly because sometimes the email push code raises exceptions where the stack traces have gotten lost, which is hopefully fixed by this.
* remove miscellaneous PY2 codeRichard van der Hoff2020-05-151-8/+3
|
* Fix new flake8 errors (#7470)Erik Johnston2020-05-121-2/+5
|
* Allow configuration of Synapse's cache without using synctl or environment ↵Amber Brown2020-05-112-3/+5
| | | | variables (#6391)
* Do not treat display names as globs for push rules. (#7271)Patrick Cloke2020-04-161-30/+39
|
* Fix concurrent modification errors in pusher metrics (#7106)Richard van der Hoff2020-03-191-9/+18
| | | add a lock to try to make this metric actually work
* Add prometheus metrics for the number of active pushers (#7103)Richard van der Hoff2020-03-191-1/+23
|
* Fix undefined `room_id` in `make_summary_text`Brendan Abolivier2020-03-091-1/+3
| | | | | This would break notifications about un-named rooms when processing notifications in a batch.
* No longer use room alias events to calculate room names for push ↵Patrick Cloke2020-02-211-22/+14
| | | | notifications. (#6966)
* Clarify list/set/dict/tuple comprehensions and enforce via flake8 (#6957)Patrick Cloke2020-02-214-18/+14
| | | | Ensure good comprehension hygiene using flake8-comprehensions.
* Reduce amount of logging at INFO level. (#6862)Erik Johnston2020-02-061-1/+1
| | | | | | | | A lot of the things we log at INFO are now a bit superfluous, so lets make them DEBUG logs to reduce the amount we log by default. Co-Authored-By: Brendan Abolivier <babolivier@matrix.org> Co-authored-by: Brendan Abolivier <github@brendanabolivier.com>
* Add `local_current_membership` table (#6655)Erik Johnston2020-01-151-1/+1
| | | | | | | Currently we rely on `current_state_events` to figure out what rooms a user was in and their last membership event in there. However, if the server leaves the room then the table may be cleaned up and that information is lost. So lets add a table that separately holds that information.
* Change EventContext to use the Storage class (#6564)Erik Johnston2019-12-201-2/+2
|
* Clean up startup for the pusher (#6558)Richard van der Hoff2019-12-182-9/+13
| | | | | | | | | | | | | | | | | | | | | | | * Remove redundant python2 support code `str.decode()` doesn't exist on python3, so presumably this code was doing nothing * Filter out pushers with corrupt data When we get a row with unparsable json, drop the row, rather than returning a row with null `data`, which will then cause an explosion later on. * Improve logging when we can't start a pusher Log the ID to help us understand the problem * Make email pusher setup more robust We know we'll have a `data` member, since that comes from the database. What we *don't* know is if that is a dict, and if that has a `brand` member, and if that member is a string.
* Don't call SQLBaseStore methods from outside storesErik Johnston2019-12-041-9/+1
|
* Clean up newline quote marks around the codebase (#6362)Andrew Morgan2019-11-212-5/+4
|
* Support for routing outbound HTTP requests via a proxy (#6239)Richard van der Hoff2019-11-011-1/+1
| | | | | | | | | | | | | | | | | | | | The `http_proxy` and `HTTPS_PROXY` env vars can be set to a `host[:port]` value which should point to a proxy. The address of the proxy should be excluded from IP blacklists such as the `url_preview_ip_range_blacklist`. The proxy will then be used for * push * url previews * phone-home stats * recaptcha validation * CAS auth validation It will *not* be used for: * Application Services * Identity servers * Outbound federation * In worker configurations, connections from workers to masters Fixes #4198.
* Update black to 19.10b0 (#6304)Amber Brown2019-11-014-22/+17
| | | * update version of black and also fix the mypy config being overridden
* Merge pull request #6294 from matrix-org/erikj/add_state_storageErik Johnston2019-10-313-6/+9
|\ | | | | Add StateGroupStorage interface
| * Port to use state storageErik Johnston2019-10-303-6/+9
| |
* | Remove usage of deprecated logger.warn method from codebase (#6271)Andrew Morgan2019-10-312-4/+4
|/ | | Replace every instance of `logger.warn` with `logger.warning` as the former is deprecated.
* Quick fix to ensure cache descriptors always return deferredsErik Johnston2019-10-281-1/+1
|
* Generalize email sending logging (#6075)Andrew Morgan2019-09-231-1/+1
| | | | | | | In ancient times Synapse would only send emails when it was notifying a user about a message they received... Now it can do all sorts of neat things! Change the logging so it's not just about notifications.
* Allow HS to send emails when adding an email to the HS (#6042)Andrew Morgan2019-09-201-0/+29
|
* Ensure email validation link parameters are URL-encoded (#6063)Andrew Morgan2019-09-201-4/+6
| | | The validation links sent via email had their query parameters inserted without any URL-encoding. Surprisingly this didn't seem to cause any issues, but if a user were to put a `/` in their client_secret it could lead to problems.
* Add opentracing span for HTTP pushErik Johnston2019-09-091-1/+12
|
* Allow Synapse to send registration emails + choose Synapse or an external ↵Andrew Morgan2019-09-062-23/+77
| | | | | | | | | | | | | | | | server to handle 3pid validation (#5987) This is a combination of a few different PRs, finally all being merged into `develop`: * #5875 * #5876 * #5868 (This one added the `/versions` flag but the flag itself was actually [backed out](https://github.com/matrix-org/synapse/commit/891afb57cbdf9867f2848341b29c75d6f35eef5a#diff-e591d42d30690ffb79f63bb726200891) in #5969. What's left is just giving /versions access to the config file, which could be useful in the future) * #5835 * #5969 * #5940 Clients should not actually use the new registration functionality until https://github.com/matrix-org/synapse/pull/5972 is merged. UPGRADE.rst, changelog entries and config file changes should all be reviewed closely before this PR is merged.
* Remove unnecessary parentheses around return statements (#5931)Andrew Morgan2019-08-301-1/+1
| | | | | Python will return a tuple whether there are parentheses around the returned values or not. I'm just sick of my editor complaining about this all over the place :)
* Remove redundant returnErik Johnston2019-08-131-1/+0
|
* Handle pusher being deleted during processing.Erik Johnston2019-08-012-13/+33
| | | | | Instead of throwing a StoreError lets break out of processing loop and mark the pusher as stopped.
* Explicitly check that tombstone is a state event before notifying.Erik Johnston2019-07-311-1/+7
|
* Replace returnValue with return (#5736)Amber Brown2019-07-236-82/+65
|
* Add default push rule to ignore reactions (#5623)J. Ryan Stinnett2019-07-051-0/+13
| | | | | | | This adds a default push rule following the proposal in [MSC2153](https://github.com/matrix-org/matrix-doc/pull/2153). See also https://github.com/vector-im/riot-web/issues/10208 See also https://github.com/matrix-org/matrix-js-sdk/pull/976
* Move logging utilities out of the side drawer of util/ and into logging/ (#5606)Amber Brown2019-07-041-1/+1
|
* Improve email notification logging (#5502)Neil Johnson2019-06-201-1/+1
|
* Run Black. (#5482)Amber Brown2019-06-2013-697/+675
|
* Merge pull request #5388 from matrix-org/erikj/fix_email_pushErik Johnston2019-06-173-7/+53
|\ | | | | Fix email notifications for unnamed rooms with multiple people
| * Add testErik Johnston2019-06-072-7/+42
| |
| * Fix email notifications for large unnamed rooms.Erik Johnston2019-06-071-0/+11
| | | | | | | | | | | | When we try and calculate a description for a room for with no name but multiple other users we threw an exception (due to trying to subscript result of `dict.values()`).
* | Change password reset links to /_matrix.Erik Johnston2019-06-111-1/+1
|/
* Add ability to perform password reset via email without trusting the ↵Andrew Morgan2019-06-062-20/+69
| | | | | | | | | | | | identity server (#5377) Sends password reset emails from the homeserver instead of proxying to the identity server. This is now the default behaviour for security reasons. If you wish to continue proxying password reset requests to the identity server you must now enable the email.trust_identity_server_for_password_resets option. This PR is a culmination of 3 smaller PRs which have each been separately reviewed: * #5308 * #5345 * #5368
* Add a default .m.rule.tombstone push rule (#4867)Travis Ralston2019-04-291-0/+17
| | | | | | | | | | * Add a default .m.rule.tombstone push rule In support of MSC1930: https://github.com/matrix-org/matrix-doc/pull/1930 * changelog * Appease the changelog linter
* Merge pull request #5047 from matrix-org/babolivier/account_expirationBrendan Abolivier2019-04-172-10/+10
|\ | | | | Send out emails with links to extend an account's validity period
| * Send out emails with links to extend an account's validity periodBrendan Abolivier2019-04-172-10/+10
| |
* | Make starting pushers faster during start upErik Johnston2019-04-023-8/+43
|/ | | | | | | | | | | We start all pushers on start up and immediately start a background process to fetch push to send. This makes start up incredibly painful when dealing with many pushers. Instead, let's do a quick fast DB check to see if there *may* be push to send and only start the background processes for those pushers. We also stagger starting up and doing those checks so that we don't try and handle all pushers at once.
* Add missing returnErik Johnston2019-02-221-0/+1
|
* Correctly handle PusherConfigExceptionErik Johnston2019-02-221-0/+9
|
* Drop logging level of creating a pusherErik Johnston2019-02-221-1/+1
|
* Correctly handle null data in HttpPusherErik Johnston2019-02-221-0/+5
|
* Add prometheus metrics for number of badge update pushes. (#4709)Richard van der Hoff2019-02-221-8/+25
| | | | | | We're counting the number of push notifications, but not the number of badges; I'd like to see if they are significant.
* bail out early in on_new_receipts if no pushers (#4706)Richard van der Hoff2019-02-211-0/+8
|
* Logging improvements for the pusher (#4691)Richard van der Hoff2019-02-202-13/+14
|
* Fix flake8 (#4519)Amber Brown2019-01-301-1/+1
|
* Fix logcontext leak in EmailPusherRichard van der Hoff2018-11-191-2/+3
|
* Clean up event accesses and testsErik Johnston2018-11-022-4/+4
| | | | | This is in preparation to refactor FrozenEvent to support different event formats for different room versions
* Write some tests for the email pusher (#4095)Amber Brown2018-10-302-6/+9
|
* Fix start_pushers vs _start_pushers confusionRichard van der Hoff2018-10-241-3/+3
|
* sanity-check the is_processing flagRichard van der Hoff2018-10-242-8/+14
| | | | ... and rename it, for even more sanity
* Run PusherPool.start as a background processRichard van der Hoff2018-10-221-5/+7
| | | | | We don't do anything with the result, so this is needed to give this code a logcontext.
* Make on_started synchronous tooRichard van der Hoff2018-10-223-11/+21
| | | | | | This brings it into line with on_new_notifications and on_new_receipts. It requires a little bit of hoop-jumping in EmailPusher to load the throttle params before the first loop.
* Remove redundant run_as_background_process() from pusherpoolRichard van der Hoff2018-10-223-44/+8
| | | | | | | `on_new_notifications` and `on_new_receipts` in `HttpPusher` and `EmailPusher` now always return synchronously, so we can remove the `defer.gatherResults` on their results, and the `run_as_background_process` wrappers can be removed too because the PusherPool methods will now complete quickly enough.
* Give pushers their own background logcontextRichard van der Hoff2018-10-222-58/+54
| | | | | | | | Each pusher has its own loop which runs for as long as it has work to do. This should run in its own background thread with its own logcontext, as other similar loops elsewhere in the system do - which means that CPU usage is consistently attributed to that loop, rather than to whatever request happened to start the loop.
* move get_all_pushers call downRichard van der Hoff2018-10-221-3/+9
| | | | simplifies the interface to _start_pushers
* Factor PusherPool._start_pusher out of _start_pushersRichard van der Hoff2018-10-221-18/+33
| | | | | ... and use it from start_pusher_by_id. This mostly simplifies start_pusher_by_id.
* Rename _refresh_pusherRichard van der Hoff2018-10-221-2/+3
| | | | | This is public (or at least, called from outside the class), so ought to have a better name.
* Calculate absolute path for email templatesRichard van der Hoff2018-10-191-6/+2
|
* Ship the email templates as package_dataRichard van der Hoff2018-10-171-1/+4
| | | | | | | | | | move the example email templates into the synapse package so that they can be used as package data, which should mean that all of the packaging mechanisms (pip, docker, debian, arch, etc) should now come with the example templates. In order to grandfather in people who relied on the templates being in the old place, check for that situation and fall back to using the defaults if the templates directory does not exist.
* fix link for case that config.email_riot_base_url is setNeil Johnson2018-09-131-1/+1
|
* merge (#3576)Amber Brown2018-09-142-4/+10
|
* Fix logcontexts for running pushersRichard van der Hoff2018-08-171-2/+15
| | | | | | | First of all, avoid resetting the logcontext before running the pushers, to fix the "Starting db txn 'get_all_updated_receipts' from sentinel context" warning. Instead, give them their own "background process" logcontexts.
* Rename async to async_helpers because `async` is a keyword on Python 3.7 (#3678)Amber Brown2018-08-102-2/+2
|
* Use new gettersErik Johnston2018-07-231-3/+4
|
* run isortAmber Brown2018-07-0911-48/+48
|
* Remove all global reactor imports & pass it around explicitly (#3424)Amber Brown2018-06-252-4/+6
|
* Remove run_on_reactor (#3395)Amber Brown2018-06-141-3/+0
|
* Consistently use six's iteritems and wrap lazy keys/values in list() if ↵Amber Brown2018-05-313-3/+4
| | | | they're not meant to be lazy (#3307)
* Merge remote-tracking branch 'origin/develop' into 3218-official-promAmber Brown2018-05-282-7/+10
|\
| * Merge pull request #3244 from NotAFile/py3-six-4Amber Brown2018-05-241-6/+7
| |\ | | | | | | replace some iteritems with six
| | * replace some iteritems with sixAdrian Tschira2018-05-191-6/+7
| | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
| * | Replace some more comparisons with sixAdrian Tschira2018-05-191-1/+3
| |/ | | | | | | | | | | plus a bonus b"" string I missed last time Signed-off-by: Adrian Tschira <nota@notafile.com>
* | fixesAmber Brown2018-05-231-2/+2
| |
* | cleanupAmber Brown2018-05-221-2/+4
| |
* | fixesAmber Brown2018-05-221-2/+2
| |
* | rest of the changesAmber Brown2018-05-211-17/+11
| |
* | replacing portionsAmber Brown2018-05-212-10/+5
|/
* Merge pull request #3152 from NotAFile/py3-local-importsRichard van der Hoff2018-04-302-3/+3
|\ | | | | make imports local
| * make imports localAdrian Tschira2018-04-282-3/+3
| | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
* | Merge remote-tracking branch 'origin/develop' into rav/use_run_in_backgroundRichard van der Hoff2018-04-273-7/+17
|\|
| * Merge pull request #3138 from matrix-org/rav/catch_unhandled_exceptionsRichard van der Hoff2018-04-272-5/+11
| |\ | | | | | | Improve exception handling for background processes
| | * Improve exception handling for background processesRichard van der Hoff2018-04-272-5/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There were a bunch of places where we fire off a process to happen in the background, but don't have any exception handling on it - instead relying on the unhandled error being logged when the relevent deferred gets garbage-collected. This is unsatisfactory for a number of reasons: - logging on garbage collection is best-effort and may happen some time after the error, if at all - it can be hard to figure out where the error actually happened. - it is logged as a scary CRITICAL error which (a) I always forget to grep for and (b) it's not really CRITICAL if a background process we don't care about fails. So this is an attempt to add exception handling to everything we fire off into the background.
| * | Add missing consumeErrorsRichard van der Hoff2018-04-271-2/+6
| |/ | | | | | | | | In general we want defer.gatherResults to consumeErrors, rather than having exceptions hanging around and getting logged as CRITICAL unhandled errors.
* / Use run_in_background in preference to preserve_fnRichard van der Hoff2018-04-271-8/+12
|/ | | | | | While I was going through uses of preserve_fn for other PRs, I converted places which only use the wrapped function once to use run_in_background, to avoid creating the function object.
* Update commentsErik Johnston2018-02-211-3/+4
|
* Batch inserts into event_push_actions_stagingErik Johnston2018-02-201-6/+9
|
* CommentsErik Johnston2018-02-161-0/+3
|
* Remove context.push_actionsErik Johnston2018-02-152-11/+4
|
* Store push actions in staging areaErik Johnston2018-02-151-0/+3
|
* Better logging when pushes failRichard van der Hoff2018-01-291-2/+8
|
* add appid/device_display_name to to pusher loggingRichard van der Hoff2018-01-291-2/+2
|
* Fix logging and add user_idRichard van der Hoff2018-01-221-2/+3
|
* logging and debug for http pusherRichard van der Hoff2018-01-221-4/+20
|
* Remove pushers when deleting access tokensRichard van der Hoff2017-11-291-9/+15
| | | | | Whenever an access token is invalidated, we should remove the associated pushers.
* Merge pull request #2675 from matrix-org/rav/remove_broken_logcontext_funcsRichard van der Hoff2017-11-151-3/+3
|\ | | | | Remove preserve_context_over_{fn, deferred}
| * Remove preserve_context_over_{fn, deferred}Richard van der Hoff2017-11-141-3/+3
| | | | | | | | | | Both of these functions ae known to leak logcontexts. Replace the remaining calls to them and kill them off.
* | Rename redact_content option to include_contentDavid Baker2017-11-081-1/+2
|/ | | | | | | | | | | | | | | | | | The redact_content option never worked because it read the wrong config section. The PR introducing it (https://github.com/matrix-org/synapse/pull/2301) had feedback suggesting the name be changed to not re-use the term 'redact' but this wasn't incorporated. This reanmes the option to give it a less confusing name, and also means that people who've set the redact_content option won't suddenly see a behaviour change when upgrading synapse, but instead can set include_content if they want to. This PR also updates the wording of the config comment to clarify that this has no effect on event_id_only push. Includes https://github.com/matrix-org/synapse/pull/2422
* replace 'except:' with 'except Exception:'Richard van der Hoff2017-10-234-8/+8
| | | | what could possibly go wrong
* Omit the *s for @room notificationsDavid Baker2017-10-161-1/+1
| | | | They're just redundant
* pep8David Baker2017-10-102-3/+5
|
* Don't KeyError if no power_levels eventDavid Baker2017-10-101-1/+3
|
* Use notification levels in power_levelsDavid Baker2017-10-103-12/+22
| | | | | | Rather than making the condition directly require a specific power level. This way the level require to notify a room can be configured per room.
* There was already a constant for thisDavid Baker2017-10-101-3/+4
| | | | also update copyright
* More optimisationDavid Baker2017-10-101-6/+9
|
* What year is it!? Who's the president!?David Baker2017-10-101-1/+1
|
* Make be fasterDavid Baker2017-10-051-3/+3
|
* Add fastpath optimisationDavid Baker2017-10-051-3/+9
|
* pep8David Baker2017-10-051-0/+3
|
* They're called roomsDavid Baker2017-10-051-4/+4
|
* Get rule type rightDavid Baker2017-10-051-1/+1
|
* Support for channel notificationsDavid Baker2017-10-053-8/+59
| | | | | Add condition type to check the sender's power level and add a base rule using it for @channel notifications.
* Use better method for word boundary searchingDavid Baker2017-10-051-11/+3
| | | | From https://github.com/matrix-org/matrix-js-sdk/commit/ebc95667b8a5777d13e5d3c679972bedae022fd5
* pep8David Baker2017-10-051-0/+1
|
* Fix notif kws that start/end with non-word charsDavid Baker2017-10-051-2/+21
| | | | | | | Only prepend / append word bounary characters if the search expression starts or ends with a word character, otherwise they don't work because there's no word bounary between whitespace and a non-word char.
* Also include the room_idDavid Baker2017-09-181-0/+1
| | | | as really it's part of the event ID
* Use .get - it's much shorterDavid Baker2017-09-181-1/+1
|
* Add support for event_id_only push formatDavid Baker2017-09-181-0/+19
| | | | | | | Param in the data dict of a pusher that tells an HTTP pusher to send just the event_id of the event it's notifying about and the notification counts. For clients that want to go & fetch the body of the event themselves anyway.
* Increase cache hit ratio for pushErik Johnston2017-07-141-0/+8
| | | | | We don't update the cache in all code paths, which causes subsequent calls to miss the cache