summary refs log tree commit diff
path: root/synapse (follow)
Commit message (Collapse)AuthorAgeFilesLines
* more commentsMatthew Hodgson2018-06-041-0/+7
|
* add lazy_load_members to the filter json schemaMatthew Hodgson2018-05-291-1/+4
|
* pep8Matthew Hodgson2018-05-291-0/+1
|
* disable CPUMetrics if no /proc/self/statMatthew Hodgson2018-05-291-0/+3
| | | | fixes build on macOS again
* add pydocMatthew Hodgson2018-05-292-27/+67
|
* merge developMatthew Hodgson2018-05-29186-2989/+5608
|\
| * fix up testsAmber Brown2018-05-281-3/+3
| |
| * update to more consistently use seconds in any metrics or loggingAmber Brown2018-05-284-38/+38
| |
| * invalid syntax :(Amber Brown2018-05-281-2/+1
| |
| * add comment about why unregAmber Brown2018-05-281-0/+2
| |
| * update metrics to be in secondsAmber Brown2018-05-284-37/+38
| |
| * Merge remote-tracking branch 'origin/develop' into 3218-official-promAmber Brown2018-05-2842-174/+353
| |\
| | * Fix default for send_server_notice_to_guestsRichard van der Hoff2018-05-251-1/+1
| | | | | | | | | | | | bool("False") == True...
| | * Avoid sending consent notice to guest usersRichard van der Hoff2018-05-252-1/+12
| | | | | | | | | | | | we think it makes sense not to send the notices to guest users.
| | * Merge pull request #3287 from matrix-org/rav/allow_leaving_server_notices_roomRichard van der Hoff2018-05-251-10/+14
| | |\ | | | | | | | | Let users leave the server notice room after joining
| | | * Let users leave the server notice room after joiningRichard van der Hoff2018-05-251-10/+14
| | | | | | | | | | | | | | | | They still can't reject invites, but we let them leave it.
| | * | Merge pull request #3283 from NotAFile/py3-stateAmber Brown2018-05-241-23/+25
| | |\ \ | | | | | | | | | | py3-ize state.py
| | | * | py3-ize state.pyAdrian Tschira2018-05-241-23/+25
| | | | |
| | * | | Merge pull request #3279 from NotAFile/py3-more-iteritemsAmber Brown2018-05-241-4/+6
| | |\ \ \ | | | | | | | | | | | | more six iteritems
| | | * | | more iteritemsAdrian Tschira2018-05-241-4/+6
| | | |/ /
| | * / / Misc. py3 fixesAdrian Tschira2018-05-245-11/+13
| | |/ / | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | Merge pull request #3278 from NotAFile/py3-storage-baseAmber Brown2018-05-241-17/+22
| | |\ \ | | | | | | | | | | Py3 storage/_base.py
| | | * | Py3 storage/_base.pyAdrian Tschira2018-05-241-17/+22
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | Merge pull request #3244 from NotAFile/py3-six-4Amber Brown2018-05-2415-49/+69
| | |\ \ \ | | | | | | | | | | | | replace some iteritems with six
| | | * | | replace some iteritems with sixAdrian Tschira2018-05-1915-49/+69
| | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | | Merge pull request #3246 from NotAFile/py3-repr-stringAmber Brown2018-05-241-1/+1
| | |\ \ \ \ | | | | | | | | | | | | | | use repr, not str
| | | * | | | use repr, not strAdrian Tschira2018-05-191-1/+1
| | | |/ / / | | | | | | | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | | Merge pull request #3247 from NotAFile/py3-miscAmber Brown2018-05-243-5/+18
| | |\ \ \ \ | | | | | | | | | | | | | | Misc Python3 fixes
| | | * | | | use stand-in value if maxint is not availableAdrian Tschira2018-05-191-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
| | | * | | | fix py3 intern and remove unnecessary py3 encodeAdrian Tschira2018-05-191-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
| | | * | | | py3-ize url previewAdrian Tschira2018-05-191-3/+5
| | | |/ / /
| | * | | | Merge pull request #3245 from NotAFile/batch-iterAmber Brown2018-05-241-0/+18
| | |\ \ \ \ | | | |_|/ / | | |/| | | Add batch_iter to utils
| | | * | | Add batch_iter to utilsAdrian Tschira2018-05-191-0/+18
| | | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's a frequent idiom I noticed where an iterable is split up into a number of chunks/batches. Unfortunately that method does not work with iterators like dict.keys() in python3. This implementation works with iterators. Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | Merge pull request #3277 from matrix-org/dbkr/remove_from_user_dirDavid Baker2018-05-242-0/+11
| | |\ \ \ | | | | | | | | | | | | Remove users from user directory on deactivate
| | | * | | Remove users from user directory on deactivateDavid Baker2018-05-242-0/+11
| | | | | |
| | * | | | Merge pull request #3243 from NotAFile/py3-six-3Erik Johnston2018-05-246-11/+23
| | |\ \ \ \ | | | | | | | | | | | | | | Replace some more comparisons with six
| | | * | | | Replace some more comparisons with sixAdrian Tschira2018-05-196-11/+23
| | | | |/ / | | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | plus a bonus b"" string I missed last time Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | | Merge branch 'master' into developNeil Johnson2018-05-241-1/+1
| | |\ \ \ \ | | | |_|/ / | | |/| | |
| | | * | | bump versionNeil Johnson2018-05-241-1/+1
| | | | |/ | | | |/|
| | * | | Merge pull request #3261 from matrix-org/erikj/pagination_fixesErik Johnston2018-05-241-9/+22
| | |\ \ \ | | | | | | | | | | | | Fix federation backfill bugs
| | | * | | Use iter* methodsErik Johnston2018-05-221-7/+7
| | | | | |
| | | * | | Fix that states is a dict of dictsErik Johnston2018-05-221-1/+4
| | | | | |
| | | * | | get_domains_from_state returns list of tuplesErik Johnston2018-05-221-2/+12
| | | | | |
| | * | | | Merge pull request #3267 from matrix-org/erikj/iter_filterErik Johnston2018-05-241-5/+5
| | |\ \ \ \ | | | |_|/ / | | |/| | | Use iter* methods for _filter_events_for_server
| | | * | | s/values/itervalues/Erik Johnston2018-05-231-1/+1
| | | | | |
| | | * | | Use iter* methods for _filter_events_for_serverErik Johnston2018-05-231-4/+4
| | | | | |
| | * | | | Merge pull request #3273 from matrix-org/rav/server_notices_avatar_urlRichard van der Hoff2018-05-242-6/+26
| | |\ \ \ \ | | | | | | | | | | | | | | Allow overriding the server_notices user's avatar
| | | * | | | Allow overriding the server_notices user's avatarRichard van der Hoff2018-05-232-6/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | probably should have done this in the first place, like @turt2live suggested.
| | * | | | | Merge branch 'release-v0.30.0' into rav/localpart_in_consent_uriRichard van der Hoff2018-05-234-8/+55
| | |\| | | |
| | | * | | | Merge pull request #3271 from matrix-org/rav/consent_uri_in_messagesRichard van der Hoff2018-05-233-7/+50
| | | |\ \ \ \ | | | | | | | | | | | | | | | | Support for putting %(consent_uri)s in messages
| | | | * | | | Support for putting %(consent_uri)s in messagesRichard van der Hoff2018-05-233-7/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make it possible to put the URI in the error message and the server notice that get sent by the server
| | | * | | | | fix typoRichard van der Hoff2018-05-231-1/+1
| | | | | | | |
| | | * | | | | Block attempts to send server notices to remote usersRichard van der Hoff2018-05-231-0/+4
| | | |/ / / /
| | * / / / / Use the localpart in the consent uriRichard van der Hoff2018-05-231-1/+3
| | |/ / / / | | | | | | | | | | | | | | | | | | ... because it's shorter.
| | * / / / bump version and changelogNeil Johnson2018-05-231-1/+1
| | |/ / /
| | * | | Remove unused string formatting paramErik Johnston2018-05-221-1/+0
| | | | |
| | * | | Don't support limitless paginationErik Johnston2018-05-221-8/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The pagination storage function supported not specifiying a limit on the number of events returned. This was triggered when using the search or context API with a limit of zero, which the storage function took to mean not being limited.
| | * | | fix synchrotronhera2018-05-221-1/+1
| | | | |
| | * | | custom error code for not leaving server notices roomRichard van der Hoff2018-05-222-0/+2
| | | | |
| | * | | comment typoDavid Baker2018-05-221-1/+1
| | | | |
| * | | | pepeighttttAmber Brown2018-05-231-0/+1
| | | | |
| * | | | add back CPU metricsAmber Brown2018-05-231-1/+35
| | | | |
| * | | | fixesAmber Brown2018-05-233-13/+13
| | | | |
| * | | | more cleanupAmber Brown2018-05-223-9/+11
| | | | |
| * | | | cleanupAmber Brown2018-05-229-29/+64
| | | | |
| * | | | cleanup pep8 errorsAmber Brown2018-05-225-37/+114
| | | | |
| * | | | fixesAmber Brown2018-05-227-24/+52
| | | | |
| * | | | fix the test failuresAmber Brown2018-05-221-1/+1
| | | | |
| * | | | cleanups, self-registrationAmber Brown2018-05-223-19/+12
| | | | |
| * | | | Merge remote-tracking branch 'origin/develop' into 3218-official-promAmber Brown2018-05-2246-203/+1633
| |\| | |
| | * | | Merge pull request #3262 from matrix-org/rav/has_already_consentedRichard van der Hoff2018-05-221-4/+18
| | |\ \ \ | | | | | | | | | | | | Add a 'has_consented' template var to consent forms
| | | * | | Add a 'has_consented' template var to consent formsRichard van der Hoff2018-05-221-3/+14
| | | | | | | | | | | | | | | | | | | | | | | | fixes #3260
| | | * | | Enable auto-escaping for the consent templatesRichard van der Hoff2018-05-221-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | ... to reduce the risk of somebody introducing an html injection attack...
| | * | | | Fix dependency on jinja2Richard van der Hoff2018-05-221-1/+1
| | |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Delay the import of ConsentResource, so that we can get away without jinja2 if people don't have the consent resource enabled. Fixes #3259
| | * / / Reject attempts to send event before privacy consent is givenRichard van der Hoff2018-05-225-2/+178
| | |/ / | | | | | | | | | | | | | | | | | | | | Returns an M_CONSENT_NOT_GIVEN error (cf https://github.com/matrix-org/matrix-doc/issues/1252) if consent is not yet given.
| | * | Merge pull request #3236 from matrix-org/rav/consent_noticeRichard van der Hoff2018-05-2213-18/+322
| | |\ \ | | | | | | | | | | Send users a server notice about consent
| | | * | Stub out ServerNoticesSender on the workersRichard van der Hoff2018-05-226-8/+66
| | | | | | | | | | | | | | | | | | | | | | | | | ... and have the sync endpoints call it directly rather than obsure indirection via PresenceHandler
| | | * | Move consent config parsing into ConsentConfigRichard van der Hoff2018-05-223-14/+20
| | | | | | | | | | | | | | | | | | | | turns out we need to reuse this, so it's better in the config class.
| | | * | Send users a server notice about consentRichard van der Hoff2018-05-229-8/+246
| | | | | | | | | | | | | | | | | | | | | | | | | When a user first syncs, we will send them a server notice asking them to consent to the privacy policy if they have not already done so.
| | | * | Rename 'version' param on user consent configRichard van der Hoff2018-05-222-5/+7
| | | | | | | | | | | | | | | | | | | | we're going to use it for the version we require too.
| | * | | CommentErik Johnston2018-05-221-1/+1
| | | | |
| | * | | Fix logcontext resource usage trackingErik Johnston2018-05-221-11/+27
| | | | |
| | * | | Merge pull request #3252 from matrix-org/erikj/in_flight_requestsErik Johnston2018-05-222-2/+162
| | |\ \ \ | | | |/ / | | |/| | Add in flight request metrics
| | | * | Don't store contextErik Johnston2018-05-221-8/+5
| | | | |
| | | * | Move in_flight_requests_count to be a callback metricErik Johnston2018-05-221-10/+21
| | | | |
| | | * | Add in flight request metricsErik Johnston2018-05-212-2/+154
| | | |/ | | | | | | | | | | | | | | | | This tracks CPU and DB usage while requests are in flight, rather than when we write the response.
| | * | Merge pull request #3255 from matrix-org/rav/fix_transactionsRichard van der Hoff2018-05-211-21/+21
| | |\ \ | | | | | | | | | | Stop the transaction cache caching failures
| | | * | Fix logcontext leak in HttpTransactionCacheRichard van der Hoff2018-05-211-25/+21
| | | | | | | | | | | | | | | | | | | | ONE DAY I WILL PURGE THE WORLD OF THIS EVIL
| | | * | Stop the transaction cache caching failuresRichard van der Hoff2018-05-211-9/+13
| | | |/ | | | | | | | | | | | | | | | | | | | | The transaction cache has some code which tries to stop it caching failures, but if the callback function failed straight away, then things would happen backwards and we'd end up with the failure stuck in the cache.
| | * / Tighter filtering for user_daily_visitsNeil Johnson2018-05-181-1/+5
| | |/
| | * fix psql compatability bugNeil Johnson2018-05-181-1/+1
| | |
| | * Merge branch 'master' into developNeil Johnson2018-05-181-1/+1
| | |\
| | * \ Merge pull request #3232 from matrix-org/rav/server_notices_roomRichard van der Hoff2018-05-1810-7/+309
| | |\ \ | | | | | | | | | | Infrastructure for a server notices room
| | | * | Better docstringsRichard van der Hoff2018-05-181-0/+16
| | | | |
| | | * | Make sure we reject attempts to invite the notices userRichard van der Hoff2018-05-183-0/+20
| | | | |
| | | * | Replace inline docstrings with "Attributes" in class docstringRichard van der Hoff2018-05-181-23/+15
| | | | |
| | | * | fix missing yield for server_notices_roomRichard van der Hoff2018-05-171-3/+4
| | | | |
| | | * | Infrastructure for a server notices roomRichard van der Hoff2018-05-179-7/+280
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Server Notices use a special room which the user can't dismiss. They are created on demand when some other bit of the code calls send_notice. (This doesn't actually do much yet becuse we don't call send_notice anywhere)
| | * | | Merge pull request #3235 from matrix-org/rav/fix_receipts_deferredRichard van der Hoff2018-05-181-7/+11
| | |\ \ \ | | | | | | | | | | | | Fix error in handling receipts
| | | * | | Fix error in handling receiptsRichard van der Hoff2018-05-181-7/+11
| | | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes an error which has been happening ever since #2158 (v0.21.0-rc1): > TypeError: argument of type 'ObservableDeferred' is not iterable fixes #3234
| | * | | Merge pull request #3233 from matrix-org/rav/remove_dead_codeRichard van der Hoff2018-05-181-55/+0
| | |\ \ \ | | | | | | | | | | | | Remove unused `update_external_syncs`
| | | * | | Remove unused `update_external_syncs`Richard van der Hoff2018-05-171-55/+0
| | | |/ / | | | | | | | | | | | | | | | This method isn't used anywhere. Burninate it.
| | * | | Merge pull request #3221 from matrix-org/erikj/purge_tokenErik Johnston2018-05-183-37/+69
| | |\ \ \ | | | |/ / | | |/| | Make purge_history operate on tokens
| | | * | Clarify commentErik Johnston2018-05-161-1/+2
| | | | |
| | | * | CommentsErik Johnston2018-05-161-0/+8
| | | | |
| | | * | Move and rename variableErik Johnston2018-05-161-3/+3
| | | | |
| | | * | Make purge_history operate on tokensErik Johnston2018-05-153-21/+25
| | | | | | | | | | | | | | | | | | | | As we're soon going to change how topological_ordering works
| | | * | Use events_to_purge table rather than tokenErik Johnston2018-05-151-15/+34
| | | | |
| | * | | Merge pull request #3225 from matrix-org/rav/move_creation_handlerRichard van der Hoff2018-05-176-11/+19
| | |\ \ \ | | | | | | | | | | | | Move RoomCreationHandler out of synapse.handlers.Handlers
| | | * | | Move RoomCreationHandler out of synapse.handlers.HandlersRichard van der Hoff2018-05-176-11/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Handlers is deprecated nowadays, so let's move this out before I add a new dependency on it. Also fix the docstrings on create_room.
| | * | | | Merge pull request #3212 from matrix-org/erikj/epa_streamErik Johnston2018-05-172-38/+16
| | |\ \ \ \ | | | | | | | | | | | | | | Use stream rather depth ordering for push actions
| | | * | | | Use stream rather depth ordering for push actionsErik Johnston2018-05-112-38/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This simplifies things as it is, but will also allow us to change the way we traverse topologically without having to update the way push actions work.
| | * | | | | Merge branch 'master' into developNeil Johnson2018-05-161-1/+1
| | |\ \ \ \ \ | | | |_|/ / / | | |/| | | |
| | * | | | | Merge pull request #3163 from matrix-org/cohort_analyticsNeil Johnson2018-05-166-5/+121
| | |\ \ \ \ \ | | | | | | | | | | | | | | | | user visit data
| | | * | | | | remove empty lineNeil Johnson2018-05-161-1/+0
| | | | | | | |
| | | * | | | | remove unused method recurring_user_daily_visit_statsNeil Johnson2018-05-161-3/+0
| | | | | | | |
| | | * | | | | style and further contraining queryNeil Johnson2018-05-161-8/+12
| | | | | | | |
| | | * | | | | pep8Neil Johnson2018-05-151-1/+0
| | | | | | | |
| | | * | | | | Limit query load of generate_user_daily_visitsNeil Johnson2018-05-152-27/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The aim is to keep track of when it was last called and only query from that point in time
| | | * | | | | instead of inserting user daily visit data at the end of the day, instead ↵Neil Johnson2018-05-142-43/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | insert incrementally through the day
| | | * | | | | Merge branch 'develop' of https://github.com/matrix-org/synapse into ↵Neil Johnson2018-05-1495-1117/+1616
| | | |\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | cohort_analytics
| | | * | | | | | remove user agent from data model, will just join on user_ipsNeil Johnson2018-05-011-12/+11
| | | | | | | | |
| | | * | | | | | add inidexes based on usageNeil Johnson2018-05-011-6/+2
| | | | | | | | |
| | | * | | | | | 10 mins seems more reasonable that every minuteNeil Johnson2018-05-011-1/+1
| | | | | | | | |
| | | * | | | | | pep8Neil Johnson2018-04-251-3/+4
| | | | | | | | |
| | | * | | | | | Generate user daily statsNeil Johnson2018-04-256-5/+112
| | | | | | | | |
| | * | | | | | | Merge pull request #3213 from matrix-org/rav/consent_handlerRichard van der Hoff2018-05-1611-5/+395
| | |\ \ \ \ \ \ \ | | | |_|_|_|_|/ / | | |/| | | | | | ConsentResource to gather policy consent from users
| | | * | | | | | ConsentResource to gather policy consent from usersRichard van der Hoff2018-05-1511-5/+395
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Hopefully there are enough comments and docs in this that it makes sense on its own.
| * | | | | | | | rest of the changesAmber Brown2018-05-216-145/+68
| | | | | | | | |
| * | | | | | | | replacing portionsAmber Brown2018-05-2122-414/+265
| | | | | | | | |
| * | | | | | | | don't need the resource portionAmber Brown2018-05-211-23/+0
| | | | | | | | |
| * | | | | | | | look at the Prometheus metrics insteadAmber Brown2018-05-211-5/+3
| | | | | | | | |
| * | | | | | | | remove old metrics libsAmber Brown2018-05-212-450/+0
| | |_|_|_|_|_|/ | |/| | | | | |
| * | | | | | | bump version, change logNeil Johnson2018-05-171-1/+1
| | |_|_|_|/ / | |/| | | | |
| * | | | | | bump version and changelog for 0.29.0 v0.29.0Neil Johnson2018-05-161-1/+1
| | | | | | |
| * | | | | | v0.29.0-rc1: bump version and change log v0.29.0-rc1Neil Johnson2018-05-141-1/+1
| |/ / / / /
| * | | | | Merge pull request #3201 from matrix-org/dbkr/leave_rooms_on_deactivateDavid Baker2018-05-143-2/+143
| |\ \ \ \ \ | | |_|_|/ / | |/| | | | Part user from rooms on account deactivate
| | * | | | Catch failure to part user from roomDavid Baker2018-05-101-7/+13
| | | | | |
| | * | | | Many docstringsDavid Baker2018-05-102-0/+36
| | | | | |
| | * | | | Oops, don't call function passed to run_in_backgroundDavid Baker2018-05-101-1/+1
| | | | | |
| | * | | | Prefix internal functionsDavid Baker2018-05-091-7/+7
| | | | | |
| | * | | | Add the schema fileDavid Baker2018-05-091-0/+25
| | | | | |
| | * | | | Indent failDavid Baker2018-05-091-1/+1
| | | | | |
| | * | | | Part deactivated users in the backgroundDavid Baker2018-05-092-1/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | One room at a time so we don't take out the whole server with leave events, and restart at server restart.
| | * | | | Part user from rooms on account deactivateDavid Baker2018-05-081-1/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This implements this very crudely: this probably isn't viable because parting a user from all their rooms could take a long time, and if the HS gets restarted in that time the process will be aborted.
| * | | | | Merge pull request #3208 from matrix-org/rav/more_refactor_request_handlerRichard van der Hoff2018-05-1123-27/+28
| |\ \ \ \ \ | | | | | | | | | | | | | | Set Server header in SynapseRequest
| | * | | | | Set Server header in SynapseRequestRichard van der Hoff2018-05-1023-27/+28
| | | |/ / / | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (instead of everywhere that writes a response. Or rather, the subset of places which write responses where we haven't forgotten it). This also means that we don't have to have the mysterious version_string attribute in anything with a request handler. Unfortunately it does mean that we have to pass the version string wherever we instantiate a SynapseSite, which has been c&ped 150 times, but that is code that ought to be cleaned up anyway really.
| * | | | | Merge pull request #3209 from damir-manapov/masterRichard van der Hoff2018-05-111-2/+0
| |\ \ \ \ \ | | |/ / / / | |/| | | | transaction_id, destination defined twice
| | * | | | transaction_id, destination twiceDamir Manapov2018-05-101-2/+0
| | | | | |
| * | | | | Remove redundant request_handler decoratorRichard van der Hoff2018-05-107-38/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is needless complexity; we might as well use the wrapper directly. Also rename wrap_request_handler->wrap_json_request_handler.
| * | | | | Factor wrap_request_handler_with_logging out of wrap_request_handlerRichard van der Hoff2018-05-101-54/+66
| | | | | | | | | | | | | | | | | | | | | | | | ... so that it can be used on non-JSON endpoints
| * | | | | Remove include_metrics paramRichard van der Hoff2018-05-101-17/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The metrics are now available via the request, so this is redundant and can go away at last.
| * | | | | Move outgoing_responses_counter handling to RequestMetricsRichard van der Hoff2018-05-102-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | it's much neater there.
| * | | | | Bump requests_counter in wrapped_request_handlerRichard van der Hoff2018-05-101-4/+11
| | | | | | | | | | | | | | | | | | | | | | | | less magic
| * | | | | Move RequestMetrics handling into SynapseRequest.processing()Richard van der Hoff2018-05-102-24/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It fits quite nicely here, and opens the path to getting rid of the "include_metrics" mess.
| * | | | | Make RequestMetrics take a raw time rather than a clockRichard van der Hoff2018-05-102-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | ... which is going to make it easier to move around.
| * | | | | Move request_id management into SynapseRequestRichard van der Hoff2018-05-102-15/+25
| | | | | |
| * | | | | Move RequestsMetrics to its own fileRichard van der Hoff2018-05-092-124/+151
| | |_|_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | This is useful in its own right, because server.py is full of stuff; but more importantly, I want to do some refactoring that will cause a circular reference as it is.
| * | | | Merge pull request #3199 from matrix-org/erikj/pagination_syncErik Johnston2018-05-092-45/+54
| |\ \ \ \ | | | | | | | | | | | | Refactor sync APIs to reuse pagination API
| | * | | | Add comment to sync as to why code path is splitErik Johnston2018-05-091-0/+5
| | | | | |
| | * | | | Refactor sync APIs to reuse pagination APIErik Johnston2018-05-092-44/+48
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The sync API often returns events in a topological rather than stream ordering, e.g. when the user joined the room or on initial sync. When this happens we can reuse existing pagination storage functions.
| | * | | | Don't unnecessarily require token to be stream tokenErik Johnston2018-05-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows calling the `get_recent_event_ids_for_room` function in more situations.
| * | | | | Merge pull request #3198 from matrix-org/erikj/fixup_return_paginationErik Johnston2018-05-093-8/+22
| |\ \ \ \ \ | | | | | | | | | | | | | | Refactor get_recent_events_for_room return type
| | * | | | | Fix returned token is no longer a tupleErik Johnston2018-05-091-1/+1
| | | | | | |
| | * | | | | Fix up commentErik Johnston2018-05-091-1/+1
| | | | | | |
| | * | | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵Erik Johnston2018-05-093-8/+10
| | |\ \ \ \ \ | | | |/ / / / | | |/| | | | | | | | | | | erikj/fixup_return_pagination
| | * | | | | Refactor get_recent_events_for_room return typeErik Johnston2018-05-093-7/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is no reason to return a tuple of tokens when the last token is always the token passed as an argument. Changing it makes it consistent with other storage APIs
| * | | | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵Erik Johnston2018-05-093-8/+10
| |\ \ \ \ \ \ | | | |/ / / / | | |/| | | | | | | | | | | erikj/remove_membership_change
| | * | | | | Merge pull request #3196 from matrix-org/erikj/pagination_returnErik Johnston2018-05-091-28/+49
| | |\ \ \ \ \ | | | | | | | | | | | | | | | | Refactor pagination DB API to return concrete type
| | | * | | | | Update commentsErik Johnston2018-05-091-5/+6
| | | |/ / / /
| | * | | | | Merge pull request #3195 from matrix-org/erikj/pagination_refactorErik Johnston2018-05-091-51/+27
| | |\ \ \ \ \ | | | | | | | | | | | | | | | | Refactor recent events func to use pagination func
| | * \ \ \ \ \ Merge pull request #3193 from matrix-org/erikj/pagination_refactorErik Johnston2018-05-091-110/+99
| | |\ \ \ \ \ \ | | | |_|_|_|/ / | | |/| | | | | Refactor /context to reuse pagination storage functions
| | * | | | | | Merge pull request #3190 from mujx/notif-token-fixRichard van der Hoff2018-05-081-1/+1
| | |\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | notifications: Convert next_token to string according to the spec
| | | * | | | | | notifications: Convert next_token to string according to the specKonstantinos Sideris2018-05-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the parameter is serialized as an integer. Signed-off-by: Konstantinos Sideris <sideris.konstantin@gmail.com>
| | * | | | | | | Note that label values can be anythingErik Johnston2018-05-031-1/+2
| | | | | | | | |
| | * | | | | | | Fix metrics that have integer value labelsErik Johnston2018-05-031-1/+1
| | |/ / / / / /
| * | | | / / / Remove unused code path from member change DB funcErik Johnston2018-05-091-24/+10
| | |_|_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | The function is never called without a from_key, so we can remove all the handling for that scenario.
| * | | | | | Refactor pagination DB API to return concrete typeErik Johnston2018-05-091-28/+48
| | |_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | This makes it easier to document what is being returned by the storage functions and what some functions expect as arguments.
| * | | | | Remove unused from_token paramErik Johnston2018-05-091-7/+4
| | | | | |
| * | | | | Refactor recent events func to use pagination funcErik Johnston2018-05-091-48/+27
| | |/ / / | |/| | | | | | | | | | | | | This also removes a cache that is unlikely to ever get hit.
| * | | | Fix up comments and make function privateErik Johnston2018-05-091-7/+7
| | | | |
| * | | | Reuse existing pagination code for context APIErik Johnston2018-05-081-75/+15
| | | | |
| * | | | Parse tokens before calling DB functionErik Johnston2018-05-081-14/+18
| | | | |
| * | | | Only fetch required fields from databaseErik Johnston2018-05-081-1/+2
| | | | |
| * | | | Split paginate_room_events storage functionErik Johnston2018-05-081-28/+72
| |/ / /
| * | | Merge remote-tracking branch 'origin/develop' into rav/warn_on_logcontext_failRichard van der Hoff2018-05-03137-1294/+2609
| |\ \ \
| | * \ \ Merge pull request #3183 from matrix-org/rav/moar_logcontext_leaksRichard van der Hoff2018-05-031-3/+14
| | |\ \ \ | | | | | | | | | | | | Fix logcontext leaks in rate limiter
| | | * | | Fix logcontext leaks in rate limiterRichard van der Hoff2018-05-031-3/+14
| | | | | |
| | * | | | Merge pull request #3182 from Half-Shot/hs/fix-twisted-shutdownRichard van der Hoff2018-05-031-3/+8
| | |\ \ \ \ | | | | | | | | | | | | | | Fix 'Unhandled Error' logs with Twisted 18.4
| | | * | | | Don't abortConnection() if the transport connection has already closed.Will Hunt2018-05-031-3/+8
| | | | | | |
| | * | | | | Merge pull request #3178 from matrix-org/rav/fix_request_timeoutsRichard van der Hoff2018-05-031-1/+1
| | |\ \ \ \ \ | | | |_|/ / / | | |/| | | | fix http request timeout code
| | | * | | | add missing param to cancelled_to_request_timed_out_errorRichard van der Hoff2018-05-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This gets two arguments, not one.
| | * | | | | Merge pull request #3141 from matrix-org/erikj/fixup_stateErik Johnston2018-05-031-37/+67
| | |\ \ \ \ \ | | | | | | | | | | | | | | | | Refactor event storage to prepare for changes in state calculations
| | | * | | | | Fix up grammarErik Johnston2018-05-031-3/+3
| | | | | | | |
| | | * | | | | Refactor event storage to not require stateErik Johnston2018-04-271-37/+67
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is in preparation for using contexts that may or may not have the current_state_ids set. This will allow us to avoid unnecessarily pulling out state for an event on the master process when using workers. We also add a check to see if the state groups of the old extremities are the same as the new ones.
| | * | | | | | Merge pull request #3161 from NotAFile/remove-v1authRichard van der Hoff2018-05-033-12/+6
| | |\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Make Client-Server API return 403 for invalid token
| | | * | | | | | Burminate v1authAdrian Tschira2018-04-303-12/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This closes #2602 v1auth was created to account for the differences in status code between the v1 and v2_alpha revisions of the protocol (401 vs 403 for invalid tokens). However since those protocols were merged, this makes the r0 version/endpoint internally inconsistent, and violates the specification for the r0 endpoint. This might break clients that rely on this inconsistency with the specification. This is said to affect the legacy angular reference client. However, I feel that restoring parity with the spec is more important. Either way, it is critical to inform developers about this change, in case they rely on the illegal behaviour. Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | | | | | Merge pull request #3175 from matrix-org/erikj/escape_metric_valuesErik Johnston2018-05-031-2/+28
| | |\ \ \ \ \ \ \ | | | |_|_|/ / / / | | |/| | | | | | Escape label values in prometheus metrics
| | | * | | | | | Make _escape_character take MatchObjectErik Johnston2018-05-021-2/+10
| | | | | | | | |
| | | * | | | | | Escape label values in prometheus metricsErik Johnston2018-05-021-2/+20
| | | | | | | | |
| | * | | | | | | Merge pull request #3170 from matrix-org/rav/more_logcontext_leaksRichard van der Hoff2018-05-021-22/+38
| | |\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Fix a class of logcontext leaks
| | | * | | | | | | Merge branch 'develop' into rav/more_logcontext_leaksRichard van der Hoff2018-05-022-2/+2
| | | |\| | | | | |
| | | * | | | | | | Fix a class of logcontext leaksRichard van der Hoff2018-05-021-22/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | So, it turns out that if you have a first `Deferred` `D1`, you can add a callback which returns another `Deferred` `D2`, and `D2` must then complete before any further callbacks on `D1` will execute (and later callbacks on `D1` get the *result* of `D2` rather than `D2` itself). So, `D1` might have `called=True` (as in, it has started running its callbacks), but any new callbacks added to `D1` won't get run until `D2` completes - so if you `yield D1` in an `inlineCallbacks` function, your `yield` will 'block'. In conclusion: some of our assumptions in `logcontext` were invalid. We need to make sure that we don't optimise out the logcontext juggling when this situation happens. Fortunately, it is easy to detect by checking `D1.paused`.
| | * | | | | | | | Fix logcontext leak in media repoRichard van der Hoff2018-05-022-1/+4
| | | |/ / / / / / | | |/| | | | | | | | | | | | | | | | | | | | | | | | Make FileResponder.write_to_consumer uphold the logcontext contract
| | * | | | | | | Merge pull request #3168 from matrix-org/rav/fix_logformatterRichard van der Hoff2018-05-021-1/+1
| | |\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Fix incorrect reference to StringIO
| | | * | | | | | | Fix incorrect reference to StringIORichard van der Hoff2018-05-021-1/+1
| | | |/ / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | This was introduced in 4f2f5171
| | * | | | | | | Merge branch 'master' into developNeil Johnson2018-05-011-1/+1
| | |\ \ \ \ \ \ \ | | | |/ / / / / / | | |/| | | | / / | | | | |_|_|/ / | | | |/| | | |
| | | * | | | | Update __init__.pyNeil Johnson2018-05-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | bump version
| | * | | | | | Merge branch 'release-v0.28.1' into developRichard van der Hoff2018-05-013-4/+26
| | |\| | | | | | | | |/ / / / | | |/| | | |
| | | * | | | Merge commit '33f469b' into release-v0.28.1Richard van der Hoff2018-05-013-4/+26
| | | |\ \ \ \
| | | | * | | | Apply some limits to depth to counter abuseRichard van der Hoff2018-05-013-4/+26
| | | | |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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
| | | * / / / Miscellaneous fixes to python_dependenciesRichard van der Hoff2018-05-011-1/+19
| | | |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * add some doc about wtf this thing does * pin Twisted to < 18.4 * add explicit dep on six (fixes #3089)
| | * | | | Fixes #3135 - Replace _OpenSSLECCurve with crypto.get_elliptic_curve (#3157)Will Hunt2018-04-302-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fixes #3135 Signed-off-by: Will Hunt will@half-shot.uk
| | * | | | add guard for None on purge_history apiKrombel2018-04-301-1/+14
| | | | | |
| | * | | | Merge pull request #3129 from matrix-org/matthew/fix_group_dupsMatthew Hodgson2018-04-301-0/+57
| | |\ \ \ \ | | | | | | | | | | | | | | remove duplicates from groups tables
| | | * | | | fix missing importMatthew Hodgson2018-04-281-0/+1
| | | | | | |
| | | * | | | pep8Matthew Hodgson2018-04-281-3/+5
| | | | | | |
| | | * | | | make it work with sqliteMatthew Hodgson2018-04-282-34/+54
| | | | | | |
| | | * | | | remove duplicates from groups tablesMatthew Hodgson2018-04-251-0/+34
| | | | |_|/ | | | |/| | | | | | | | | | | | | | | | | | | | and rename inconsistently named indexes. Based on https://github.com/matrix-org/synapse/pull/3128 - thanks @vurpo\!
| | * | | | Merge pull request #3143 from matrix-org/rav/remove_redundant_preserve_fnRichard van der Hoff2018-04-301-4/+2
| | |\ \ \ \ | | | | | | | | | | | | | | Remove redundant call to preserve_fn
| | | * | | | Remove redundant call to preserve_fnRichard van der Hoff2018-04-301-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | submit_event_for_as doesn't return a deferred anyway, so this is pointless.
| | * | | | | Merge pull request #3144 from ↵Richard van der Hoff2018-04-301-1/+7
| | |\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | matrix-org/rav/run_in_background_exception_handling Trap exceptions thrown within run_in_background
| | | * | | | | Trap exceptions thrown within run_in_backgroundRichard van der Hoff2018-04-271-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Turn any exceptions that get thrown synchronously within run_in_background into Failures instead.
| | * | | | | | Merge pull request #3102 from NotAFile/py3-attributeerrorRichard van der Hoff2018-04-301-3/+15
| | |\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Make event properties raise AttributeError instead
| | | * | | | | | add comment explaining attributeerrorAdrian Tschira2018-04-301-0/+3
| | | | | | | | |
| | | * | | | | | Make event properties raise AttributeError insteadAdrian Tschira2018-04-151-3/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | They raised KeyError before. I'm changing this because the code uses hasattr() to check for the presence of a key. This worked accidentally before, because hasattr() silences all exceptions in python 2. However, in python3, this isn't the case anymore. I had a look around to see if anything depended on this raising a KeyError and I couldn't find anything. Of course, I could have simply missed it. Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | | | | | Merge pull request #3152 from NotAFile/py3-local-importsRichard van der Hoff2018-04-304-7/+7
| | |\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | make imports local
| | | * | | | | | | make imports localAdrian Tschira2018-04-284-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | | | | | | Merge pull request #3153 from NotAFile/py3-httplibRichard van der Hoff2018-04-301-3/+3
| | |\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | move httplib import to six
| | | * | | | | | | | move httplib import to sixAdrian Tschira2018-04-281-3/+3
| | | |/ / / / / / /
| | * | | | | | | | Merge pull request #3151 from NotAFile/py3-xrange-1Richard van der Hoff2018-04-309-11/+28
| | |\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Move more xrange to six
| | | * \ \ \ \ \ \ \ Merge branch 'develop' into py3-xrange-1Richard van der Hoff2018-04-3039-110/+143
| | | |\ \ \ \ \ \ \ \
| | | * | | | | | | | | Move more xrange to sixAdrian Tschira2018-04-289-11/+28
| | | | |/ / / / / / / | | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | plus a bonus next() Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | | | | | | | Merge pull request #3150 from NotAFile/py3-listcomp-yieldRichard van der Hoff2018-04-301-5/+9
| | |\ \ \ \ \ \ \ \ \ | | | |_|/ / / / / / / | | |/| | | | | | | | Don't yield in list comprehensions
| | | * | | | | | | | Don't yield in list comprehensionsAdrian Tschira2018-04-281-5/+9
| | | |/ / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I've tried to grep for more of this with no success. Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | | | | | | Merge pull request #3085 from NotAFile/py3-config-text-modeRichard van der Hoff2018-04-302-4/+4
| | |\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Open config file in non-bytes mode
| | | * | | | | | | | open log_config in text mode tooAdrian Tschira2018-04-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
| | | * | | | | | | | Open config file in non-bytes modeAdrian Tschira2018-04-101-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Nothing written into it is encoded, so it makes little sense, but it does break in python3 the way it was before. The variable names were adjusted to be less misleading. Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | | | | | | | Merge pull request #3084 from NotAFile/py3-certs-byte-modeRichard van der Hoff2018-04-301-2/+2
| | |\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | Open certificate files as bytes
| | | * | | | | | | | | Open certificate files as bytesAdrian Tschira2018-04-101-2/+2
| | | |/ / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | That's what pyOpenSSL expects on python3 Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | | | | | | | Merge pull request #3154 from NotAFile/py3-stringioRichard van der Hoff2018-04-302-3/+3
| | |\ \ \ \ \ \ \ \ \ | | | |_|_|_|_|/ / / / | | |/| | | | | | | | Replace stringIO imports with six
| | | * | | | | | | | replace stringIO importsAdrian Tschira2018-04-282-3/+3
| | | | |/ / / / / / | | | |/| | | | | |
| | * | | | | | | | Merge pull request #3155 from NotAFile/py3-bytes-1Richard van der Hoff2018-04-304-7/+10
| | |\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | more bytes strings
| | | * | | | | | | | more bytes stringsAdrian Tschira2018-04-294-7/+10
| | | |/ / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
| | * | | | | | | | Merge pull request #3140 from matrix-org/rav/use_run_in_backgroundRichard van der Hoff2018-04-3022-72/+98
| | |\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Use run_in_background in preference to preserve_fn
| | | * | | | | | | | 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-2726-257/+388
| | | |\ \ \ \ \ \ \ \
| | | * | | | | | | | | Use run_in_background in preference to preserve_fnRichard van der Hoff2018-04-2722-71/+97
| | | | |_|_|_|/ / / / | | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
| | * | | | | | | | | Merge pull request #3156 from NotAFile/py3-hmac-bytesRichard van der Hoff2018-04-302-11/+15
| | |\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | Construct HMAC as bytes on py3
| | | * | | | | | | | | Construct HMAC as bytes on py3Adrian Tschira2018-04-292-11/+15
| | | | |_|/ / / / / / | | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>