summary refs log tree commit diff
path: root/synapse (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Python is hardTravis Ralston2018-10-151-5/+6
|
* Merge branch 'develop' into travis/login-termsTravis Ralston2018-10-1510-3/+1047
|\
| * Merge pull request #4019 from matrix-org/dbkr/e2e_backupsDavid Baker2018-10-158-0/+1044
| |\ | | | | | | E2E backups
| | * missed oneDavid Baker2018-10-121-0/+1
| | |
| | * Linting soothes the savage PEP8 monsterDavid Baker2018-10-121-4/+9
| | |
| | * Misc PR feedback bitsDavid Baker2018-10-121-2/+2
| | |
| | * Don't mangle exceptionsDavid Baker2018-10-121-4/+2
| | |
| | * Split /room_keys/version into 2 servletsDavid Baker2018-10-121-9/+21
| | |
| | * PR feedback pt. 1David Baker2018-10-123-29/+22
| | |
| | * Fix mergefailDavid Baker2018-10-091-1/+1
| | |
| | * isortDavid Baker2018-10-091-1/+1
| | |
| | * Merge remote-tracking branch 'origin/develop' into dbkr/e2e_backupsDavid Baker2018-10-09115-1523/+2315
| | |\
| | * | Apparently this blank line is Very ImportantDavid Baker2018-10-091-0/+1
| | | |
| | * | be python3 compatibleDavid Baker2018-10-091-2/+3
| | | |
| | * | Don't reuse backup versionsDavid Baker2018-10-052-3/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since we don't actually delete the keys, just mark the versions as deleted in the db rather than actually deleting them, then we won't reuse versions. Fixes https://github.com/vector-im/riot-web/issues/7448
| | * | WIP e2e key backupsDavid Baker2018-09-132-4/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Continues from uhoreg's branch This just fixed the errcode on /room_keys/version if no backup and updates the schema delta to be on the latest so it gets run
| | * | try to make flake8 and isort happyHubert Chathi2018-09-064-4/+10
| | | |
| | * | update to newer Synapse APIsHubert Chathi2018-08-241-1/+1
| | | |
| | * | Merge branch 'develop' into e2e_backupsHubert Chathi2018-08-24116-1483/+3715
| | |\ \
| | * | | allow session_data to be any JSON instead of just a stringHubert Chathi2018-08-211-2/+4
| | | | |
| | * | | allow auth_data to be any JSON instead of a stringHubert Chathi2018-08-211-2/+5
| | | | |
| | * | | missing importMatthew Hodgson2018-08-121-1/+1
| | | | |
| | * | | missing importMatthew Hodgson2018-08-121-0/+1
| | | | |
| | * | | use parse_stringMatthew Hodgson2018-08-121-3/+3
| | | | |
| | * | | 404 nicely if you try to interact with a missing current versionMatthew Hodgson2018-08-121-16/+35
| | | | |
| | * | | support DELETE /version with no argsMatthew Hodgson2018-08-122-3/+4
| | | | |
| | * | | flake8Matthew Hodgson2018-08-121-1/+1
| | | | |
| | * | | implement remaining tests and make them workMatthew Hodgson2018-08-123-8/+36
| | | | |
| | * | | fix idiocies and so make tests passMatthew Hodgson2018-08-122-3/+4
| | | | |
| | * | | don't needlessly return user_idMatthew Hodgson2018-08-121-1/+0
| | | | |
| | * | | improve docstringMatthew Hodgson2018-08-121-1/+5
| | | | |
| | * | | switch get_current_version_info back to being get_version_infoMatthew Hodgson2018-08-121-4/+7
| | | | |
| | * | | fix flakesMatthew Hodgson2018-08-122-4/+6
| | | | |
| | * | | fix typosMatthew Hodgson2018-08-122-2/+3
| | | | |
| | * | | add a tonne of docstring; make upload_room_keys properly assert versionMatthew Hodgson2018-08-122-9/+113
| | | | |
| | * | | add a tonne of docstring; make upload_room_keys properly assert versionMatthew Hodgson2018-08-121-20/+31
| | | | |
| | * | | more docstring for the e2e_room_keys restMatthew Hodgson2018-08-122-2/+51
| | | | |
| | * | | add storage docstring; remove unused set_e2e_room_keysMatthew Hodgson2018-08-121-36/+83
| | | | |
| | * | | fix factoring out of _should_replace_room_keyMatthew Hodgson2018-08-121-3/+4
| | | | |
| | * | | rename room_key_version table correctly, and fix opt argsMatthew Hodgson2018-08-122-16/+16
| | | | |
| | * | | blindly incorporate PR review - needs testing & fixingMatthew Hodgson2018-08-125-79/+99
| | | | |
| | * | | make /room_keys/version workMatthew Hodgson2018-08-124-15/+38
| | | | |
| | * | | implement /room_keys/version too (untested)Matthew Hodgson2018-08-125-6/+171
| | | | |
| | * | | document the APIMatthew Hodgson2018-08-121-0/+133
| | | | |
| | * | | make it work and fix pep8Matthew Hodgson2018-08-127-82/+134
| | | | |
| | * | | interim WIP checkin; doesn't build yetMatthew Hodgson2018-08-123-19/+84
| | | | |
| | * | | total WIP skeleton for /room_keys APIMatthew Hodgson2018-08-124-0/+289
| | | | |
| * | | | synapse/app: frontend_proxy.py: actually make workers work on py3Ivan Shapovalov2018-10-141-2/+2
| | | | |
| * | | | synapse/visibility.py: fix SyntaxError on py3.7Ivan Shapovalov2018-10-141-1/+1
| | | | |
* | | | | Update login terms structure for the proposed language supportTravis Ralston2018-10-121-4/+7
| | | | |
* | | | | Rely on the lack of ?u to represent public accessTravis Ralston2018-10-122-10/+6
| | | | | | | | | | | | | | | also general cleanup
* | | | | Merge branch 'develop' into travis/login-termsTravis Ralston2018-10-1218-125/+224
|\| | | |
| * | | | Make workers work on Py3 (#4027)Amber Brown2018-10-1311-61/+62
| | | | |
| * | | | Comments on get_all_new_events_streamRichard van der Hoff2018-10-121-1/+15
| | | | | | | | | | | | | | | | | | | | just some docstrings to clarify the behaviour here
| * | | | Add description to counter metricErik Johnston2018-10-101-1/+5
| | | | |
| * | | | Track number of non-empty sync responses insteadErik Johnston2018-10-101-9/+15
| | | | |
| * | | | Append _total to metric and fix up spellingErik Johnston2018-10-101-2/+2
| | | | |
| * | | | Add metric to count lazy member sync requestsErik Johnston2018-10-091-6/+20
| | | | |
| * | | | Merge pull request #4008 from matrix-org/erikj/log_looping_exceptionsErik Johnston2018-10-092-13/+35
| |\ \ \ \ | | |_|_|/ | |/| | | Log looping call exceptions
| | * | | Remove unnecessary extra function call layerErik Johnston2018-10-082-31/+16
| | | | |
| | * | | Use errback pattern and catch async failuresErik Johnston2018-10-082-15/+35
| | | | |
| | * | | Log looping call exceptionsErik Johnston2018-10-051-1/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a looping call function errors, then it kills the loop entirely. Currently it throws away the exception logs, so we should make it actually log them. Fixes #3929
| * | | | Optimisation for filter_events_for_serverRichard van der Hoff2018-10-081-7/+6
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | We're better off hashing just the event_id than the whole ((type, state_key), event_id) tuple - so use a dict instead of a set. Also, iteritems > items.
| * | | Merge pull request #3995 from matrix-org/rav/no_deextrem_outliersRichard van der Hoff2018-10-041-33/+69
| |\ \ \ | | | | | | | | | | Fix bug in forward_extremity update logic
| | * | | actually exclude outliersRichard van der Hoff2018-10-031-1/+2
| | | | |
| | * | | remove debuggingRichard van der Hoff2018-10-021-10/+0
| | | | |
| | * | | Fix bug in forward_extremity update logicRichard van der Hoff2018-10-021-33/+78
| | | | | | | | | | | | | | | | | | | | | | | | | An event does not stop being a forward_extremity just because an outlier or rejected event refers to it.
| * | | | Merge branch 'master' into developAmber Brown2018-10-042-2/+5
| |\ \ \ \
| | * | | | full versionAmber Brown2018-10-041-1/+1
| | | | | |
| | * | | | Pin to prometheus_client<0.4 to avoid renaming all of our metricsRichard van der Hoff2018-10-031-1/+4
| | | | | |
| | * | | | versionAmber Brown2018-10-031-1/+1
| | |/ / /
* | | | | Use a flag rather than a new route for the public policyTravis Ralston2018-10-033-17/+25
| | | | | | | | | | | | | | | This also means that the template now has optional parameters, which will need to be documented somehow.
* | | | | Auto-consent to the privacy policy if the user registered with termsTravis Ralston2018-10-031-0/+6
| | | | |
* | | | | Make the terms flow requriedTravis Ralston2018-10-031-4/+4
| | | | |
* | | | | Flesh out the fallback auth for termsTravis Ralston2018-10-031-7/+67
| | | | |
* | | | | Supply params for terms auth stageTravis Ralston2018-10-031-0/+9
| | | | | | | | | | | | | | | As per https://github.com/matrix-org/matrix-doc/pull/1692
* | | | | Incorporate Dave's work for GDPR login flowsTravis Ralston2018-10-034-0/+40
|/ / / / | | | | | | | | As per https://github.com/vector-im/riot-web/issues/7168#issuecomment-419996117
* | | | Merge pull request #3999 from matrix-org/erikj/fix_3pid_invite_rejetionErik Johnston2018-10-031-5/+2
|\ \ \ \ | | | | | | | | | | Fix handling of rejected threepid invites
| * | | | Sanitise error messages when user doesn't have permission to inviteErik Johnston2018-10-031-5/+2
| | | | |
| * | | | Fix handling of rejected threepid invitesErik Johnston2018-10-031-1/+1
| |/ / /
* | | | Merge pull request #3996 from matrix-org/erikj/fix_bg_iterationErik Johnston2018-10-031-2/+6
|\ \ \ \ | | | | | | | | | | Fix exception in background metrics collection
| * | | | Fix exception in background metrics collectionErik Johnston2018-10-031-2/+6
| |/ / / | | | | | | | | | | | | | | | | We attempted to iterate through a list on a separate thread without doing the necessary copying.
* / / / Fix exception handling in fetching remote profilesErik Johnston2018-10-031-6/+2
|/ / /
* | | Fix bug when invalidating destination retry timingsErik Johnston2018-10-021-1/+1
| | |
* | | Merge pull request #3960 from matrix-org/rav/fix_missing_create_event_errorRichard van der Hoff2018-10-021-2/+2
|\ \ \ | | | | | | | | Fix error handling for missing auth_event
| * \ \ Merge branch 'develop' into rav/fix_missing_create_event_errorRichard van der Hoff2018-10-0130-142/+299
| |\ \ \
| * | | | Fix error handling for missing auth_eventRichard van der Hoff2018-09-261-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we were authorizing an event, if there was no `m.room.create` in its auth_events, we would raise a SynapseError with a cryptic message, which then meant that we would bail out of processing any incoming events, rather than storing a rejection for the faulty event and moving on. We should treat the absent event the same as any other auth failure, by raising an AuthError, so that the event is marked as rejected.
* | | | | Disable frozen dicts by default (#3987)Amber Brown2018-10-021-3/+10
| | | | |
* | | | | Fix error when logging incomplete requestsErik Johnston2018-10-021-6/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a connection is lost before a request is read from Request, Twisted sets `method` (and `uri`) attributes to dummy values. These dummy values have incorrect types (i.e. they're not bytes), and so things like `__repr__` would raise an exception. To fix this we had a helper method to return the method with a consistent type.
* | | | | Merge pull request #3989 from matrix-org/rav/better_stacktracesRichard van der Hoff2018-10-022-22/+23
|\ \ \ \ \ | | | | | | | | | | | | Avoid reraise, to improve stacktraces
| * | | | | Avoid reraise, to improve stacktracesRichard van der Hoff2018-10-012-22/+23
| | |/ / / | |/| | |
* | | | | Merge pull request #3986 from matrix-org/erikj/fix_sync_with_redacted_stateErik Johnston2018-10-021-2/+2
|\ \ \ \ \ | |/ / / / |/| | | | Fix lazy loaded sync with rejected state events
| * | | | Fix lazy loaded sync with rejected state eventsErik Johnston2018-10-011-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In particular, we assume that the name and canonical alias events in the state have not been rejected. In practice this may not be the case (though we should probably think about fixing that) so lets ensure that we gracefully handle that case, rather than 404'ing the sync request like we do now.
* | | | | Merge pull request #3968 from matrix-org/rav/fix_federation_errorsRichard van der Hoff2018-10-011-12/+46
|\ \ \ \ \ | | | | | | | | | | | | Fix exceptions when handling incoming transactions
| * \ \ \ \ Merge remote-tracking branch 'origin/develop' into rav/fix_federation_errorsRichard van der Hoff2018-09-2720-36/+60
| |\ \ \ \ \
| * | | | | | Include event when resolving state for missing prevsRichard van der Hoff2018-09-271-2/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we have a forward extremity for a room as `E`, and you receive `A`, `B`, s.t. `A -> B -> E`, and `B` also points to an unknown event `X`, then we need to do state res between `X` and `E`. When that happens, we need to make sure we include `X` in the state that goes into the state res alg. Fixes #3934.
| * | | | | | Include state from remote servers in pdu handlingRichard van der Hoff2018-09-271-4/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we've fetched state events from remote servers in order to resolve the state for a new event, we need to actually pass those events into resolve_events_with_factory (so that it can do the state res) and then persist the ones we need - otherwise other bits of the codebase get confused about why we have state groups pointing to non-existent events.
| * | | | | | Fix "unhashable type: 'list'" exception in federation handlingRichard van der Hoff2018-09-271-7/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | get_state_groups returns a map from state_group_id to a list of FrozenEvents, so was very much the wrong thing to be putting as one of the entries in the list passed to resolve_events_with_factory (which expects maps from (event_type, state_key) to event id). We actually want get_state_groups_ids().values() rather than get_state_groups(). This fixes the main problem in #3923, but there are other problems with this bit of code which get discovered once you do so.
* | | | | | | Fix userconsent on Python 3 (#3938)Amber Brown2018-10-021-1/+1
| |_|/ / / / |/| | | | |
* | | | | | Merge pull request #3933 from matrix-org/erikj/destination_retry_cacheErik Johnston2018-10-012-3/+44
|\ \ \ \ \ \ | | | | | | | | | | | | | | Add a five minute cache to get_destination_retry_timings
| * | | | | | Correctly match 'dict.pop' apiErik Johnston2018-10-011-3/+11
| | | | | | |
| * | | | | | Don't update eviction metrics on explicit removalErik Johnston2018-10-011-5/+0
| | | | | | |
| * | | | | | Merge remote-tracking branch 'origin/develop' into erikj/destination_retry_cacheRichard van der Hoff2018-09-2827-403/+248
| |\ \ \ \ \ \ | | | |/ / / / | | |/| | | |
| * | | | | | Merge branch 'rav/fix_expiring_cache_len' into erikj/destination_retry_cacheRichard van der Hoff2018-09-261-10/+17
| |\ \ \ \ \ \
| * \ \ \ \ \ \ Merge remote-tracking branch 'origin/develop' into erikj/destination_retry_cacheRichard van der Hoff2018-09-255-21/+48
| |\ \ \ \ \ \ \
| * | | | | | | | Fix ExpiringCache.__len__ to be accurateErik Johnston2018-09-211-12/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It used to try and produce an estimate, which was sometimes negative. This caused metrics to be sad, so lets always just calculate it from scratch.
| * | | | | | | | Add a five minute cache to get_destination_retry_timingsErik Johnston2018-09-212-1/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Hopefully helps with #3931
| * | | | | | | | Make ExpiringCache slightly more performantErik Johnston2018-09-211-1/+5
| | | | | | | | |
* | | | | | | | | Merge pull request #3964 from matrix-org/rav/remove_localhost_checksRichard van der Hoff2018-09-282-30/+7
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | remove spurious federation checks on localhost
| * | | | | | | | | Fix complete fail to do the right thingRichard van der Hoff2018-09-282-1/+3
| | | | | | | | | |
| * | | | | | | | | remove spurious federation checks on localhostRichard van der Hoff2018-09-261-31/+6
| | |_|_|_|_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's really no point in checking for destinations called "localhost" because there is nothing stopping people creating other DNS entries which point to 127.0.0.1. The right fix for this is https://github.com/matrix-org/synapse/issues/3953. Blocking localhost, on the other hand, means that you get a surprise when trying to connect a test server on localhost to an existing server (with a 'normal' server_name).
* | | | | | | | | Remove redundant call to start_get_pdu_cacheRichard van der Hoff2018-09-281-1/+0
| |_|_|_|/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I think this got forgotten in #3932. We were getting away with it because it was the last call in this function.
* | | | | | | | Merge pull request #3794 from matrix-org/erikj/faster_typingRichard van der Hoff2018-09-271-3/+19
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Improve performance of getting typing updates for replication
| * \ \ \ \ \ \ \ Merge branch 'develop' of github.com:matrix-org/synapse into erikj/faster_typingErik Johnston2018-09-1968-689/+1415
| |\ \ \ \ \ \ \ \
| * | | | | | | | | Improve performance of getting typing updates for replicationErik Johnston2018-09-051-3/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fetching the list of all new typing notifications involved iterating over all rooms and comparing their serial. Lets move to using a stream change cache, like we do for other streams.
* | | | | | | | | | Merge pull request #3967 from matrix-org/rav/federation_handler_cleanupsRichard van der Hoff2018-09-272-4/+10
|\ \ \ \ \ \ \ \ \ \ | | |_|_|_|_|_|/ / / | |/| | | | | | | | Clarifications in FederationHandler
| * | | | | | | | | more commentsRichard van der Hoff2018-09-272-6/+3
| | | | | | | | | |
| * | | | | | | | | Clarifications in FederationHandlerRichard van der Hoff2018-09-271-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * add some comments on things that look a bit bogus * rename this `state` variable to avoid confusion with the `state` used elsewhere in this function. (There was no actual conflict, but it was a confusing bit of spaghetti.)
* | | | | | | | | | Merge pull request #3965 from matrix-org/rav/notify_app_services_bg_processAmber Brown2018-09-271-2/+6
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Run notify_app_services as a bg process
| * | | | | | | | | | Run notify_app_services as a bg processRichard van der Hoff2018-09-261-2/+6
| | |_|_|/ / / / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This ensures that its resource usage metrics get recorded somewhere rather than getting lost. (It also fixes an error when called from a nested logging context which completes before the bg process)
* | | | | | | | | | Merge pull request #3970 from schnuffle/develop-py3Amber Brown2018-09-2716-17/+17
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Replaced all occurences of e.message with str(e)
| * | | | | | | | | | Replaced all occurences of e.message with str(e)Schnuffle2018-09-2716-17/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Schnuffle <schnuffle@github.com>
* | | | | | | | | | | Run our oldest supported configuration in CI (#3952)Amber Brown2018-09-271-13/+14
| | | | | | | | | | |
* | | | | | | | | | | Merge pull request #3961 from matrix-org/neilj/lock_mau_upsertsRichard van der Hoff2018-09-271-1/+4
|\ \ \ \ \ \ \ \ \ \ \ | |_|_|/ / / / / / / / |/| | | | | | | | | | fix #3854 MAU transaction errors
| * | | | | | | | | | fix #3854Neil Johnson2018-09-261-1/+4
| | |/ / / / / / / / | |/| | | | | | | |
* | | | | | | | | | Merge pull request #3966 from matrix-org/rav/rx_txn_logging_2Richard van der Hoff2018-09-272-2/+16
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Logging improvements
| * | | | | | | | | | Logging improvementsRichard van der Hoff2018-09-262-2/+16
| |/ / / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some logging tweaks to help with debugging incoming federation transactions
* | | | | | | | | | Include eventid in log lines when processing incoming federation ↵Richard van der Hoff2018-09-273-45/+93
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | transactions (#3959) when processing incoming transactions, it can be hard to see what's going on, because we process a bunch of stuff in parallel, and because we may end up recursively working our way through a chain of three or four events. This commit creates a way to use logcontexts to add the relevant event ids to the log lines.
* | | | | | | | | | docstrings and unittests for storage.state (#3958)Richard van der Hoff2018-09-271-8/+22
| |/ / / / / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | I spent ages trying to figure out how I was going mad...
* | | | | | | | | fix docstring for FederationClient.get_state_for_roomRichard van der Hoff2018-09-261-4/+4
|/ / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | trivial fixes for docstring
* | | | | | | | Merge pull request #3956 from matrix-org/rav/fix_expiring_cache_lenRichard van der Hoff2018-09-262-20/+24
|\ \ \ \ \ \ \ \ | | |_|_|_|/ / / | |/| | | | | | Fix ExpiringCache.__len__ to be accurate
| * | | | | | | Log which cache is throwing exceptionsRichard van der Hoff2018-09-261-10/+17
| | | | | | | |
| * | | | | | | Fix ExpiringCache.__len__ to be accurateErik Johnston2018-09-261-10/+7
| | |_|_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It used to try and produce an estimate, which was sometimes negative. This caused metrics to be sad, so lets always just calculate it from scratch. (This appears to have been a longstanding bug, but one which has been made more of a problem by #3932 and #3933). (This was originally done by Erik as part of #3933. I'm cherry-picking it because really it's a fix in its own right)
* | | | | | | Merge pull request #3948 from matrix-org/rav/no_symlink_synctlAmber Brown2018-09-261-284/+0
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Move synctl into top dir to avoid a symlink
| * | | | | | | Move synctl into top dir to avoid a symlinkRichard van der Hoff2018-09-251-284/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | symlinks apparently break setuptools on python3 and alpine (https://bugs.python.org/issue31940), so let's stop using a symlink and just use the file directly.
* | | | | | | | Merge pull request #3924 from matrix-org/rav/clean_up_on_receive_pduAmber Brown2018-09-262-24/+47
|\ \ \ \ \ \ \ \ | |_|/ / / / / / |/| | | | | | | Comments and interface cleanup for on_receive_pdu
| * | | | | | | Comments and interface cleanup for on_receive_pduRichard van der Hoff2018-09-202-24/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add some informative comments about what's going on here. Also, `sent_to_us_directly` and `get_missing` were doing the same thing (apart from in `_handle_queued_pdus`, which looks like a bug), so let's get rid of `get_missing` and use `sent_to_us_directly` consistently.
* | | | | | | | Merge pull request #3932 from matrix-org/erikj/auto_start_expiring_cachesRichard van der Hoff2018-09-2515-38/+12
|\ \ \ \ \ \ \ \ | | |_|_|_|/ / / | |/| | | | | | Fix some instances of ExpiringCache not expiring cache items
| * | | | | | | Fix some instances of ExpiringCache not expiring cache itemsErik Johnston2018-09-2115-38/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ExpiringCache required that `start()` be called before it would actually start expiring entries. A number of places didn't do that. This PR removes `start` from ExpiringCache, and automatically starts backround reaping process on creation instead.
* | | | | | | | added "media-src: 'self'" to CSP for resources (#3578)Jérémy Farnaud2018-09-251-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Synapse doesn’t allow for media resources to be played directly from Chrome. It is a problem for users on other networks (e.g. IRC) communicating with Matrix users through a gateway. The gateway sends them the raw URL for the resource when a Matrix user uploads a video and the video cannot be played directly in Chrome using that URL. Chrome argues it is not authorized to play the video because of the Content Security Policy. Chrome checks for the "media-src" policy which is missing, and defauts to the "default-src" policy which is "none". As Synapse already sends "object-src: 'self'" I thought it wouldn’t be a problem to add "media-src: 'self'" to the CSP to fix this problem.
* | | | | | | | Merge pull request #3925 from matrix-org/erikj/fix_producers_unregisteredRichard van der Hoff2018-09-251-14/+35
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Fix spurious exceptions when client closes conncetion
| * | | | | | | | Fix spurious exceptions when client closes conncetionErik Johnston2018-09-201-14/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a HTTP handler throws an exception while processing a request we automatically write a JSON error response. If the handler had already started writing a response twisted throws an exception. We should check for this case and simple abort the connection if there was an error after the response had started being written.
* | | | | | | | | We require attrs 16.0.0Richard van der Hoff2018-09-251-1/+3
| |_|_|/ / / / / |/| | | | | | | | | | | | | | | | | | | | | | | Ref: https://github.com/matrix-org/synapse/issues/3945
* | | | | | | | Only lazy load self-members on initial syncMatthew Hodgson2018-09-251-5/+8
| | | | | | | | | | | | | | | | | | | | | | | | Given we have disabled lazy loading for incr syncs in #3840, we can make self-LL more efficient by only doing it on initial sync. Also adds a bounds check for if/when we change our mind, so that we don't try to include LL members on sync responses with no timeline.
* | | | | | | | Merge branch 'master' into developAmber Brown2018-09-251-1/+1
|\ \ \ \ \ \ \ \
| * | | | | | | | bump versionAmber Brown2018-09-251-1/+1
| | | | | | | | |
* | | | | | | | | Merge branch 'master' into developAmber Brown2018-09-241-1/+1
|\| | | | | | | | | |_|/ / / / / / |/| | | | | | |
| * | | | | | | update versionAmber Brown2018-09-241-1/+1
| | | | | | | |
| * | | | | | | versionAmber Brown2018-09-171-1/+1
| | | | | | | |
* | | | | | | | Merge pull request #3927 from matrix-org/erikj/handle_background_errorsErik Johnston2018-09-211-0/+6
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Handle exceptions thrown by background tasks
| * | | | | | | | Add missing loggerErik Johnston2018-09-201-0/+4
| | | | | | | | |
| * | | | | | | | Handle exceptions thrown by background tasksErik Johnston2018-09-201-0/+2
| | |/ / / / / / | |/| | | | | | | | | | | | | | | | | | | | | | Fixes #3921
* | | | | | | | Always LL ourselves if we're in a room to simplify clients (#3916)Matthew Hodgson2018-09-201-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Should fix https://github.com/vector-im/riot-web/issues/7209
* | | | | | | | Merge pull request #3868 from matrix-org/neilj/fix_room_invite_mail_linksNeil Johnson2018-09-201-1/+1
|\ \ \ \ \ \ \ \ | |_|_|/ / / / / |/| | | | | | | Neilj/fix room invite mail links
| * | | | | | | Merge remote-tracking branch 'origin/develop' into ↵Richard van der Hoff2018-09-1813-39/+247
| |\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | neilj/fix_room_invite_mail_links
| * | | | | | | | fix link for case that config.email_riot_base_url is setNeil Johnson2018-09-131-1/+1
| | | | | | | | |
* | | | | | | | | Fix client IPs being broken on Python 3 (#3908)Amber Brown2018-09-202-16/+20
| |_|/ / / / / / |/| | | | | | |
* | | | | | | | Merge pull request #3914 from matrix-org/erikj/remove_retry_cacheErik Johnston2018-09-201-8/+0
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Remove get_destination_retry_timings cache
| * | | | | | | | Fix up changelog and remove spurious commentErik Johnston2018-09-191-2/+0
| | | | | | | | |
| * | | | | | | | pep8Erik Johnston2018-09-191-1/+0
| | | | | | | | |
| * | | | | | | | Remove get_destination_retry_timings cacheErik Johnston2018-09-191-5/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently we rely on the master to invalidate this cache promptly. However, after having moved most federation endpoints off of master this no longer happens, causing outbound fedeariont to get blackholed. Fixes #3798
* | | | | | | | | Add a regression test for logging on failed connections (#3912)Amber Brown2018-09-201-2/+2
| | | | | | | | |
* | | | | | | | | Improve the logging when handling a federation transaction (#3904)Richard van der Hoff2018-09-192-56/+110
| |_|_|_|_|/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Let's try to rationalise the logging that happens when we are processing an incoming transaction, to make it easier to figure out what is going wrong when they take ages. In particular: - make everything start with a [room_id event_id] prefix - make sure we log a warning when catching exceptions rather than just turning them into other, more cryptic, exceptions.
* | | | | | | | FixupErik Johnston2018-09-191-4/+1
| | | | | | | |
* | | | | | | | Replace custom DeferredTimeoutError with defer.TimeoutErrorErik Johnston2018-09-192-12/+5
| | | | | | | |
* | | | | | | | Run canceller first to allow it to generate correct errorErik Johnston2018-09-191-2/+5
| | | | | | | |
* | | | | | | | Update to use new timeout function everywhere.Erik Johnston2018-09-194-72/+43
|/ / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The existing deferred timeout helper function (and the one into twisted) suffer from a bug when a deferred's canceller throws an exception, #3842. The new helper function doesn't suffer from this problem.
* | | | | | | Merge pull request #3909 from turt2live/travis/fix-logging-1Amber Brown2018-09-191-4/+4
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Fix matrixfederationclient.py logging: Destination is a string
| * | | | | | | Destination is a stringTravis Ralston2018-09-181-4/+4
| | | | | | | |
* | | | | | | | Merge pull request #3907 from matrix-org/rav/set_sni_to_server_nameAmber Brown2018-09-191-3/+10
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Set SNI to the server_name, not whatever was in the SRV record
| * | | | | | | | Set SNI to the server_name, not whatever was in the SRV recordRichard van der Hoff2018-09-181-3/+10
| | |_|/ / / / / | |/| | | | | | | | | | | | | | | | | | | | | | Fixes #3843
* | | | | | | | Merge pull request #3903 from matrix-org/rav/increase_get_missing_events_timeoutAmber Brown2018-09-191-1/+30
|\ \ \ \ \ \ \ \ | |_|/ / / / / / |/| | | | | | | Bump timeout on get_missing_events request
| * | | | | | | Bump timeout on get_missing_events requestRichard van der Hoff2018-09-181-1/+30
| |/ / / / / /
* | | | | | | Use directory server for room joins (#3899)Richard van der Hoff2018-09-181-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we do a join, always try the server we used for the alias lookup first. Fixes #2418
* | | | | | | Refactor matrixfederationclient to fix logging (#3906)Richard van der Hoff2018-09-181-149/+236
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We want to wait until we have read the response body before we log the request as complete, otherwise a confusing thing happens where the request appears to have completed, but we later fail it. To do this, we factor the salient details of a request out to a separate object, which can then keep track of the txn_id, so that it can be logged.
* | | | | | | Merge pull request #3894 from matrix-org/hs/phone_home_py_versionAmber Brown2018-09-191-0/+4
|\ \ \ \ \ \ \ | |/ / / / / / |/| | | | | | Add python_version phone home stat
| * | | | | | typoWill Hunt2018-09-171-1/+1
| | | | | | |
| * | | | | | make pip happy?Will Hunt2018-09-171-2/+4
| | | | | | |
| * | | | | | Use a string for versionsWill Hunt2018-09-171-1/+1
| | | | | | |
| * | | | | | Add python_version phone home statWill Hunt2018-09-171-0/+2
| | |/ / / / | |/| | | |
* | | | | | Merge pull request #3879 from matrix-org/matthew/fix-autojoinRichard van der Hoff2018-09-181-0/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | don't ratelimit autojoins
| * | | | | | don't ratelimit autojoinsMatthew Hodgson2018-09-151-0/+1
| |/ / / / /
* | | | | | Merge pull request #3889 from matrix-org/rav/404_on_remove_unknown_aliasRichard van der Hoff2018-09-182-4/+16
|\ \ \ \ \ \ | | | | | | | | | | | | | | Return a 404 when deleting unknown room alias
| * | | | | | Reinstate missing null checkRichard van der Hoff2018-09-171-1/+1
| | | | | | |
| * | | | | | Return a 404 when deleting unknown room aliasRichard van der Hoff2018-09-172-4/+16
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As per https://github.com/matrix-org/matrix-doc/issues/1675 Fixes https://github.com/matrix-org/synapse/issues/2782
* | | | | | Fix more b'abcd' noise in metricsRichard van der Hoff2018-09-172-12/+12
| | | | | |
* | | | | | Fix some b'abcd' noise in logs and metricsRichard van der Hoff2018-09-172-5/+8
|/ / / / / | | | | | | | | | | | | | | | | | | | | Python 3 compatibility: make sure that we decode some byte sequences before we use them to create log lines and metrics labels.
* | | | | Fix timeout functionErik Johnston2018-09-151-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | Turns out deferred.cancel sometimes throws, so we do that last to ensure that we always do resolve the new deferred.
* | | | | Add an awful secondary timeout to fix wedged requestsErik Johnston2018-09-142-0/+62
| | | | | | | | | | | | | | | | | | | | This is an attempt to mitigate #3842 by adding yet-another-timeout
* | | | | don't filter membership events based on history visibility (#3874)Matthew Hodgson2018-09-141-8/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | don't filter membership events based on history visibility as we will already have filtered the messages in the timeline, and state events are always visible. and because @erikjohnston said so.
* | | | | Merge pull request #3872 from matrix-org/hawkowl/timeouts-2Erik Johnston2018-09-144-7/+12
|\ \ \ \ \ | | | | | | | | | | | | timeouts 2: electric boogaloo
| * | | | | fixAmber Brown2018-09-151-3/+3
| | | | | |
| * | | | | fixAmber Brown2018-09-141-1/+4
| | | | | |
| * | | | | fixAmber Brown2018-09-141-1/+1
| | | | | |
| * | | | | redact betterAmber Brown2018-09-141-2/+2
| | | | | |
| * | | | | we do that higher upAmber Brown2018-09-141-0/+1
| | | | | |
| * | | | | Merge remote-tracking branch 'origin/develop' into hawkowl/timeouts-2Amber Brown2018-09-144-15/+36
| |\| | | |
| * | | | | buffer?Amber Brown2018-09-141-1/+2
| | | | | |
* | | | | | Remove spurious commentErik Johnston2018-09-141-2/+0
| | | | | |
* | | | | | Measure outbound requestsErik Johnston2018-09-141-3/+6
| | | | | |
* | | | | | Add in flight real time metrics for Measure blocksErik Johnston2018-09-142-1/+131
| | | | | |
* | | | | | Fix minor typo in exceptionTravis Ralston2018-09-131-1/+1
| |/ / / / |/| | | |
* | | | | merge (#3576)Amber Brown2018-09-144-15/+36
|/ / / /
* | | | Merge pull request #3856 from matrix-org/erikj/speed_up_purge hhs-8Erik Johnston2018-09-131-16/+28
|\ \ \ \ | | | | | | | | | | Make purge history slightly faster
| * | | | commentErik Johnston2018-09-131-0/+2
| | | | |
| * | | | pep8Erik Johnston2018-09-131-1/+0
| | | | |
| * | | | Create indices after insertionErik Johnston2018-09-131-14/+18
| | | | |
| * | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵Erik Johnston2018-09-132-1/+26
| |\ \ \ \ | | | | | | | | | | | | | | | | | | erikj/speed_up_purge
| * | | | | Make purge history slightly fasterErik Johnston2018-09-131-2/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't pull out events that are outliers and won't be deleted, as nothing should happen to them.
* | | | | | Fix handling of redacted events from federationErik Johnston2018-09-132-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we receive an event that doesn't pass their content hash check (e.g. due to already being redacted) then we hit a bug which causes an exception to be raised, which then promplty stops the event (and request) from being processed. This effects all sorts of federation APIs, including joining rooms with a redacted state event.
* | | | | | Attempt to figure out what's going on with timeouts (#3857)Amber Brown2018-09-141-56/+42
| |/ / / / |/| | | |
* | | | | Remove some superfluous logging (#3855)Amber Brown2018-09-132-1/+26
|/ / / /
* | | | Merge pull request #3846 from matrix-org/neilj/expose-registered-users hhs-7Neil Johnson2018-09-122-3/+28
|\ \ \ \ | | | | | | | | | | expose number of real reserved users
| * | | | improve namingNeil Johnson2018-09-122-6/+10
| | | | |
| * | | | expose number of real reserved usersNeil Johnson2018-09-122-3/+24
| | | | |
* | | | | show heroes if a room has a 'deleted' name/canonical_alias (#3851)Matthew Hodgson2018-09-121-2/+15
| | | | |
* | | | | Merge pull request #3853 from matrix-org/erikj/log_outbound_each_timeErik Johnston2018-09-121-75/+74
|\ \ \ \ \ | | | | | | | | | | | | Log outbound requests when we retry
| * | | | | Log outbound requests when we retryErik Johnston2018-09-121-75/+74
| | | | | |
* | | | | | argh pep8Matthew Hodgson2018-09-121-1/+1
| | | | | |
* | | | | | correctly log gappy sync metricsMatthew Hodgson2018-09-121-1/+1
| | | | | |
* | | | | | fix loglineMatthew Hodgson2018-09-121-1/+1
| | | | | |
* | | | | | Merge pull request #3841 from matrix-org/erikj/manhole_key_lengthErik Johnston2018-09-121-13/+31
|\ \ \ \ \ \ | | | | | | | | | | | | | | Change the manhole SSH key to have more bits
| * | | | | | Change the manhole SSH key to have more bitsErik Johnston2018-09-111-13/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Newer versions of openssh client refuse to connect to the old key due to its length.
* | | | | | | Port federation/ to py3 (#3847)Amber Brown2018-09-123-19/+18
| | | | | | |
* | | | | | | Merge pull request #3835 from krombel/fix_3821Amber Brown2018-09-121-1/+5
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | fix VOIP crashes under Python 3
| * | | | | | | fix VOIP crashes under Python 3 (#3821)Krombel2018-09-101-1/+5
| |/ / / / / /
* | | | | | | Merge pull request #3826 from matrix-org/rav/logging_for_keyringAmber Brown2018-09-123-13/+46
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | add some logging for the keyring queue
| * | | | | | | clearer logging when things fail, tooRichard van der Hoff2018-09-062-7/+28
| | | | | | | |
| * | | | | | | add some logging for the keyring queueRichard van der Hoff2018-09-061-6/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | why is it so damn slow?
* | | | | | | | Merge pull request #3824 from matrix-org/rav/fix_jwt_importAmber Brown2018-09-122-1/+1
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Fix jwt import check
| * | | | | | | | Fix jwt import checkRichard van der Hoff2018-09-072-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This handy code attempted to check that we could import jwt, but utterly failed to check it was the right jwt. Fixes https://github.com/matrix-org/synapse/issues/3793
* | | | | | | | | Port rest/ to Python 3 (#3823)Amber Brown2018-09-1217-100/+112
| |_|_|/ / / / / |/| | | | | | |
* | | | | | | | Port crypto/ to Python 3 (#3822)Amber Brown2018-09-123-6/+13
| | | | | | | |
* | | | | | | | Timeout reading body for outbound HTTP requestsErik Johnston2018-09-121-7/+45
| |_|_|/ / / / |/| | | | | |
* | | | | | | Speed up lazy loading (#3827)Matthew Hodgson2018-09-123-30/+157
| |_|/ / / / |/| | | | | | | | | | | | | | | | | | | | | | | * speed up room summaries by pulling their data from room_memberships rather than room state * disable LL for incr syncs, and log incr sync stats (#3840)
* | | | | | Merge pull request #3810 from matrix-org/erikj/send_tags_down_sync_on_joinAmber Brown2018-09-071-0/+13
|\ \ \ \ \ \ | |/ / / / / |/| | | | | Send existing room tags down sync on join
| * | | | | Don't send empty tags list down syncErik Johnston2018-09-061-0/+5
| | | | | |
| * | | | | Send existing room tags down sync on joinErik Johnston2018-09-061-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a user joined a room any existing tags were not sent down the sync stream. Ordinarily this isn't a problem because the user needs to be in the room to have set tags in it, however synapse will sometimes add tags for a user to a room, e.g. for server notices, which need to come down sync.
* | | | | | Merge branch 'master' into developAmber Brown2018-09-071-1/+1
|\ \ \ \ \ \
| * | | | | | versionAmber Brown2018-09-071-1/+1
| | | | | | |
| * | | | | | Bump version and changelogErik Johnston2018-09-061-1/+1
| | | | | | |
| * | | | | | Merge tag 'v0.33.3.1' into release-v0.33.4Erik Johnston2018-09-064-31/+125
| |\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Synapse 0.33.3.1 (2018-09-06) ============================= SECURITY FIXES -------------- - Fix an issue where event signatures were not always correctly validated ([\#3796](https://github.com/matrix-org/synapse/issues/3796)) - Fix an issue where server_acls could be circumvented for incoming events ([\#3796](https://github.com/matrix-org/synapse/issues/3796)) Internal Changes ---------------- - Unignore synctl in .dockerignore to fix docker builds ([\#3802](https://github.com/matrix-org/synapse/issues/3802))
| * | | | | | | version and towncrier v0.33.4rc1Amber Brown2018-09-041-1/+1
| | | | | | | |
* | | | | | | | Merge pull request #3800 from matrix-org/neilj/remove-guests-from-mau-count hhs-6Neil Johnson2018-09-061-1/+5
|\ \ \ \ \ \ \ \ | |_|_|/ / / / / |/| | | | | | | guest users should not be part of mau total
| * | | | | | | ensure guests never enter mau listNeil Johnson2018-09-061-4/+3
| | | | | | | |
| * | | | | | | guest users should not be part of mau totalNeil Johnson2018-09-051-1/+6
| | | | | | | |
* | | | | | | | Merge pull request #3805 from matrix-org/erikj/limit_transaction_pdus_edusAmber Brown2018-09-071-0/+12
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Limit the number of PDUs/EDUs per fedreation transaction
| * | | | | | | | Limit the number of PDUs/EDUs per fedreation transactionErik Johnston2018-09-061-0/+12
| | | | | | | | |
* | | | | | | | | Merge pull request #3788 from matrix-org/erikj/remove_conn_idAmber Brown2018-09-071-12/+12
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Remove conn_id from repl prometheus metrics
| * | | | | | | | | Remove conn_idErik Johnston2018-09-041-2/+2
| | | | | | | | | |