Merge remote-tracking branch 'origin/develop' into matrix-org-hotfixes
This commit is contained in:
commit
9583a06178
|
@ -22,7 +22,7 @@ jobs:
|
|||
path: book
|
||||
|
||||
- name: 📤 Deploy to Netlify
|
||||
uses: matrix-org/netlify-pr-preview@v2
|
||||
uses: matrix-org/netlify-pr-preview@v3
|
||||
with:
|
||||
path: book
|
||||
owner: ${{ github.event.workflow_run.head_repository.owner.login }}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Support MSC4069: Inhibit profile propagation.
|
|
@ -0,0 +1 @@
|
|||
Add a Postgres `REPLICA IDENTITY` to tables that do not have an implicit one. This should allow use of Postgres logical replication.
|
|
@ -0,0 +1 @@
|
|||
Add an autojoin setting for the notices room so users get joined directly instead of receiving an invite.
|
|
@ -0,0 +1 @@
|
|||
Switch the example UNIX socket paths to /run. Add HAProxy example configuration for UNIX sockets.
|
|
@ -0,0 +1 @@
|
|||
Add documentation for how to validate the configuration file with synapse.config script.
|
|
@ -0,0 +1 @@
|
|||
Fix a bug introduced in Synapse 1.7.2 where rooms whose power levels lacked an `events` field could not be upgraded.
|
|
@ -0,0 +1 @@
|
|||
Fix GET /_synapse/admin/v1/federation/destinations returning null (instead of 0) for `retry_last_ts` and `retry_interval`.
|
|
@ -0,0 +1 @@
|
|||
Add a Postgres `REPLICA IDENTITY` to tables that do not have an implicit one. This should allow use of Postgres logical replication.
|
|
@ -181,7 +181,11 @@ frontend matrix-federation
|
|||
backend matrix
|
||||
server matrix 127.0.0.1:8008
|
||||
```
|
||||
|
||||
Example configuration, if using a UNIX socket. The configuration lines regarding the frontends do not need to be modified.
|
||||
```
|
||||
backend matrix
|
||||
server matrix unix@/run/synapse/main_public.sock
|
||||
```
|
||||
|
||||
[Delegation](delegate.md) example:
|
||||
```
|
||||
|
|
|
@ -46,6 +46,7 @@ server_notices:
|
|||
system_mxid_display_name: "Server Notices"
|
||||
system_mxid_avatar_url: "mxc://server.com/oumMVlgDnLYFaPVkExemNVVZ"
|
||||
room_name: "Server Notices"
|
||||
auto_join: true
|
||||
```
|
||||
|
||||
The only compulsory setting is `system_mxid_localpart`, which defines the user
|
||||
|
@ -55,6 +56,8 @@ room which will be created.
|
|||
`system_mxid_display_name` and `system_mxid_avatar_url` can be used to set the
|
||||
displayname and avatar of the Server Notices user.
|
||||
|
||||
`auto_join` will autojoin users to the notices room instead of sending an invite.
|
||||
|
||||
## Sending notices
|
||||
|
||||
To send server notices to users you can use the
|
||||
|
|
|
@ -33,6 +33,23 @@ In addition, configuration options referring to size use the following suffixes:
|
|||
For example, setting `max_avatar_size: 10M` means that Synapse will not accept files larger than 10,485,760 bytes
|
||||
for a user avatar.
|
||||
|
||||
## Config Validation
|
||||
|
||||
The configuration file can be validated with the following command:
|
||||
```bash
|
||||
python -m synapse.config read <config key to print> -c <path to config>
|
||||
```
|
||||
|
||||
To validate the entire file, omit `read <config key to print>`:
|
||||
```bash
|
||||
python -m synapse.config -c <path to config>
|
||||
```
|
||||
|
||||
To see how to set other options, check the help reference:
|
||||
```bash
|
||||
python -m synapse.config --help
|
||||
```
|
||||
|
||||
### YAML
|
||||
The configuration file is a [YAML](https://yaml.org/) file, which means that certain syntax rules
|
||||
apply if you want your config file to be read properly. A few helpful things to know:
|
||||
|
@ -566,7 +583,7 @@ listeners:
|
|||
# Note that x_forwarded will default to true, when using a UNIX socket. Please see
|
||||
# https://matrix-org.github.io/synapse/latest/reverse_proxy.html.
|
||||
#
|
||||
- path: /var/run/synapse/main_public.sock
|
||||
- path: /run/synapse/main_public.sock
|
||||
type: http
|
||||
resources:
|
||||
- names: [client, federation]
|
||||
|
@ -3815,6 +3832,8 @@ Sub-options for this setting include:
|
|||
* `system_mxid_display_name`: set the display name of the "notices" user
|
||||
* `system_mxid_avatar_url`: set the avatar for the "notices" user
|
||||
* `room_name`: set the room name of the server notices room
|
||||
* `auto_join`: boolean. If true, the user will be automatically joined to the room instead of being invited.
|
||||
Defaults to false. _Added in Synapse 1.98.0._
|
||||
|
||||
Example configuration:
|
||||
```yaml
|
||||
|
@ -3823,6 +3842,7 @@ server_notices:
|
|||
system_mxid_display_name: "Server Notices"
|
||||
system_mxid_avatar_url: "mxc://server.com/oumMVlgDnLYFaPVkExemNVVZ"
|
||||
room_name: "Server Notices"
|
||||
auto_join: true
|
||||
```
|
||||
---
|
||||
### `enable_room_list_search`
|
||||
|
@ -4215,9 +4235,9 @@ Example configuration(#2, for UNIX sockets):
|
|||
```yaml
|
||||
instance_map:
|
||||
main:
|
||||
path: /var/run/synapse/main_replication.sock
|
||||
path: /run/synapse/main_replication.sock
|
||||
worker1:
|
||||
path: /var/run/synapse/worker1_replication.sock
|
||||
path: /run/synapse/worker1_replication.sock
|
||||
```
|
||||
---
|
||||
### `stream_writers`
|
||||
|
@ -4403,13 +4423,13 @@ Example configuration(#2, using UNIX sockets with a `replication` listener):
|
|||
```yaml
|
||||
worker_listeners:
|
||||
- type: http
|
||||
path: /var/run/synapse/worker_public.sock
|
||||
resources:
|
||||
- names: [client, federation]
|
||||
- type: http
|
||||
path: /var/run/synapse/worker_replication.sock
|
||||
path: /run/synapse/worker_replication.sock
|
||||
resources:
|
||||
- names: [replication]
|
||||
- type: http
|
||||
path: /run/synapse/worker_public.sock
|
||||
resources:
|
||||
- names: [client, federation]
|
||||
```
|
||||
---
|
||||
### `worker_manhole`
|
||||
|
|
|
@ -454,34 +454,34 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "cryptography"
|
||||
version = "41.0.6"
|
||||
version = "41.0.7"
|
||||
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "cryptography-41.0.6-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:0f27acb55a4e77b9be8d550d762b0513ef3fc658cd3eb15110ebbcbd626db12c"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:ae236bb8760c1e55b7a39b6d4d32d2279bc6c7c8500b7d5a13b6fb9fc97be35b"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afda76d84b053923c27ede5edc1ed7d53e3c9f475ebaf63c68e69f1403c405a8"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da46e2b5df770070412c46f87bac0849b8d685c5f2679771de277a422c7d0b86"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ff369dd19e8fe0528b02e8df9f2aeb2479f89b1270d90f96a63500afe9af5cae"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b648fe2a45e426aaee684ddca2632f62ec4613ef362f4d681a9a6283d10e079d"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5daeb18e7886a358064a68dbcaf441c036cbdb7da52ae744e7b9207b04d3908c"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:068bc551698c234742c40049e46840843f3d98ad7ce265fd2bd4ec0d11306596"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-win32.whl", hash = "sha256:2132d5865eea673fe6712c2ed5fb4fa49dba10768bb4cc798345748380ee3660"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-win_amd64.whl", hash = "sha256:48783b7e2bef51224020efb61b42704207dde583d7e371ef8fc2a5fb6c0aabc7"},
|
||||
{file = "cryptography-41.0.6-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:8efb2af8d4ba9dbc9c9dd8f04d19a7abb5b49eab1f3694e7b5a16a5fc2856f5c"},
|
||||
{file = "cryptography-41.0.6-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c5a550dc7a3b50b116323e3d376241829fd326ac47bc195e04eb33a8170902a9"},
|
||||
{file = "cryptography-41.0.6-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:85abd057699b98fce40b41737afb234fef05c67e116f6f3650782c10862c43da"},
|
||||
{file = "cryptography-41.0.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f39812f70fc5c71a15aa3c97b2bbe213c3f2a460b79bd21c40d033bb34a9bf36"},
|
||||
{file = "cryptography-41.0.6-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:742ae5e9a2310e9dade7932f9576606836ed174da3c7d26bc3d3ab4bd49b9f65"},
|
||||
{file = "cryptography-41.0.6-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:35f3f288e83c3f6f10752467c48919a7a94b7d88cc00b0668372a0d2ad4f8ead"},
|
||||
{file = "cryptography-41.0.6-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4d03186af98b1c01a4eda396b137f29e4e3fb0173e30f885e27acec8823c1b09"},
|
||||
{file = "cryptography-41.0.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b27a7fd4229abef715e064269d98a7e2909ebf92eb6912a9603c7e14c181928c"},
|
||||
{file = "cryptography-41.0.6-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:398ae1fc711b5eb78e977daa3cbf47cec20f2c08c5da129b7a296055fbb22aed"},
|
||||
{file = "cryptography-41.0.6-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7e00fb556bda398b99b0da289ce7053639d33b572847181d6483ad89835115f6"},
|
||||
{file = "cryptography-41.0.6-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:60e746b11b937911dc70d164060d28d273e31853bb359e2b2033c9e93e6f3c43"},
|
||||
{file = "cryptography-41.0.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3288acccef021e3c3c10d58933f44e8602cf04dba96d9796d70d537bb2f4bbc4"},
|
||||
{file = "cryptography-41.0.6.tar.gz", hash = "sha256:422e3e31d63743855e43e5a6fcc8b4acab860f560f9321b0ee6269cc7ed70cc3"},
|
||||
{file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:3c78451b78313fa81607fa1b3f1ae0a5ddd8014c38a02d9db0616133987b9cdf"},
|
||||
{file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:928258ba5d6f8ae644e764d0f996d61a8777559f72dfeb2eea7e2fe0ad6e782d"},
|
||||
{file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a1b41bc97f1ad230a41657d9155113c7521953869ae57ac39ac7f1bb471469a"},
|
||||
{file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:841df4caa01008bad253bce2a6f7b47f86dc9f08df4b433c404def869f590a15"},
|
||||
{file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5429ec739a29df2e29e15d082f1d9ad683701f0ec7709ca479b3ff2708dae65a"},
|
||||
{file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:43f2552a2378b44869fe8827aa19e69512e3245a219104438692385b0ee119d1"},
|
||||
{file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:af03b32695b24d85a75d40e1ba39ffe7db7ffcb099fe507b39fd41a565f1b157"},
|
||||
{file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:49f0805fc0b2ac8d4882dd52f4a3b935b210935d500b6b805f321addc8177406"},
|
||||
{file = "cryptography-41.0.7-cp37-abi3-win32.whl", hash = "sha256:f983596065a18a2183e7f79ab3fd4c475205b839e02cbc0efbbf9666c4b3083d"},
|
||||
{file = "cryptography-41.0.7-cp37-abi3-win_amd64.whl", hash = "sha256:90452ba79b8788fa380dfb587cca692976ef4e757b194b093d845e8d99f612f2"},
|
||||
{file = "cryptography-41.0.7-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:079b85658ea2f59c4f43b70f8119a52414cdb7be34da5d019a77bf96d473b960"},
|
||||
{file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b640981bf64a3e978a56167594a0e97db71c89a479da8e175d8bb5be5178c003"},
|
||||
{file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e3114da6d7f95d2dee7d3f4eec16dacff819740bbab931aff8648cb13c5ff5e7"},
|
||||
{file = "cryptography-41.0.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d5ec85080cce7b0513cfd233914eb8b7bbd0633f1d1703aa28d1dd5a72f678ec"},
|
||||
{file = "cryptography-41.0.7-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7a698cb1dac82c35fcf8fe3417a3aaba97de16a01ac914b89a0889d364d2f6be"},
|
||||
{file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:37a138589b12069efb424220bf78eac59ca68b95696fc622b6ccc1c0a197204a"},
|
||||
{file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:68a2dec79deebc5d26d617bfdf6e8aab065a4f34934b22d3b5010df3ba36612c"},
|
||||
{file = "cryptography-41.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:09616eeaef406f99046553b8a40fbf8b1e70795a91885ba4c96a70793de5504a"},
|
||||
{file = "cryptography-41.0.7-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48a0476626da912a44cc078f9893f292f0b3e4c739caf289268168d8f4702a39"},
|
||||
{file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c7f3201ec47d5207841402594f1d7950879ef890c0c495052fa62f58283fde1a"},
|
||||
{file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c5ca78485a255e03c32b513f8c2bc39fedb7f5c5f8535545bdc223a03b24f248"},
|
||||
{file = "cryptography-41.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6c391c021ab1f7a82da5d8d0b3cee2f4b2c455ec86c8aebbc84837a631ff309"},
|
||||
{file = "cryptography-41.0.7.tar.gz", hash = "sha256:13f93ce9bea8016c253b34afc6bd6a75993e5c40672ed5405a9c832f0d4a00bc"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -712,13 +712,13 @@ idna = ">=2.5"
|
|||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "3.4"
|
||||
version = "3.6"
|
||||
description = "Internationalized Domain Names in Applications (IDNA)"
|
||||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
files = [
|
||||
{file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
|
||||
{file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
|
||||
{file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"},
|
||||
{file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1611,13 +1611,13 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "phonenumbers"
|
||||
version = "8.13.23"
|
||||
version = "8.13.26"
|
||||
description = "Python version of Google's common library for parsing, formatting, storing and validating international phone numbers."
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "phonenumbers-8.13.23-py2.py3-none-any.whl", hash = "sha256:34d6cb279dd4a64714e324c71350f96e5bda3237be28d11b4c555c44701544cd"},
|
||||
{file = "phonenumbers-8.13.23.tar.gz", hash = "sha256:869e44fcaaf276eca6b953a401e2b27d57461f3a18a66cf5f13377e7bb0e228c"},
|
||||
{file = "phonenumbers-8.13.26-py2.py3-none-any.whl", hash = "sha256:b2308c9c5750b8f10dd30d94547afd66bce60ac5e93aff227f95740557f32752"},
|
||||
{file = "phonenumbers-8.13.26.tar.gz", hash = "sha256:937d70aeceb317f5831dfec28de855a60260ef4a9d551964bec8e7a7d0cf81cd"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2691,17 +2691,17 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"]
|
|||
|
||||
[[package]]
|
||||
name = "sphinx-autodoc2"
|
||||
version = "0.4.2"
|
||||
version = "0.5.0"
|
||||
description = "Analyse a python project and create documentation for it."
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "sphinx-autodoc2-0.4.2.tar.gz", hash = "sha256:06da226a25a4339e173b34bb0e590e0ba9b4570b414796140aee1939d09acb3a"},
|
||||
{file = "sphinx_autodoc2-0.4.2-py3-none-any.whl", hash = "sha256:00835ba8c980b9c510ea794c3e2060e5a254a74c6c22badc9bfd3642dc1034b4"},
|
||||
{file = "sphinx_autodoc2-0.5.0-py3-none-any.whl", hash = "sha256:e867013b1512f9d6d7e6f6799f8b537d6884462acd118ef361f3f619a60b5c9e"},
|
||||
{file = "sphinx_autodoc2-0.5.0.tar.gz", hash = "sha256:7d76044aa81d6af74447080182b6868c7eb066874edc835e8ddf810735b6565a"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
astroid = ">=2.7"
|
||||
astroid = ">=2.7,<4"
|
||||
tomli = {version = "*", markers = "python_version < \"3.11\""}
|
||||
typing-extensions = "*"
|
||||
|
||||
|
@ -2709,7 +2709,7 @@ typing-extensions = "*"
|
|||
cli = ["typer[all]"]
|
||||
docs = ["furo", "myst-parser", "sphinx (>=4.0.0)"]
|
||||
sphinx = ["sphinx (>=4.0.0)"]
|
||||
testing = ["pytest", "pytest-cov", "pytest-regressions", "sphinx (>=4.0.0)"]
|
||||
testing = ["pytest", "pytest-cov", "pytest-regressions", "sphinx (>=4.0.0,<7)"]
|
||||
|
||||
[[package]]
|
||||
name = "sphinx-basic-ng"
|
||||
|
@ -3054,13 +3054,13 @@ files = [
|
|||
|
||||
[[package]]
|
||||
name = "types-jsonschema"
|
||||
version = "4.19.0.4"
|
||||
version = "4.20.0.0"
|
||||
description = "Typing stubs for jsonschema"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "types-jsonschema-4.19.0.4.tar.gz", hash = "sha256:994feb6632818259c4b5dbd733867824cb475029a6abc2c2b5201a2268b6e7d2"},
|
||||
{file = "types_jsonschema-4.19.0.4-py3-none-any.whl", hash = "sha256:b73c3f4ba3cd8108602d1198a438e2698d5eb6b9db206ed89a33e24729b0abe7"},
|
||||
{file = "types-jsonschema-4.20.0.0.tar.gz", hash = "sha256:0de1032d243f1d3dba8b745ad84efe8c1af71665a9deb1827636ac535dcb79c1"},
|
||||
{file = "types_jsonschema-4.20.0.0-py3-none-any.whl", hash = "sha256:e6d5df18aaca4412f0aae246a294761a92040e93d7bc840f002b7329a8b72d26"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -3432,4 +3432,4 @@ user-search = ["pyicu"]
|
|||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = "^3.8.0"
|
||||
content-hash = "2924e80a14b32b430e70bafbd2b00893a365d9c3836c026296f4af0b9579e604"
|
||||
content-hash = "57716a9580b3493c3d2038492a6d4c36d1d16a79c5a0880b6eadcaf681503d3a"
|
||||
|
|
|
@ -370,7 +370,7 @@ optional = true
|
|||
|
||||
[tool.poetry.group.dev-docs.dependencies]
|
||||
sphinx = {version = "^6.1", python = "^3.8"}
|
||||
sphinx-autodoc2 = {version = "^0.4.2", python = "^3.8"}
|
||||
sphinx-autodoc2 = {version = ">=0.4.2,<0.6.0", python = "^3.8"}
|
||||
myst-parser = {version = "^1.0.0", python = "^3.8"}
|
||||
furo = ">=2022.12.7,<2024.0.0"
|
||||
|
||||
|
|
|
@ -419,3 +419,7 @@ class ExperimentalConfig(Config):
|
|||
self.msc4028_push_encrypted_events = experimental.get(
|
||||
"msc4028_push_encrypted_events", False
|
||||
)
|
||||
|
||||
self.msc4069_profile_inhibit_propagation = experimental.get(
|
||||
"msc4069_profile_inhibit_propagation", False
|
||||
)
|
||||
|
|
|
@ -48,6 +48,7 @@ class ServerNoticesConfig(Config):
|
|||
self.server_notices_mxid_display_name: Optional[str] = None
|
||||
self.server_notices_mxid_avatar_url: Optional[str] = None
|
||||
self.server_notices_room_name: Optional[str] = None
|
||||
self.server_notices_auto_join: bool = False
|
||||
|
||||
def read_config(self, config: JsonDict, **kwargs: Any) -> None:
|
||||
c = config.get("server_notices")
|
||||
|
@ -62,3 +63,4 @@ class ServerNoticesConfig(Config):
|
|||
self.server_notices_mxid_avatar_url = c.get("system_mxid_avatar_url", None)
|
||||
# todo: i18n
|
||||
self.server_notices_room_name = c.get("room_name", "Server Notices")
|
||||
self.server_notices_auto_join = c.get("auto_join", False)
|
||||
|
|
|
@ -129,6 +129,7 @@ class ProfileHandler:
|
|||
new_displayname: str,
|
||||
by_admin: bool = False,
|
||||
deactivation: bool = False,
|
||||
propagate: bool = True,
|
||||
) -> None:
|
||||
"""Set the displayname of a user
|
||||
|
||||
|
@ -138,6 +139,7 @@ class ProfileHandler:
|
|||
new_displayname: The displayname to give this user.
|
||||
by_admin: Whether this change was made by an administrator.
|
||||
deactivation: Whether this change was made while deactivating the user.
|
||||
propagate: Whether this change also applies to the user's membership events.
|
||||
"""
|
||||
if not self.hs.is_mine(target_user):
|
||||
raise SynapseError(400, "User is not hosted on this homeserver")
|
||||
|
@ -188,7 +190,8 @@ class ProfileHandler:
|
|||
target_user.to_string(), profile, by_admin, deactivation
|
||||
)
|
||||
|
||||
await self._update_join_states(requester, target_user)
|
||||
if propagate:
|
||||
await self._update_join_states(requester, target_user)
|
||||
|
||||
async def get_avatar_url(self, target_user: UserID) -> Optional[str]:
|
||||
if self.hs.is_mine(target_user):
|
||||
|
@ -221,6 +224,7 @@ class ProfileHandler:
|
|||
new_avatar_url: str,
|
||||
by_admin: bool = False,
|
||||
deactivation: bool = False,
|
||||
propagate: bool = True,
|
||||
) -> None:
|
||||
"""Set a new avatar URL for a user.
|
||||
|
||||
|
@ -230,6 +234,7 @@ class ProfileHandler:
|
|||
new_avatar_url: The avatar URL to give this user.
|
||||
by_admin: Whether this change was made by an administrator.
|
||||
deactivation: Whether this change was made while deactivating the user.
|
||||
propagate: Whether this change also applies to the user's membership events.
|
||||
"""
|
||||
if not self.hs.is_mine(target_user):
|
||||
raise SynapseError(400, "User is not hosted on this homeserver")
|
||||
|
@ -278,7 +283,8 @@ class ProfileHandler:
|
|||
target_user.to_string(), profile, by_admin, deactivation
|
||||
)
|
||||
|
||||
await self._update_join_states(requester, target_user)
|
||||
if propagate:
|
||||
await self._update_join_states(requester, target_user)
|
||||
|
||||
@cached()
|
||||
async def check_avatar_size_and_mime_type(self, mxc: str) -> bool:
|
||||
|
|
|
@ -549,7 +549,7 @@ class RoomCreationHandler:
|
|||
except (TypeError, ValueError):
|
||||
ban = 50
|
||||
needed_power_level = max(
|
||||
state_default_int, ban, max(event_power_levels.values())
|
||||
state_default_int, ban, max(event_power_levels.values(), default=0)
|
||||
)
|
||||
|
||||
# Get the user's current power level, this matches the logic in get_user_power_level,
|
||||
|
|
|
@ -89,8 +89,8 @@ class ListDestinationsRestServlet(RestServlet):
|
|||
"destinations": [
|
||||
{
|
||||
"destination": r[0],
|
||||
"retry_last_ts": r[1],
|
||||
"retry_interval": r[2],
|
||||
"retry_last_ts": r[1] or 0,
|
||||
"retry_interval": r[2] or 0,
|
||||
"failure_ts": r[3],
|
||||
"last_successful_stream_ordering": r[4],
|
||||
}
|
||||
|
|
|
@ -13,12 +13,17 @@
|
|||
# limitations under the License.
|
||||
|
||||
""" This module contains REST servlets to do with profile: /profile/<paths> """
|
||||
|
||||
from http import HTTPStatus
|
||||
from typing import TYPE_CHECKING, Tuple
|
||||
|
||||
from synapse.api.errors import Codes, SynapseError
|
||||
from synapse.http.server import HttpServer
|
||||
from synapse.http.servlet import RestServlet, parse_json_object_from_request
|
||||
from synapse.http.servlet import (
|
||||
RestServlet,
|
||||
parse_boolean,
|
||||
parse_json_object_from_request,
|
||||
)
|
||||
from synapse.http.site import SynapseRequest
|
||||
from synapse.rest.client._base import client_patterns
|
||||
from synapse.types import JsonDict, UserID
|
||||
|
@ -27,6 +32,20 @@ if TYPE_CHECKING:
|
|||
from synapse.server import HomeServer
|
||||
|
||||
|
||||
def _read_propagate(hs: "HomeServer", request: SynapseRequest) -> bool:
|
||||
# This will always be set by the time Twisted calls us.
|
||||
assert request.args is not None
|
||||
|
||||
propagate = True
|
||||
if hs.config.experimental.msc4069_profile_inhibit_propagation:
|
||||
do_propagate = request.args.get(b"org.matrix.msc4069.propagate")
|
||||
if do_propagate is not None:
|
||||
propagate = parse_boolean(
|
||||
request, "org.matrix.msc4069.propagate", default=False
|
||||
)
|
||||
return propagate
|
||||
|
||||
|
||||
class ProfileDisplaynameRestServlet(RestServlet):
|
||||
PATTERNS = client_patterns("/profile/(?P<user_id>[^/]*)/displayname", v1=True)
|
||||
CATEGORY = "Event sending requests"
|
||||
|
@ -80,7 +99,11 @@ class ProfileDisplaynameRestServlet(RestServlet):
|
|||
errcode=Codes.BAD_JSON,
|
||||
)
|
||||
|
||||
await self.profile_handler.set_displayname(user, requester, new_name, is_admin)
|
||||
propagate = _read_propagate(self.hs, request)
|
||||
|
||||
await self.profile_handler.set_displayname(
|
||||
user, requester, new_name, is_admin, propagate=propagate
|
||||
)
|
||||
|
||||
return 200, {}
|
||||
|
||||
|
@ -135,8 +158,10 @@ class ProfileAvatarURLRestServlet(RestServlet):
|
|||
400, "Missing key 'avatar_url'", errcode=Codes.MISSING_PARAM
|
||||
)
|
||||
|
||||
propagate = _read_propagate(self.hs, request)
|
||||
|
||||
await self.profile_handler.set_avatar_url(
|
||||
user, requester, new_avatar_url, is_admin
|
||||
user, requester, new_avatar_url, is_admin, propagate=propagate
|
||||
)
|
||||
|
||||
return 200, {}
|
||||
|
|
|
@ -129,6 +129,8 @@ class VersionsRestServlet(RestServlet):
|
|||
"org.matrix.msc3981": self.config.experimental.msc3981_recurse_relations,
|
||||
# Adds support for deleting account data.
|
||||
"org.matrix.msc3391": self.config.experimental.msc3391_enabled,
|
||||
# Allows clients to inhibit profile update propagation.
|
||||
"org.matrix.msc4069": self.config.experimental.msc4069_profile_inhibit_propagation,
|
||||
},
|
||||
},
|
||||
)
|
||||
|
|
|
@ -224,14 +224,27 @@ class ServerNoticesManager:
|
|||
if room.room_id == room_id:
|
||||
return
|
||||
|
||||
user_id_obj = UserID.from_string(user_id)
|
||||
await self._room_member_handler.update_membership(
|
||||
requester=requester,
|
||||
target=UserID.from_string(user_id),
|
||||
target=user_id_obj,
|
||||
room_id=room_id,
|
||||
action="invite",
|
||||
ratelimit=False,
|
||||
)
|
||||
|
||||
if self._config.servernotices.server_notices_auto_join:
|
||||
user_requester = create_requester(
|
||||
user_id, authenticated_entity=self._server_name
|
||||
)
|
||||
await self._room_member_handler.update_membership(
|
||||
requester=user_requester,
|
||||
target=user_id_obj,
|
||||
room_id=room_id,
|
||||
action="join",
|
||||
ratelimit=False,
|
||||
)
|
||||
|
||||
async def _update_notice_user_profile_if_changed(
|
||||
self,
|
||||
requester: Requester,
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE applied_module_schemas REPLICA IDENTITY USING INDEX applied_module_schemas_module_name_file_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE applied_schema_deltas REPLICA IDENTITY USING INDEX applied_schema_deltas_version_file_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE background_updates REPLICA IDENTITY USING INDEX background_updates_uniqueness;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE schema_compat_version REPLICA IDENTITY USING INDEX schema_compat_version_lock_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE schema_version REPLICA IDENTITY USING INDEX schema_version_lock_key;
|
|
@ -0,0 +1,13 @@
|
|||
The `10_replica_identity_xxx.sql.postgres` series of schema deltas adds replica identities for tables that do not have one implicitly as a result of having a primary key.
|
||||
|
||||
This is needed to use logical replication with Synapse (at least without `UPDATE` and `DELETE` statements failing!).
|
||||
|
||||
Where possible, we use an existing `UNIQUE` index on `NOT NULL` columns as the replica identity. Otherwise, we have to fall back to using the full row as a replica identity.
|
||||
|
||||
Unfortunately, by running all the `ALTER TABLE` statements in one schema delta per database, it was too likely to hit a deadlock as it would only take
|
||||
one other transaction from a running Synapse worker to access the tables out of order and trigger a deadlock.
|
||||
|
||||
By having each statement in its own delta file, each one is run in its own transaction and only needs to take a very brief (instant) lock on the table but no other tables,
|
||||
so there should be no chance of deadlock.
|
||||
|
||||
Like many schema deltas we already apply to Synapse, it is probably blocked by an ongoing `pg_dump`.
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE account_data REPLICA IDENTITY USING INDEX account_data_uniqueness;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE application_services_txns REPLICA IDENTITY USING INDEX application_services_txns_as_id_txn_id_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE appservice_room_list REPLICA IDENTITY USING INDEX appservice_room_list_idx;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE appservice_stream_position REPLICA IDENTITY USING INDEX appservice_stream_position_lock_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE blocked_rooms REPLICA IDENTITY USING INDEX blocked_rooms_idx;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE cache_invalidation_stream_by_instance REPLICA IDENTITY USING INDEX cache_invalidation_stream_by_instance_id;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE current_state_delta_stream REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE current_state_events REPLICA IDENTITY USING INDEX current_state_events_event_id_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE deleted_pushers REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_auth_providers REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_federation_inbox REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_federation_outbox REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_inbox REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_lists_changes_converted_stream_position REPLICA IDENTITY USING INDEX device_lists_changes_converted_stream_position_lock_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_lists_changes_in_room REPLICA IDENTITY USING INDEX device_lists_changes_in_stream_id;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_lists_outbound_last_success REPLICA IDENTITY USING INDEX device_lists_outbound_last_success_unique_idx;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_lists_outbound_pokes REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_lists_remote_cache REPLICA IDENTITY USING INDEX device_lists_remote_cache_unique_id;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_lists_remote_extremeties REPLICA IDENTITY USING INDEX device_lists_remote_extremeties_unique_idx;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_lists_remote_resync REPLICA IDENTITY USING INDEX device_lists_remote_resync_idx;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE device_lists_stream REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE devices REPLICA IDENTITY USING INDEX device_uniqueness;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE e2e_cross_signing_keys REPLICA IDENTITY USING INDEX e2e_cross_signing_keys_stream_idx;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE e2e_cross_signing_signatures REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE e2e_device_keys_json REPLICA IDENTITY USING INDEX e2e_device_keys_json_uniqueness;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE e2e_fallback_keys_json REPLICA IDENTITY USING INDEX e2e_fallback_keys_json_uniqueness;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE e2e_one_time_keys_json REPLICA IDENTITY USING INDEX e2e_one_time_keys_json_uniqueness;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE e2e_room_keys REPLICA IDENTITY USING INDEX e2e_room_keys_with_version_idx;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE e2e_room_keys_versions REPLICA IDENTITY USING INDEX e2e_room_keys_versions_idx;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE erased_users REPLICA IDENTITY USING INDEX erased_users_user;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_auth REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_auth_chain_links REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_backward_extremities REPLICA IDENTITY USING INDEX event_backward_extremities_event_id_room_id_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_edges REPLICA IDENTITY USING INDEX event_edges_event_id_prev_event_id_idx;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_forward_extremities REPLICA IDENTITY USING INDEX event_forward_extremities_event_id_room_id_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_json REPLICA IDENTITY USING INDEX event_json_event_id_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_push_actions REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_push_actions_staging REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_push_summary REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_push_summary_last_receipt_stream_id REPLICA IDENTITY USING INDEX event_push_summary_last_receipt_stream_id_lock_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_push_summary_stream_ordering REPLICA IDENTITY USING INDEX event_push_summary_stream_ordering_lock_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_relations REPLICA IDENTITY USING INDEX event_relations_id;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_search REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_to_state_groups REPLICA IDENTITY USING INDEX event_to_state_groups_event_id_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE event_txn_id_device_id REPLICA IDENTITY USING INDEX event_txn_id_device_id_event_id;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE events REPLICA IDENTITY USING INDEX events_event_id_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE federation_inbound_events_staging REPLICA IDENTITY USING INDEX federation_inbound_events_staging_instance_event;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE federation_stream_position REPLICA IDENTITY USING INDEX federation_stream_position_instance;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE ignored_users REPLICA IDENTITY USING INDEX ignored_users_uniqueness;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE local_current_membership REPLICA IDENTITY USING INDEX local_current_membership_idx;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE local_media_repository REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE local_media_repository_thumbnails REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE local_media_repository_url_cache REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE monthly_active_users REPLICA IDENTITY USING INDEX monthly_active_users_users;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE partial_state_events REPLICA IDENTITY USING INDEX partial_state_events_event_id_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE partial_state_rooms_servers REPLICA IDENTITY USING INDEX partial_state_rooms_servers_room_id_server_name_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE presence_stream REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE profiles REPLICA IDENTITY USING INDEX profiles_user_id_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE push_rules_stream REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE ratelimit_override REPLICA IDENTITY USING INDEX ratelimit_override_idx;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE receipts_graph REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE receipts_linearized REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE received_transactions REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE redactions REPLICA IDENTITY USING INDEX redactions_event_id_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE registration_tokens REPLICA IDENTITY USING INDEX registration_tokens_token_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE rejections REPLICA IDENTITY USING INDEX rejections_event_id_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE remote_media_cache REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE remote_media_cache_thumbnails REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE room_account_data REPLICA IDENTITY USING INDEX room_account_data_uniqueness;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE room_alias_servers REPLICA IDENTITY FULL;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE room_aliases REPLICA IDENTITY USING INDEX room_aliases_room_alias_key;
|
|
@ -0,0 +1 @@
|
|||
ALTER TABLE room_depth REPLICA IDENTITY USING INDEX room_depth_room_id_key;
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue