Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Run Black. (#5482) | Amber Brown | 2019-06-20 | 1 | -5/+5 |
| | |||||
* | Make all the rate limiting options more consistent (#5181) | Amber Brown | 2019-05-15 | 1 | -2/+2 |
| | |||||
* | Use flags | Erik Johnston | 2019-03-20 | 1 | -0/+1 |
| | |||||
* | Add rate-limiting on registration (#4735) | Brendan Abolivier | 2019-03-05 | 1 | -2/+2 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Rate-limiting for registration * Add unit test for registration rate limiting * Add config parameters for rate limiting on auth endpoints * Doc * Fix doc of rate limiting function Co-Authored-By: babolivier <contact@brendanabolivier.com> * Incorporate review * Fix config parsing * Fix linting errors * Set default config for auth rate limiting * Fix tests * Add changelog * Advance reactor instead of mocked clock * Move parameters to registration specific config and give them more sensible default values * Remove unused config options * Don't mock the rate limiter un MAU tests * Rename _register_with_store into register_with_store * Make CI happy * Remove unused import * Update sample config * Fix ratelimiting test for py2 * Add non-guest test | ||||
* | Fix kicking guest users in worker mode | Erik Johnston | 2019-02-18 | 1 | -1/+1 |
| | | | | | | | | When guest_access changes from allowed to forbidden all local guest users should be kicked from the room. This did not happen when revocation was received from federation on a worker. Presumably broken in #4141 | ||||
* | Use new getters | Erik Johnston | 2018-07-23 | 1 | -1/+2 |
| | |||||
* | run isort | Amber Brown | 2018-07-09 | 1 | -2/+1 |
| | |||||
* | Consistently use six's iteritems and wrap lazy keys/values in list() if ↵ | Amber Brown | 2018-05-31 | 1 | -2/+2 |
| | | | | they're not meant to be lazy (#3307) | ||||
* | Move RoomMemberHandler out of Handlers | Erik Johnston | 2018-03-01 | 1 | -1/+1 |
| | |||||
* | Add per user ratelimiting overrides | Erik Johnston | 2017-05-10 | 1 | -3/+31 |
| | |||||
* | Insert delta of current_state_events to be more efficient | Erik Johnston | 2017-01-20 | 1 | -2/+6 |
| | |||||
* | as_user->app_service, less redundant comments, better positioned comments | Luke Barnard | 2016-10-20 | 1 | -6/+3 |
| | |||||
* | Use real AS object by passing it through the requester | Luke Barnard | 2016-10-20 | 1 | -8/+3 |
| | | | | This means synapse does not have to check if the AS is interested, but instead it effectively re-uses what it already knew about the requesting user | ||||
* | Allow Configurable Rate Limiting Per AS | Luke Barnard | 2016-10-18 | 1 | -0/+14 |
| | | | | This adds a flag loaded from the registration file of an AS that will determine whether or not its users are rate limited (by ratelimit in _base.py). Needed for IRC bridge reasons - see https://github.com/matrix-org/matrix-appservice-irc/issues/240. | ||||
* | handers: do not ratelimit app service senders | Patrik Oldsberg | 2016-10-06 | 1 | -1/+7 |
| | | | | Signed-off-by: Patrik Oldsberg <patrik.oldsberg@ericsson.com> | ||||
* | Replace context.current_state with context.current_state_ids | Erik Johnston | 2016-08-25 | 1 | -21/+9 |
| | |||||
* | Add `create_requester` function | Richard van der Hoff | 2016-07-26 | 1 | -6/+7 |
| | | | | | Wrap the `Requester` constructor with a function which provides sensible defaults, and use it throughout | ||||
* | Type annotations | Richard van der Hoff | 2016-07-19 | 1 | -0/+4 |
| | | | | | Add some type annotations to help PyCharm (in particular) to figure out the types of a bunch of things. | ||||
* | Fix a doc-comment | Richard van der Hoff | 2016-07-18 | 1 | -1/+1 |
| | | | | The `store` in a handler is a generic DataStore, not just an events.StateStore. | ||||
* | move filter_events_for_client out of base handler | Mark Haines | 2016-05-11 | 1 | -184/+0 |
| | |||||
* | Move _create_new_client_event and handle_new_client_event out of base handler | Mark Haines | 2016-05-11 | 1 | -195/+3 |
| | |||||
* | Merge pull request #759 from matrix-org/dbkr/email_notifs | Matthew Hodgson | 2016-05-10 | 1 | -1/+1 |
|\ | | | | | Send email notifications for missed messages | ||||
| * | Merge remote-tracking branch 'origin/develop' into dbkr/email_notifs | David Baker | 2016-05-10 | 1 | -5/+3 |
| |\ | |||||
| * | | Run filter_events_for_client | David Baker | 2016-04-27 | 1 | -1/+1 |
| | | | | | | | | | | | | so we don't accidentally mail out events people shouldn't see | ||||
* | | | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/ignore_user | Erik Johnston | 2016-05-09 | 1 | -5/+3 |
|\ \ \ | | |/ | |/| | |||||
| * | | Add and use get_domian_from_id | Erik Johnston | 2016-05-09 | 1 | -5/+3 |
| |/ | |||||
* | | Add bulk fetch storage API | Erik Johnston | 2016-05-05 | 1 | -7/+3 |
| | | |||||
* | | Implement basic ignore user | Erik Johnston | 2016-05-04 | 1 | -3/+23 |
|/ | |||||
* | Don't auto log failed auth checks | Erik Johnston | 2016-04-13 | 1 | -1/+5 |
| | |||||
* | Merge remote-tracking branch 'origin/develop' into ↵ | David Baker | 2016-04-07 | 1 | -11/+40 |
|\ | | | | | | | dbkr/pushers_use_event_actions | ||||
| * | Let users see their own leave events | Richard van der Hoff | 2016-04-06 | 1 | -11/+40 |
| | | | | | | | | | | | | | | ... otherwise clients get confused. Fixes https://matrix.org/jira/browse/SYN-662, https://github.com/vector-im/vector-web/issues/368 | ||||
* | | Make pushers use the event_push_actions table instead of listening on an ↵ | David Baker | 2016-04-06 | 1 | -1/+7 |
|/ | | | | | | | event stream & running the rules again. Sytest passes, but remaining to do: * Make badges work again * Remove old, unused code | ||||
* | Merge pull request #689 from matrix-org/erikj/member | Erik Johnston | 2016-04-04 | 1 | -55/+17 |
|\ | | | | | Do checks for memberships before creating events | ||||
| * | Use computed prev event ids | Erik Johnston | 2016-04-01 | 1 | -12/+17 |
| | | |||||
| * | Remove state hack from _create_new_client_event | Erik Johnston | 2016-04-01 | 1 | -43/+0 |
| | | |||||
* | | Merge pull request #686 from matrix-org/markjh/doc_strings | Mark Haines | 2016-04-01 | 1 | -11/+16 |
|\ \ | |/ |/| | Use google style doc strings. | ||||
| * | Use google style doc strings. | Mark Haines | 2016-04-01 | 1 | -11/+16 |
| | | | | | | | | | | | | | | pycharm supports them so there is no need to use the other format. Might as well convert the existing strings to reduce the risk of people accidentally cargo culting the wrong doc string format. | ||||
* | | Remove outlier parameter from compute_event_context | Mark Haines | 2016-03-31 | 1 | -2/+1 |
|/ | | | | Use event.internal_metadata.is_outlier instead. | ||||
* | Send history visibility on boundary changes | Erik Johnston | 2016-03-04 | 1 | -0/+26 |
| | |||||
* | Merge pull request #598 from Rugvip/invite-state | Erik Johnston | 2016-03-04 | 1 | -6/+2 |
|\ | | | | | config,handlers/_base: added homeserver config for what state is included in a room invite | ||||
| * | config,handlers/_base: added homeserver config for what state is included in ↵ | Patrik Oldsberg | 2016-03-04 | 1 | -6/+2 |
| | | | | | | | | | | | | a room invite Signed-off-by: Patrik Oldsberg <patrik.oldsberg@ericsson.com> | ||||
* | | Merge pull request #596 from Rugvip/create | Erik Johnston | 2016-03-04 | 1 | -0/+6 |
|\ \ | |/ |/| | handlers/_base: don't allow room create event to be changed | ||||
| * | handlers/_base: don't allow room create event to be changed | Patrik Oldsberg | 2016-02-23 | 1 | -0/+6 |
| | | | | | | | | Signed-off-by: Patrik Oldsberg <patrik.oldsberg@ericsson.com> | ||||
* | | Merge remote-tracking branch 'origin/develop' into rav/SYN-642 | Richard van der Hoff | 2016-03-03 | 1 | -4/+11 |
|\ \ | |||||
| * | | Pass whole requester to ratelimiting | Daniel Wagner-Hall | 2016-03-03 | 1 | -4/+11 |
| | | | | | | | | | | | | This will enable more detailed decisions | ||||
* | | | fix pyflakes quibble | Richard van der Hoff | 2016-03-02 | 1 | -1/+2 |
| | | | |||||
* | | | Address review comments | Richard van der Hoff | 2016-03-02 | 1 | -6/+14 |
| | | | |||||
* | | | Fix pyflakes warning | Richard van der Hoff | 2016-03-01 | 1 | -1/+1 |
| | | | |||||
* | | | Handle rejections of invites from local users locally | Richard van der Hoff | 2016-03-01 | 1 | -3/+13 |
|/ / | | | | | | | | | Slightly hacky fix to SYN-642, which avoids the federation codepath when trying to reject invites from local users. | ||||
* / | Send the invier's member event in room invite state so the invitee has their ↵ | David Baker | 2016-02-25 | 1 | -1/+7 |
|/ | | | | display name and avatar. | ||||
* | address review comments | Richard van der Hoff | 2016-02-22 | 1 | -7/+2 |
| | | | | drop commented-out special casing for historyvisibility event s/he/they/ for users | ||||
* | Interpret unknown visibilities the same as shared | Richard van der Hoff | 2016-02-19 | 1 | -11/+13 |
| | |||||
* | Merge branch 'develop' into rav/guest_access_after_room_join | Richard van der Hoff | 2016-02-19 | 1 | -17/+64 |
|\ | |||||
| * | Review comments | Daniel Wagner-Hall | 2016-02-18 | 1 | -1/+2 |
| | | |||||
| * | Respond to federated invite with non-empty context | Daniel Wagner-Hall | 2016-02-17 | 1 | -2/+49 |
| | | | | | | | | | | | | | | Currently, we magically perform an extra database hit to find the inviter, and use this to guess where we should send the event. Instead, fill in a valid context, so that other callers relying on the context actually have one. | ||||
| * | Use update_membership to kick guests | Daniel Wagner-Hall | 2016-02-15 | 1 | -14/+10 |
| | | |||||
| * | Merge implementation of /join by alias or ID | Daniel Wagner-Hall | 2016-02-15 | 1 | -1/+4 |
| | | | | | | | | | | This code is kind of rough (passing the remote servers down a long chain), but is a step towards improvement. | ||||
* | | Allow guest users access to messages in rooms they have joined | Richard van der Hoff | 2016-02-19 | 1 | -11/+41 |
|/ | | | | | | | There should be no difference between guest users and non-guest users in terms of access to messages. Define the semantics of the is_peeking argument to filter_events_for_clients (slightly) better; interpret it appropriately, and set it correctly from /sync. | ||||
* | Atomically persit push actions when we persist the event | Erik Johnston | 2016-02-09 | 1 | -5/+5 |
| | |||||
* | Pass in current state to push action handler | Erik Johnston | 2016-02-09 | 1 | -18/+13 |
| | |||||
* | Fix up logcontexts | Erik Johnston | 2016-02-08 | 1 | -9/+1 |
| | |||||
* | Fix flake8 warnings for new flake8 | Daniel Wagner-Hall | 2016-02-02 | 1 | -1/+1 |
| | |||||
* | Allow non-guests to peek on rooms using /events | Daniel Wagner-Hall | 2016-01-20 | 1 | -7/+7 |
| | |||||
* | Don't use form of get_state_for_events with None state_key | Erik Johnston | 2016-01-19 | 1 | -6/+13 |
| | |||||
* | Add regex cache. Only caculate push actions for users that have sent read ↵ | Erik Johnston | 2016-01-19 | 1 | -1/+1 |
| | | | | receipts, and are on that server | ||||
* | Allow filtering events for multiple users at once | Erik Johnston | 2016-01-18 | 1 | -39/+54 |
| | |||||
* | Remove unused parameters | Daniel Wagner-Hall | 2016-01-15 | 1 | -5/+3 |
| | |||||
* | Add is_guest flag to users db to track whether a user is a guest user or ↵ | David Baker | 2016-01-06 | 1 | -5/+3 |
| | | | | not. Use this so we can run _filter_events_for_client when calculating event_push_actions. | ||||
* | Merge remote-tracking branch 'origin/develop' into store_event_actions | David Baker | 2016-01-05 | 1 | -14/+2 |
|\ | |||||
| * | Skip, rather than erroring, invalid guest requests | Daniel Wagner-Hall | 2016-01-05 | 1 | -14/+2 |
| | | | | | | | | | | | | | | | | | | | | Erroring causes problems when people make illegal requests, because they don't know what limit parameter they should pass. This is definitely buggy. It leaks message counts for rooms people don't have permission to see, via tokens. But apparently we already consciously decided to allow that as a team, so this preserves that behaviour. | ||||
* | | Address minor PR issues | David Baker | 2016-01-04 | 1 | -2/+2 |
| | | |||||
* | | Only run pushers for users on this hs! | David Baker | 2015-12-21 | 1 | -1/+1 |
| | | |||||
* | | Very first cut of calculating actions for events as they come in. Doesn't ↵ | David Baker | 2015-12-10 | 1 | -0/+8 |
|/ | | | | store them yet. Not very efficient. | ||||
* | Simplify code | Daniel Wagner-Hall | 2015-11-19 | 1 | -1/+1 |
| | |||||
* | Apply forgetting properly to historical events | Daniel Wagner-Hall | 2015-11-18 | 1 | -1/+9 |
| | |||||
* | Update some comments | Richard van der Hoff | 2015-11-13 | 1 | -0/+6 |
| | | | | | | | Add a couple of type annotations, docstrings, and other comments, in the interest of keeping track of what types I have. Merged from pull request #370. | ||||
* | Allow guest users to join and message rooms | Daniel Wagner-Hall | 2015-11-10 | 1 | -0/+57 |
| | |||||
* | Exchange 3pid invites for m.room.member invites | Daniel Wagner-Hall | 2015-11-05 | 1 | -11/+0 |
| | |||||
* | Open up /events to anonymous users for room events only | Daniel Wagner-Hall | 2015-11-05 | 1 | -2/+5 |
| | | | | Squash-merge of PR #345 from daniel/anonymousevents | ||||
* | Allow guests to register and call /events?room_id= | Daniel Wagner-Hall | 2015-11-04 | 1 | -28/+47 |
| | | | | | | | This follows the same flows-based flow as regular registration, but as the only implemented flow has no requirements, it auto-succeeds. In the future, other flows (e.g. captcha) may be required, so clients should treat this like the regular registration flow choices. | ||||
* | Merge pull request #302 from matrix-org/daniel/3pidinvites | Daniel Wagner-Hall | 2015-10-16 | 1 | -0/+11 |
|\ | | | | | Implement third party identifier invites | ||||
| * | Remove unnecessary class-wrapping | Daniel Wagner-Hall | 2015-10-13 | 1 | -3/+3 |
| | | |||||
| * | Move event contents into third_party_layout field | Daniel Wagner-Hall | 2015-10-13 | 1 | -1/+1 |
| | | |||||
| * | Remove merge thinko | Daniel Wagner-Hall | 2015-10-06 | 1 | -4/+0 |
| | | |||||
| * | Merge branch 'develop' into daniel/3pidinvites | Daniel Wagner-Hall | 2015-10-05 | 1 | -0/+26 |
| |\ | |||||
| * | | Implement third party identifier invites | Daniel Wagner-Hall | 2015-10-01 | 1 | -0/+11 |
| | | | |||||
* | | | Amalgamate _filter_events_for_client | Erik Johnston | 2015-10-16 | 1 | -0/+46 |
| |/ |/| | |||||
* | | Also bundle in sender | Erik Johnston | 2015-10-02 | 1 | -0/+1 |
| | | |||||
* | | Bundle in some room state in the unsigned bit of the invite when sending to ↵ | Erik Johnston | 2015-09-10 | 1 | -4/+25 |
|/ | | | | invited servers | ||||
* | Merge branch 'develop' into redactyoself | Daniel Wagner-Hall | 2015-08-28 | 1 | -16/+16 |
|\ | | | | | | | | | Conflicts: synapse/handlers/_base.py | ||||
| * | Do auth checks *before* persisting the event | Erik Johnston | 2015-08-24 | 1 | -16/+16 |
| | | |||||
* | | Allow users to redact their own events | Daniel Wagner-Hall | 2015-08-28 | 1 | -2/+17 |
|/ | |||||
* | Check that the canonical room alias actually points to the room | Erik Johnston | 2015-08-20 | 1 | -1/+17 |
| | |||||
* | Don't needlessly compute prev_state | Erik Johnston | 2015-06-03 | 1 | -1/+3 |
| | |||||
* | Don't bother checking for updates if the stream token hasn't advanced for a user | Mark Haines | 2015-05-13 | 1 | -2/+5 |
| | |||||
* | Fix up leak. Add warnings. | Erik Johnston | 2015-05-08 | 1 | -4/+7 |
| | |||||
* | That wasn't a deferred | Erik Johnston | 2015-05-01 | 1 | -3/+1 |
| | |||||
* | PEP8 | Erik Johnston | 2015-04-16 | 1 | -1/+0 |
| | |||||
* | Don't wait on federation_handler.handle_new_event | Erik Johnston | 2015-04-15 | 1 | -3/+7 |
| | |||||
* | Remove run_on_reactor()s | Erik Johnston | 2015-04-15 | 1 | -4/+0 |
| | |||||
* | Merge pull request #110 from matrix-org/fix_ban | Erik Johnston | 2015-03-16 | 1 | -3/+3 |
|\ | | | | | Fix ban | ||||
| * | Revert incorrect changes to where we send events | Erik Johnston | 2015-03-16 | 1 | -3/+4 |
| | | |||||
| * | Remove concept of context.auth_events, instead use context.current_state | Erik Johnston | 2015-03-16 | 1 | -3/+3 |
| | | |||||
| * | Send all membership events to the remote homeserver | Erik Johnston | 2015-03-16 | 1 | -4/+3 |
| | | |||||
* | | Don't block waiting on waking up all the listeners when sending an event. | Erik Johnston | 2015-03-16 | 1 | -1/+10 |
|/ | |||||
* | Replace hs.parse_userid with UserID.from_string | Mark Haines | 2015-01-23 | 1 | -2/+3 |
| | |||||
* | Finish renaming "context" to "room_id" in federation codebase | Mark Haines | 2015-01-16 | 1 | -3/+1 |
| | |||||
* | Update copyright notices | Mark Haines | 2015-01-06 | 1 | -1/+1 |
| | |||||
* | Construct the EventContext in the state handler rather than constructing one ↵ | Mark Haines | 2014-12-16 | 1 | -9/+2 |
| | | | | and then immediately calling state_handler.annotate_context_with_state | ||||
* | clean up coding style a bit | Mark Haines | 2014-12-16 | 1 | -2/+2 |
| | |||||
* | Rename MessageHandler.handle_event. Add a few comments. | Erik Johnston | 2014-12-15 | 1 | -0/+5 |
| | |||||
* | Remove dead code | Erik Johnston | 2014-12-10 | 1 | -2/+0 |
| | |||||
* | Fix bug when uploading state with empty state_key | Erik Johnston | 2014-12-10 | 1 | -61/+5 |
| | |||||
* | Make depth increase. | Erik Johnston | 2014-12-10 | 1 | -1/+1 |
| | |||||
* | Fix joining from an invite | Erik Johnston | 2014-12-09 | 1 | -1/+14 |
| | |||||
* | Remove unused import | Erik Johnston | 2014-12-09 | 1 | -2/+1 |
| | |||||
* | More bug fixes | Erik Johnston | 2014-12-08 | 1 | -4/+0 |
| | |||||
* | More bug fixes | Erik Johnston | 2014-12-08 | 1 | -1/+5 |
| | |||||
* | Various typos and bug fixes. | Erik Johnston | 2014-12-08 | 1 | -3/+5 |
| | |||||
* | Start making more things use EventContext rather than event.* | Erik Johnston | 2014-12-05 | 1 | -91/+73 |
| | |||||
* | Convert rest and handlers to use new event structure | Erik Johnston | 2014-12-04 | 1 | -6/+10 |
| | |||||
* | Begin converting things to use the new Event structure | Erik Johnston | 2014-12-04 | 1 | -12/+53 |
| | |||||
* | WIP for new way of managing events. | Erik Johnston | 2014-12-03 | 1 | -0/+51 |
| | |||||
* | Fix bugs in invite/join dances. | Erik Johnston | 2014-11-25 | 1 | -1/+1 |
| | | | | | We now do more implement more of the auth on the events so that we don't reject valid events. | ||||
* | Add a few missing yields, Move deferred lists inside PreserveLoggingContext ↵ | Mark Haines | 2014-11-20 | 1 | -1/+1 |
| | | | | because they don't interact well with the logging contexts | ||||
* | Rename annotate_state_groups to annotate_event_with_state | Erik Johnston | 2014-11-11 | 1 | -1/+1 |
| | |||||
* | Use current state to get room hosts, rather than querying the database | Erik Johnston | 2014-11-07 | 1 | -3/+15 |
| | |||||
* | Implement invite part of invite join dance | Erik Johnston | 2014-11-07 | 1 | -1/+12 |
| | |||||
* | Fix joining over federation | Erik Johnston | 2014-11-07 | 1 | -53/+1 |
| | |||||
* | Start implementing auth chains | Erik Johnston | 2014-11-07 | 1 | -2/+57 |
| | |||||
* | Fix auth checks to all use the given old_event_state | Erik Johnston | 2014-11-05 | 1 | -5/+14 |
| | |||||
* | Sign events we create. | Erik Johnston | 2014-11-03 | 1 | -0/+9 |
| | |||||
* | Start filling out and using new events tables | Erik Johnston | 2014-10-29 | 1 | -0/+4 |
| | |||||
* | Begin making auth use event.old_state_events | Erik Johnston | 2014-10-15 | 1 | -1/+9 |
| | |||||
* | Generate m.room.aliases event when the HS creates a room alias | Erik Johnston | 2014-09-05 | 1 | -3/+0 |
| | |||||
* | fix the copyright holder from matrix.org to OpenMarket Ltd, as matrix.org ↵ | Matthew Hodgson | 2014-09-03 | 1 | -1/+1 |
| | | | | hasn't been incorporated in time for launch. | ||||
* | Set status message for ratelimit error responses | Mark Haines | 2014-09-03 | 1 | -1/+1 |
| | |||||
* | Raise LimitExceedError when the ratelimiting is throttling requests | Mark Haines | 2014-09-03 | 1 | -4/+2 |
| | |||||
* | rate limiting for message sending | Mark Haines | 2014-09-02 | 1 | -2/+2 |
| | |||||
* | Add ratelimiting function to basehandler | Mark Haines | 2014-09-02 | 1 | -0/+17 |
| | |||||
* | Fix pyflakes warnings | Mark Haines | 2014-08-28 | 1 | -1/+1 |
| | |||||
* | Merge branch 'develop' into storage_transactions | Mark Haines | 2014-08-27 | 1 | -1/+1 |
|\ | | | | | | | | | | | Conflicts: tests/handlers/test_federation.py tests/handlers/test_room.py | ||||
* | | Merge branch 'develop' into storage_transactions | Mark Haines | 2014-08-27 | 1 | -2/+3 |
|\| | | | | | | | | | | | Conflicts: synapse/handlers/room.py synapse/storage/stream.py | ||||
* | | Fill out prev_events before calling persist_event | Mark Haines | 2014-08-27 | 1 | -0/+2 |
| | | |||||
* | | Fold federation/handler into handlers/federation | Mark Haines | 2014-08-26 | 1 | -1/+2 |
| | | |||||
* | | Move new event boilerplate in room handlers into a method on a base clase. | Mark Haines | 2014-08-26 | 1 | -1/+19 |
|/ | |||||
* | Wait for getting a Join in response to an invite/join dance. | Erik Johnston | 2014-08-21 | 1 | -0/+1 |
| | |||||
* | add in whitespace after copyright statements to improve legibility | Matthew Hodgson | 2014-08-13 | 1 | -0/+1 |
| | |||||
* | Reference Matrix Home Server | matrix.org | 2014-08-12 | 1 | -0/+26 |