summary refs log tree commit diff
path: root/synapse/handlers/message.py (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Update black, and run auto formatting over the codebase (#9381)Eric Eastwood2021-02-161-11/+23
| | | | | | | - 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
* Add an admin API to get the current room state (#9168)Travis Ralston2021-02-021-1/+1
| | | | | This could arguably replace the existing admin API for `/members`, however that is out of scope of this change. This sort of endpoint is ideal for moderation use cases as well as other applications, such as needing to retrieve various bits of information about a room to perform a task (like syncing power levels between two places). This endpoint exposes nothing more than an admin would be able to access with a `select *` query on their database.
* Precompute joined hosts and store in Redis (#9198)Erik Johnston2021-01-261-0/+42
|
* Try and drop stale extremities. (#8929)Erik Johnston2020-12-181-1/+1
| | | | If we see stale extremities while persisting events, and notice that they don't change the result of state resolution, we drop them.
* Allow spam-checker modules to be provide async methods. (#8890)David Teller2020-12-111-1/+1
| | | | Spam checker modules can now provide async methods. This is implemented in a backwards-compatible manner.
* Add admin API for logging in as a user (#8617)Erik Johnston2020-11-171-11/+10
|
* Block clients from sending server ACLs that lock the local server out. (#8708)Erik Johnston2020-11-031-0/+3
| | | Fixes #4042
* Merge pull request #8678 from matrix-org/rav/fix_frozen_eventsRichard van der Hoff2020-10-281-3/+2
|\ | | | | Fix serialisation errors when using third-party event rules.
| * Remove frozendict_json_encoder and support frozendicts everywhereRichard van der Hoff2020-10-281-3/+2
| | | | | | | | | | | | Not being able to serialise `frozendicts` is fragile, and it's annoying to have to think about which serialiser you want. There's no real downside to supporting frozendicts, so let's just have one json encoder.
* | Abstract code for stripping room state into a separate method (#8671)Andrew Morgan2020-10-271-28/+7
| | | | | | | | | | | | | | | | | | | | | | This is a requirement for [knocking](https://github.com/matrix-org/synapse/pull/6739), and is abstracting some code that was originally used by the invite flow. I'm separating it out into this PR as it's a fairly contained change. For a bit of context: when you invite a user to a room, you send them [stripped state events](https://matrix.org/docs/spec/server_server/unstable#put-matrix-federation-v2-invite-roomid-eventid) as part of `invite_room_state`. This is so that their client can display useful information such as the room name and avatar. The same requirement applies to knocking, as it would be nice for clients to be able to display a list of rooms you've knocked on - room name and avatar included. The reason we're sending membership events down as well is in the case that you are invited to a room that does not have an avatar or name set. In that case, the client should use the displayname/avatar of the inviter. That information is located in the inviter's membership event. This is optional as knocks don't really have any user in the room to link up to. When you knock on a room, your knock is sent by you and inserted into the room. It wouldn't *really* make sense to show the avatar of a random user - plus it'd be a data leak. So I've opted not to send membership events to the client here. The UX on the client for when you knock on a room without a name/avatar is a separate problem. In essence this is just moving some inline code to a reusable store method.
* | Fix typos and spelling errors. (#8639)Patrick Cloke2020-10-231-1/+1
|/
* Fix modifying events in `ThirdPartyRules` modules (#8564)Richard van der Hoff2020-10-161-1/+6
| | | EventBuilder.build wants auth events these days
* Merge pull request #8535 from matrix-org/rav/third_party_events_updatesRichard van der Hoff2020-10-151-8/+71
|\ | | | | Support modifying event content from ThirdPartyRules modules
| * Allow ThirdPartyRules modules to replace event contentRichard van der Hoff2020-10-131-2/+62
| | | | | | | | Support returning a new event dict from `check_event_allowed`.
| * Move third_party_rules check to event creation timeRichard van der Hoff2020-10-131-8/+11
| | | | | | | | | | Rather than waiting until we handle the event, call the ThirdPartyRules check when we fist create the event.
* | Simplify `_locally_reject_invite`Richard van der Hoff2020-10-131-2/+20
| | | | | | | | | | Update `EventCreationHandler.create_event` to accept an auth_events param, and use it in `_locally_reject_invite` instead of reinventing the wheel.
* | Remove redundant `token_id` parameter to create_eventRichard van der Hoff2020-10-131-5/+3
|/ | | | this is always the same as requester.access_token_id.
* Move additional tasks to the background worker, part 4 (#8513)Patrick Cloke2020-10-131-9/+9
|
* Fix message duplication if something goes wrong after persisting the event ↵Erik Johnston2020-10-131-8/+40
| | | | | (#8476) Should fix #3365.
* Allow modules to create and send events into rooms (#8479)Andrew Morgan2020-10-091-6/+5
| | | | | This PR allows Synapse modules making use of the `ModuleApi` to create and send non-membership events into a room. This can useful to have modules send messages, or change power levels in a room etc. Note that they must send event through a user that's already in the room. The non-membership event limitation is currently arbitrary, as it's another chunk of work and not necessary at the moment.
* Remove the deprecated Handlers object (#8494)Patrick Cloke2020-10-091-2/+2
| | | All handlers now available via get_*_handler() methods on the HomeServer.
* update wordingRichard van der Hoff2020-10-071-2/+3
|
* kill off `send_nonmember_event`Richard van der Hoff2020-10-051-49/+25
| | | | This is now redundant, and we can just call `handle_new_client_event` directly.
* pull up event.sender assertionRichard van der Hoff2020-10-051-4/+4
|
* Move shadow-ban check down into `handle_new_client_event`.Richard van der Hoff2020-10-051-8/+24
|
* De-duplicate duplicate handlingRichard van der Hoff2020-10-051-18/+23
| | | | | move the "duplicate state event" handling down into `handle_new_client_event` where it can be shared between multiple call paths.
* Remove stream ordering from Metadata dict (#8452)Richard van der Hoff2020-10-051-1/+3
| | | | | | | | There's no need for it to be in the dict as well as the events table. Instead, we store it in a separate attribute in the EventInternalMetadata object, and populate that on load. This means that we can rely on it being correctly populated for any event which has been persited to the database.
* Add EventStreamPosition type (#8388)Erik Johnston2020-09-241-3/+3
| | | | | | | | | | | | | | The idea is to remove some of the places we pass around `int`, where it can represent one of two things: 1. the position of an event in the stream; or 2. a token that partitions the stream, used as part of the stream tokens. The valid operations are then: 1. did a position happen before or after a token; 2. get all events that happened before or after a token; and 3. get all events between two tokens. (Note that we don't want to allow other operations as we want to change the tokens to be vector clocks rather than simple ints)
* Factor out `_send_dummy_event_for_room` (#8370)Richard van der Hoff2020-09-231-48/+54
| | | this makes it possible to use from the manhole, and seems cleaner anyway.
* Add experimental support for sharding event persister. Again. (#8294)Erik Johnston2020-09-141-6/+8
| | | | | | This is *not* ready for production yet. Caveats: 1. We should write some tests... 2. The stream token that we use for events can get stalled at the minimum position of all writers. This means that new events may not be processed and e.g. sent down sync streams if a writer isn't writing or is slow.
* Make `StreamToken.room_key` be a `RoomStreamToken` instance. (#8281)Erik Johnston2020-09-111-0/+1
|
* Clean up `Notifier.on_new_room_event` code path (#8288)Erik Johnston2020-09-101-4/+0
| | | | | | | | | | | | | 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.
* Fixup pusher pool notifications (#8287)Erik Johnston2020-09-091-1/+1
| | | | | `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-091-1/+1
| | | | This reverts commit e7fd336a53a4ca489cdafc389b494d5477019dc0.
* Fixup pusher pool notificationsErik Johnston2020-09-091-1/+1
|
* Stop sub-classing object (#8249)Patrick Cloke2020-09-041-2/+2
|
* Revert "Add experimental support for sharding event persister. (#8170)" (#8242)Brendan Abolivier2020-09-041-8/+6
| | | | | | | * Revert "Add experimental support for sharding event persister. (#8170)" This reverts commit 82c1ee1c22a87b9e6e3179947014b0f11c0a1ac3. * Changelog
* Add experimental support for sharding event persister. (#8170)Erik Johnston2020-09-021-6/+8
| | | | | | This is *not* ready for production yet. Caveats: 1. We should write some tests... 2. The stream token that we use for events can get stalled at the minimum position of all writers. This means that new events may not be processed and e.g. sent down sync streams if a writer isn't writing or is slow.
* Convert additional databases to async/await part 2 (#8200)Patrick Cloke2020-09-011-10/+3
|
* Remove unused parameter from, and add safeguard in, get_room_data (#8174)Andrew Morgan2020-08-261-8/+12
| | | | | | Small cleanup PR. * Removed the unused `is_guest` argument * Added a safeguard to a (currently) impossible code path, fixing static checking at the same time.
* Do not allow send_nonmember_event to be called with shadow-banned users. (#8158)Patrick Cloke2020-08-251-5/+34
|
* Stop shadow-banned users from sending non-member events. (#8142)Patrick Cloke2020-08-241-0/+10
|
* Be stricter about JSON that is accepted by Synapse (#8106)Patrick Cloke2020-08-191-2/+3
|
* Convert events worker database to async/await. (#8071)Patrick Cloke2020-08-181-3/+3
|
* Fix the return type of send_nonmember_events. (#8112)Patrick Cloke2020-08-181-1/+1
|
* Return the previous stream token if a non-member event is a duplicate. (#8093)Patrick Cloke2020-08-181-10/+15
|
* Run `remove_push_actions_from_staging` in foreground (#8081)Richard van der Hoff2020-08-131-3/+1
| | | | | | | If we got an error persisting an event, we would try to remove the push actions asynchronously, which would lead to a 'Re-starting finished log context' warning. I don't think there's any need for this to be asynchronous.
* Add type hints to handlers.message and events.builder (#8067)Erik Johnston2020-08-121-9/+13
|
* Add an assertion on prev_events in create_new_client_event (#8041)Richard van der Hoff2020-08-101-0/+9
| | | | | | I think this would have caught all the cases in https://github.com/matrix-org/synapse/issues/7642 - and I think a 500 makes more sense here than a 403
* Convert synapse.api to async/await (#8031)Patrick Cloke2020-08-061-1/+1
|
* Rename database classes to make some sense (#8033)Erik Johnston2020-08-051-1/+1
|
* Remove hacky error handling for inlineDeferreds. (#7950)Patrick Cloke2020-07-271-12/+7
|
* Convert the message handler to async/await. (#7884)Patrick Cloke2020-07-221-136/+152
|
* Convert _base, profile, and _receipts handlers to async/await (#7860)Patrick Cloke2020-07-171-2/+6
|
* Generate real events when we reject invites (#7804)Richard van der Hoff2020-07-091-7/+16
| | | | | | | | Fixes #2181. The basic premise is that, when we fail to reject an invite via the remote server, we can generate our own out-of-band leave event and persist it as an outlier, so that we have something to send to the client.
* Convert directory handler to async/await (#7727)Patrick Cloke2020-06-221-1/+3
|
* Replace all remaining six usage with native Python 3 equivalents (#7704)Dagfinn Ilmari Mannsåker2020-06-161-3/+1
|
* Replace iteritems/itervalues/iterkeys with native versions. (#7692)Patrick Cloke2020-06-151-4/+4
|
* Performance improvements and refactor of Ratelimiter (#7595)Andrew Morgan2020-06-051-1/+0
| | | | | | | | | | While working on https://github.com/matrix-org/synapse/issues/5665 I found myself digging into the `Ratelimiter` class and seeing that it was both: * Rather undocumented, and * causing a *lot* of config checks This PR attempts to refactor and comment the `Ratelimiter` class, as well as encourage config file accesses to only be done at instantiation. Best to be reviewed commit-by-commit.
* Optimise some references to hs.config (#7546)Richard van der Hoff2020-05-221-3/+5
| | | These are surprisingly expensive, and we only really need to do them at startup.
* Add option to move event persistence off master (#7517)Erik Johnston2020-05-221-5/+7
|
* Add ability to wait for replication streams (#7542)Erik Johnston2020-05-221-11/+25
| | | | | | | The idea here is that if an instance persists an event via the replication HTTP API it can return before we receive that event over replication, which can lead to races where code assumes that persisting an event immediately updates various caches (e.g. current state of the room). Most of Synapse doesn't hit such races, so we don't do the waiting automagically, instead we do so where necessary to avoid unnecessary delays. We may decide to change our minds here if it turns out there are a lot of subtle races going on. People probably want to look at this commit by commit.
* Omit displayname or avatar_url if they aren't set instead of returning null ↵Aaron Raimist2020-05-191-2/+6
| | | | | | | | | (#7497) Per https://github.com/matrix-org/matrix-doc/issues/1436#issuecomment-410089470 they should be omitted instead of returning null or "". They aren't marked as required in the spec. Fixes https://github.com/matrix-org/synapse/issues/7333 Signed-off-by: Aaron Raimist <aaron@raim.ist>
* Allow censoring of events to happen on workers. (#7492)Erik Johnston2020-05-131-2/+0
| | | This is safe as we can now write to cache invalidation stream on workers, and is required for when we move event persistence off master.
* Add a configuration setting for the dummy event threshold (#7422)Brendan Abolivier2020-05-071-1/+3
| | | Add dummy_events_threshold which allows configuring the number of forward extremities a room needs for Synapse to send forward extremities in it.
* async/await is_server_admin (#7363)Andrew Morgan2020-05-011-44/+39
|
* Use the proper error code when a canonical alias that does not exist is ↵Patrick Cloke2020-03-231-19/+38
| | | | used. (#7109)
* Don't filter out dummy events when we're checking the visibility of stateBrendan Abolivier2020-03-111-1/+1
|
* Validate the alt_aliases property of canonical alias events (#6971)Patrick Cloke2020-03-031-3/+44
|
* Port PresenceHandler to async/await (#6991)Erik Johnston2020-02-261-3/+2
|
* Add `allow_departed_users` param to `check_in_room_or_world_readable`Richard van der Hoff2020-02-191-4/+8
| | | | | | | ... and set it everywhere it's called. while we're here, rename it for consistency with `check_user_in_room` (and to help check that I haven't missed any instances)
* make FederationHandler.send_invite asyncRichard van der Hoff2020-02-031-3/+2
|
* s/get_room_version/get_room_version_id/Richard van der Hoff2020-01-311-3/+5
| | | | | ... to make way for a forthcoming get_room_version which returns a RoomVersion object.
* Pass room version object into event_auth.check and check_redaction (#6788)Richard van der Hoff2020-01-281-2/+6
| | | | | | | These are easier to work with than the strings and we normally have one around. This fixes `FederationHander._persist_auth_tree` which was passing a RoomVersion object into event_auth.check instead of a string.
* Remove unused hashes and depths from create_event paramsRichard van der Hoff2020-01-061-16/+5
|
* Remove unused hashes and depths from create_new_client_event paramsRichard van der Hoff2020-01-061-12/+14
|
* replace get_prev_events_and_hashes_for_room with get_prev_events_for_room in ↵Richard van der Hoff2020-01-061-9/+3
| | | | create_new_client_event
* rename get_prev_events_for_room to get_prev_events_and_hashes_for_roomRichard van der Hoff2020-01-061-2/+4
| | | | ... to make way for a new method which just returns the event ids
* Change EventContext to use the Storage class (#6564)Erik Johnston2019-12-201-5/+5
|
* Prevent redacted events from appearing in message search (#6377)Andrew Morgan2019-12-111-2/+3
|
* Pull out room_invite_state_types config option once.Erik Johnston2019-12-091-1/+3
| | | | Pulling things out of config is currently surprisingly expensive.
* Add ephemeral messages support (MSC2228) (#6409)Brendan Abolivier2019-12-031-1/+122
| | | | | | | | Implement part [MSC2228](https://github.com/matrix-org/matrix-doc/pull/2228). The parts that differ are: * the feature is hidden behind a configuration flag (`enable_ephemeral_messages`) * self-destruction doesn't happen for state events * only implement support for the `m.self_destruct_after` field (not the `m.self_destruct` one) * doesn't send synthetic redactions to clients because for this specific case we consider the clients to be able to destroy an event themselves, instead we just censor it (by pruning its JSON) in the database
* Discard retention policies when retrieving stateBrendan Abolivier2019-11-281-1/+1
| | | | | | | | Purge jobs don't delete the latest event in a room in order to keep the forward extremity and not break the room. On the other hand, get_state_events, when given an at_token argument calls filter_events_for_client to know if the user can see the event that matches that (sync) token. That function uses the retention policies of the events it's given to filter out those that are too old from a client's view. Some clients, such as Riot, when loading a room, request the list of members for the latest sync token it knows about, and get confused to the point of refusing to send any message if the server tells it that it can't get that information. This can happen very easily with the message retention feature turned on and a room with low activity so that the last event sent becomes too old according to the room's retention policy. An easy and clean fix for that issue is to discard the room's retention policies when retrieving state.
* Implement per-room message retention policiesBrendan Abolivier2019-11-041-2/+2
|
* Update black to 19.10b0 (#6304)Amber Brown2019-11-011-6/+8
| | | * 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-311-4/+6
|\ | | | | Add StateGroupStorage interface
| * Port to use state storageErik Johnston2019-10-301-4/+6
| |
* | Remove usage of deprecated logger.warn method from codebase (#6271)Andrew Morgan2019-10-311-1/+1
|/ | | Replace every instance of `logger.warn` with `logger.warning` as the former is deprecated.
* Use new EventPersistenceStoreErik Johnston2019-10-231-1/+2
|
* Fix dummy event insertion consent bug (#6053)Neil Johnson2019-09-261-27/+72
| | | Fixes #5905
* Fix commentsErik Johnston2019-09-111-1/+1
| | | Co-Authored-By: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com>
* Fix how we check for self redactionErik Johnston2019-09-111-4/+18
|
* Allow use of different ratelimits for admin redactions.Erik Johnston2019-09-111-1/+7
| | | | | This is useful to allow room admins to quickly deal with a large number of abusive messages.
* Apply suggestions from code reviewWill Hunt2019-08-231-2/+2
| | | Co-Authored-By: Erik Johnston <erik@matrix.org>
* Exempt bot usersHalf-Shot2019-08-231-1/+1
|
* Return user_type in get_user_by_idHalf-Shot2019-08-231-1/+4
|
* Deny redaction of events in a different room.Erik Johnston2019-07-311-1/+3
| | | | | We already correctly filter out such redactions, but we should also deny them over the CS API.
* Stop trying to fetch events with event_id=None. (#5753)Richard van der Hoff2019-07-241-1/+7
| | | | | | | `None` is not a valid event id, so queuing up a database fetch for it seems like a silly thing to do. I considered making `get_event` return `None` if `event_id is None`, but then its interaction with `allow_none` seemed uninituitive, and strong typing ftw.
* Replace returnValue with return (#5736)Amber Brown2019-07-231-17/+15
|
* Ignore redactions of m.room.create events (#5701)Richard van der Hoff2019-07-171-9/+24
|
* Move logging utilities out of the side drawer of util/ and into logging/ (#5606)Amber Brown2019-07-041-1/+1
|
* Run Black. (#5482)Amber Brown2019-06-201-158/+100
|
* Run as background process and fix commentsErik Johnston2019-06-191-2/+5
|
* Add experimental option to reduce extremities.Erik Johnston2019-06-181-1/+71
| | | | | | | Adds new config option `cleanup_extremities_with_dummy_events` which periodically sends dummy events to rooms with more than 10 extremities. THIS IS REALLY EXPERIMENTAL.
* Add plugin APIs for implementations of custom event rules.Brendan Abolivier2019-06-141-2/+12
|
* Merge pull request #5220 from matrix-org/erikj/dont_bundle_live_eventsErik Johnston2019-05-241-0/+3
|\ | | | | Don't bundle aggregations with events in /sync or /events or state queries
| * Don't bundle aggs for /state and /members etc APIsErik Johnston2019-05-241-0/+3
| |
* | Fix wordsErik Johnston2019-05-211-3/+3
| |
* | Block attempts to annotate the same event twiceErik Johnston2019-05-201-1/+15
|/
* Allow client event serialization to be asyncErik Johnston2019-05-141-3/+4
|
* Do checks on aliases for incoming m.room.aliases events (#5128)Brendan Abolivier2019-05-081-0/+30
| | | | | Follow-up to #5124 Also added a bunch of checks to make sure everything (both the stuff added on #5124 and this PR) works as intended.
* Fix grammar and document get_current_users_in_room (#4998)Andrew Morgan2019-04-031-1/+1
|
* Collect room-version variations into one place (#4969)Richard van der Hoff2019-04-011-2/+5
| | | | Collect all the things that make room-versions different to one another into one place, so that it's easier to define new room versions.
* Revert spurious deleteErik Johnston2019-03-201-0/+4
|
* Use flagsErik Johnston2019-03-201-13/+5
|
* Move requester check into assert_accepted_privacy_policyErik Johnston2019-03-201-5/+8
|
* Only require consent for events with an associated requestErik Johnston2019-03-201-1/+5
| | | | | | | | | There are a number of instances where a server or admin may puppet a user to join/leave rooms, which we don't want to fail if the user has not consented to the privacy policy. We fix this by adding a check to test if the requester has an associated access_token, which is used as a proxy to answer the question of whether the action is being done on behalf of a real request from the user.
* fix test_auto_create_auto_join_where_no_consent (#4886)Neil Johnson2019-03-191-3/+10
|
* Fix incorrect log about not persisting duplicate state event. (#4776)Richard van der Hoff2019-03-011-3/+4
| | | We were logging this when it was not true.
* Merge branch 'develop' of github.com:matrix-org/synapse into ↵Erik Johnston2019-01-291-28/+6
|\ | | | | | | erikj/redactions_eiah
| * Correctly set context.app_serviceErik Johnston2019-01-291-0/+2
| |
| * Refactor event building into EventBuilderErik Johnston2019-01-291-29/+5
| | | | | | | | | | This is so that everything is done in one place, making it easier to change the event format based on room version
* | Implement rechecking of redactionsErik Johnston2019-01-291-1/+5
|/
* Merge pull request #4494 from matrix-org/erikj/fixup_event_validatorErik Johnston2019-01-291-1/+3
|\ | | | | Split up event validation between event and builder
| * Split up event validation between event and builderErik Johnston2019-01-281-1/+3
| | | | | | | | | | | | | | | | | | The validator was being run on the EventBuilder objects, and so the validator only checked a subset of fields. With the upcoming EventBuilder refactor even fewer fields will be there to validate. To get around this we split the validation into those that can be run against an EventBuilder and those run against a fully fledged event.
* | Correctly use default room version if none is setErik Johnston2019-01-281-2/+2
| |
* | Pass through room version to event authErik Johnston2019-01-251-1/+6
|/
* Require event format version to parse or create eventsErik Johnston2019-01-251-1/+9
|
* Revert "Require event format version to parse or create events"Erik Johnston2019-01-251-9/+1
|
* Require event format version to parse or create eventsErik Johnston2019-01-231-1/+9
|
* Log some bits about event creation (#4121)Richard van der Hoff2018-10-311-0/+3
| | | | I found these helpful in debugging my room upgrade tests.
* Refactor state group lookup to reduce DB hits (#4011)Erik Johnston2018-10-251-12/+8
| | | | | | | | Currently when fetching state groups from the data store we make two hits two the database: once for members and once for non-members (unless request is filtered to one or the other). This adds needless load to the datbase, so this PR refactors the lookup to make only a single database hit.
* Remove redundant run_as_background_process() from pusherpoolRichard van der Hoff2018-10-221-1/+1
| | | | | | | `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.
* Avoid reraise, to improve stacktracesRichard van der Hoff2018-10-011-12/+13
|
* Merge pull request #3710 from matrix-org/rav/logcontext_for_pusher_updatesRichard van der Hoff2018-08-171-5/+2
|\ | | | | Fix logcontexts for running pushers
| * Fix logcontexts for running pushersRichard van der Hoff2018-08-171-5/+2
| | | | | | | | | | | | | | 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.
* | block event creation and room creation on hitting resource limitsNeil Johnson2018-08-161-1/+5
|/
* speed up /members and add at= and membership params (#3568)Matthew Hodgson2018-08-151-12/+76
|
* Rename async to async_helpers because `async` is a keyword on Python 3.7 (#3678)Amber Brown2018-08-101-1/+1
|
* Use new helper base class for ReplicationSendEventRestServletErik Johnston2018-07-311-7/+4
|
* Merge branch 'develop' into erikj/client_apis_moveErik Johnston2018-07-241-12/+19
|\
| * Fix missing attributes on workers.Erik Johnston2018-07-231-2/+3
| | | | | | | | | | This was missed during the transition from attribute to getter for getting state from context.
| * Use new gettersErik Johnston2018-07-231-10/+16
| |
* | Merge branch 'develop' of github.com:matrix-org/synapse into ↵Erik Johnston2018-07-231-2/+2
|\| | | | | | | erikj/client_apis_move
| * Combine Limiter and LinearizerRichard van der Hoff2018-07-201-2/+2
| | | | | | | | | | Linearizer was effectively a Limiter with max_count=1, so rather than maintaining two sets of code, let's combine them.
| * Improvements to the LimiterRichard van der Hoff2018-07-201-1/+1
| | | | | | | | | | * give them names, to improve logging * use a deque rather than a list for efficiency
* | Move PaginationHandler to its own fileErik Johnston2018-07-201-240/+2
| |
* | Move check_in_room_or_world_readable to AuthErik Johnston2018-07-201-34/+6
| |
* | Split MessageHandler into read only and writersErik Johnston2018-07-181-131/+150
|/ | | | | This will let us call the read only parts from workers, and so be able to move some APIs off of master, e.g. the `/state` API.
* s/becuase/because/gMatthew Hodgson2018-07-101-1/+1
|
* run isortAmber Brown2018-07-091-13/+10
|
* Attempt to be more performant on PyPy (#3462)Amber Brown2018-06-281-3/+2
|
* allow non-consented users to still part rooms (to let us autopart them)Matthew Hodgson2018-06-251-2/+6
|
* Remove all global reactor imports & pass it around explicitly (#3424)Amber Brown2018-06-251-2/+2
|
* Pass around the reactor explicitly (#3385)Amber Brown2018-06-221-0/+1
|
* Remove run_on_reactor (#3395)Amber Brown2018-06-141-3/+1
|
* Exempt AS-registered users from doing gdprRichard van der Hoff2018-05-291-0/+3
|
* Misc. py3 fixesAdrian Tschira2018-05-241-4/+5
| | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
* Merge branch 'release-v0.30.0' into rav/localpart_in_consent_uriRichard van der Hoff2018-05-231-1/+4
|\
| * Support for putting %(consent_uri)s in messagesRichard van der Hoff2018-05-231-1/+4
| | | | | | | | | | Make it possible to put the URI in the error message and the server notice that get sent by the server
* | Use the localpart in the consent uriRichard van der Hoff2018-05-231-1/+3
|/ | | | ... because it's shorter.
* Reject attempts to send event before privacy consent is givenRichard van der Hoff2018-05-221-1/+85
| | | | | | Returns an M_CONSENT_NOT_GIVEN error (cf https://github.com/matrix-org/matrix-doc/issues/1252) if consent is not yet given.
* Make purge_history operate on tokensErik Johnston2018-05-151-6/+6
| | | | As we're soon going to change how topological_ordering works
* Merge branch 'release-v0.28.1' into developRichard van der Hoff2018-05-011-1/+5
|\
| * Apply some limits to depth to counter abuseRichard van der Hoff2018-05-011-1/+5
| | | | | | | | | | | | | | * When creating a new event, cap its depth to 2^63 - 1 * When receiving events, reject any without a sensible depth As per https://docs.google.com/document/d/1I3fi2S-XnpO45qrpCsowZv8P8dHcNZ4fsBsbOW7KABI
* | pep8; remove spurious importRichard van der Hoff2018-04-271-1/+1
| |
* | Merge remote-tracking branch 'origin/develop' into rav/use_run_in_backgroundRichard van der Hoff2018-04-271-13/+30
|\ \
| * \ Merge pull request #3142 from matrix-org/rav/reraiseRichard van der Hoff2018-04-271-7/+14
| |\ \ | | | | | | | | reraise exceptions more carefully
| | * | reraise exceptions more carefullyRichard van der Hoff2018-04-271-7/+14
| | |/ | | | | | | | | | | | | | | | | | | We need to be careful (under python 2, at least) that when we reraise an exception after doing some error handling, we actually reraise the original exception rather than anything that might have been raised (and handled) during the error handling.
| * / Improve exception handling for background processesRichard van der Hoff2018-04-271-6/+16
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* / Use run_in_background in preference to preserve_fnRichard van der Hoff2018-04-271-2/+3
|/ | | | | | 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.
* Avoid creating events with huge numbers of prev_eventsRichard van der Hoff2018-04-161-34/+44
| | | | | | In most cases, we limit the number of prev_events for a given event to 10 events. This fixes a particular code path which created events with huge numbers of prev_events.
* Note why we're limiting concurrent event sendsErik Johnston2018-04-101-0/+5
|
* Limit concurrent event sends for a roomErik Johnston2018-04-091-49/+50
|
* Use static JSONEncodersRichard van der Hoff2018-03-291-2/+2
| | | | | using json.dumps with custom options requires us to create a new JSONEncoder on each call. It's more efficient to create one upfront and reuse it.
* Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2018-03-191-3/+3
|\
| * Replace ujson with simplejsonErik Johnston2018-03-151-3/+3
| |
* | extra_users is actually a list of UserIDsErik Johnston2018-03-131-1/+1
| |
* | Add transactional API to history purgeRichard van der Hoff2018-03-121-5/+99
| | | | | | | | Make the purge request return quickly, and allow scripts to poll for updates.
* | Return an error when doing two purges on a roomRichard van der Hoff2018-03-121-3/+14
| | | | | | | | Queuing up purges doesn't sound like a good thing.
* | Provide a means to pass a timestamp to purge_historyRichard van der Hoff2018-03-051-9/+5
| |
* | Check event auth on the workerErik Johnston2018-03-011-16/+16
| |
* | Correctly send ratelimit and extra_users paramsErik Johnston2018-03-011-0/+2
| |
* | Fixup commentsErik Johnston2018-03-011-4/+4
| |
* | Calculate push actions on workerErik Johnston2018-02-281-25/+61
| |
* | Ensure that we delete staging push actions on errorsErik Johnston2018-02-151-3/+9
| |
* | Merge pull request #2854 from matrix-org/erikj/event_create_workerErik Johnston2018-02-131-6/+22
|\ \ | | | | | | Create a worker for event creation
| * | Move presence handling into handle_new_client_eventErik Johnston2018-02-071-6/+6
| | | | | | | | | | | | As we want to have it run on the main synapse instance
| * | Add replication http endpoint for event sendingErik Johnston2018-02-071-0/+16
| | |
* | | Merge pull request #2858 from matrix-org/rav/purge_updatesRichard van der Hoff2018-02-091-2/+2
|\ \ \ | |/ / |/| | delete_local_events for purge_room_history
| * | delete_local_events for purge_historyRichard van der Hoff2018-02-091-2/+2
| | | | | | | | | | | | Add a flag which makes the purger delete local events
| * | rename delete_old_state -> purge_historyRichard van der Hoff2018-02-091-1/+1
| |/ | | | | | | (beacause it deletes more than state)
* | Remove pointless ratelimit checkErik Johnston2018-02-071-5/+0
| | | | | | | | | | | | The intention was for the check to be called as early as possible in the request, but actually was called just before the main ratelimit check, so was fairly pointless.
* | Update copyrightErik Johnston2018-02-061-1/+1
| |
* | s/_create_new_client_event/create_new_client_event/Erik Johnston2018-02-061-3/+3
| |
* | Split event creation into a separate handlerErik Johnston2018-02-051-146/+160
|/
* replace 'except:' with 'except Exception:'Richard van der Hoff2017-10-231-1/+1
| | | | what could possibly go wrong
* fix isinstanceDavid Baker2017-10-111-1/+1
|
* Allow error strings from spam checkerDavid Baker2017-10-111-2/+6
|
* Merge pull request #2466 from matrix-org/erikj/groups_mergedErik Johnston2017-10-111-1/+2
|\ | | | | Initial Group Implementation
| * Merge branch 'develop' into erikj/groups_mergedDavid Baker2017-10-021-1/+53
| |\
| * | Split out profile handler to fix testsErik Johnston2017-08-251-1/+2
| | |
* | | Merge pull request #2483 from jeremycline/unfreeze-ujson-dumpErik Johnston2017-10-111-1/+2
|\ \ \ | |_|/ |/| | Unfreeze event before serializing with ujson
| * | Unfreeze event before serializing with ujsonJeremy Cline2017-09-301-1/+2
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In newer versions of https://github.com/esnme/ultrajson, ujson does not serialize frozendicts (introduced in esnme/ultrajson@53f85b1). Although the PyPI version is still 1.35, Fedora ships with a build from commit esnme/ultrajson@2f1d487. This causes the serialization to fail if the distribution-provided package is used. This runs the event through the unfreeze utility before serializing it. Thanks to @ignatenkobrain for tracking down the root cause. fixes #2351 Signed-off-by: Jeremy Cline <jeremy@jcline.org>
* | Fix /joined_members to work with AS usersErik Johnston2017-09-281-11/+25
| |
* | Fix bug where /joined_members didn't check user was in roomErik Johnston2017-09-271-0/+31
| |
* | Make the spam checker a moduleDavid Baker2017-09-261-2/+3
| |
* | PoC for filtering spammy events (#2456)Richard van der Hoff2017-09-191-1/+7
|/ | | Demonstration of how you might add some hooks to filter out spammy events.
* Fix bug where pusherpool didn't start and broke some roomsErik Johnston2017-07-061-1/+3
| | | | | | | | Since we didn't instansiate the PusherPool at start time it could fail at run time, which it did for some users. This may or may not fix things for those users, but it should happen at start time and stop the server from starting.
* Remove unused variablesErik Johnston2017-06-261-1/+1
|
* Reject local events that don't round trip the DBErik Johnston2017-06-191-0/+9
|
* Store ActionGenerator in HomeServerErik Johnston2017-05-191-2/+1
|
* Faster push rule calculation via push specific cacheErik Johnston2017-05-171-2/+3
| | | | | We add a push rule specific cache that ensures that we can reuse calculated push rules appropriately when a user join/leaves.
* Add per user ratelimiting overridesErik Johnston2017-05-101-13/+3
|
* Add more granular event send metricsErik Johnston2017-05-021-2/+8
|
* Fix invite state to always include all eventsErik Johnston2017-04-261-6/+3
|
* Remove spurious yieldRichard van der Hoff2017-04-031-1/+1
| | | | | In `MessageHandler`, remove `yield` on call to `Notifier.on_new_room_event`: it doesn't return anything anyway.
* Don't clobber a displayname or avatar_url if provided by an m.room.member eventPaul "LeoNerd" Evans2017-01-241-2/+4
|
* CommentErik Johnston2017-01-101-0/+2
|
* Don't block messages sending on bumping presenceErik Johnston2017-01-101-1/+1
|
* Merge pull request #1620 from matrix-org/erikj/concurrent_room_accessErik Johnston2016-12-121-27/+33
|\ | | | | Limit the number of events that can be created on a given room concurrently
| * CommentsErik Johnston2016-11-111-0/+2
| |
| * Limit the number of events that can be created on a given room concurretnlyErik Johnston2016-11-101-27/+31
| |
* | Handle sending events and device messages over federationErik Johnston2016-11-171-12/+1
|/
* Sample correctlyErik Johnston2016-11-081-1/+3
|
* Limit the number of prev_events of new eventsErik Johnston2016-11-081-0/+13
|
* Fix incredubly slow back pagination queryErik Johnston2016-10-241-2/+2
| | | | | | | If a client didn't specify a from token when paginating backwards synapse would attempt to query the (global) maximum topological token. This a) doesn't make much sense since they're room specific and b) there are no indices that lets postgres do this efficiently.
* CommentErik Johnston2016-10-191-0/+3
|
* Check whether to ratelimit sooner to avoid workErik Johnston2016-10-191-1/+13
|
* Support /initialSync in synchrotron workerErik Johnston2016-09-211-378/+3
|
* Use get_joined_users_from_context instead of manually looking up hostsErik Johnston2016-09-051-38/+6
|
* Correctly handle the difference between prev and current stateErik Johnston2016-08-311-5/+5
|
* Replace context.current_state with context.current_state_idsErik Johnston2016-08-251-22/+69
|
* Preserve some logcontextsErik Johnston2016-08-241-15/+20
|
* Add filter param to /messages APIErik Johnston2016-07-141-4/+12
|
* Add ReadWriteLock for pagination and history pruneErik Johnston2016-07-051-34/+36
|
* Add purge_history APIErik Johnston2016-07-051-0/+13
|
* Poke notifier on next reactor tickErik Johnston2016-06-031-4/+7
|
* Merge pull request #787 from matrix-org/markjh/liberate_presence_handlerMark Haines2016-05-171-2/+2
|\ | | | | Move the presence handler out of the Handlers object
| * Move the presence handler out of the Handlers objectMark Haines2016-05-161-2/+2
| |
* | Spell "domain" correctlyMark Haines2016-05-161-2/+2
|/ | | | s/domian/domain/g
* move filter_events_for_client out of base handlerMark Haines2016-05-111-8/+10
|
* Shuffle when we get the signing_key attribute.Mark Haines2016-05-111-2/+2
| | | | | | | | Wait until we sign a message to get the signing key from the homeserver config. This means that the message handler can be created without having a signing key in the config which means that separate processes like the pusher that don't send messages and don't need to sign them can still access the handlers.
* Move _create_new_client_event and handle_new_client_event out of base handlerMark Haines2016-05-111-2/+197
|
* Run filter_events_for_clientDavid Baker2016-04-271-4/+4
| | | | so we don't accidentally mail out events people shouldn't see
* Remove some unused functions (#711)Mark Haines2016-04-081-29/+0
| | | | | | | | * Remove some unused functions * get_room_events_stream is only used in tests * is_exclusive_room might actually be something we want
* Call profile handler get_displayname directly rather than using ↵Mark Haines2016-04-071-9/+1
| | | | collect_presencelike_data
* Use computed prev event idsErik Johnston2016-04-011-1/+5
|
* Add concurrently_execute functionErik Johnston2016-04-011-8/+2
|
* Merge pull request #618 from matrix-org/markjh/pushrule_streamMark Haines2016-03-041-2/+2
|\ | | | | Add a stream for push rule updates