Compare commits
377 Commits
v1.43.0
...
dmr/storag
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d343db081 | ||
|
|
a1367dcf8c | ||
|
|
9e361c8550 | ||
|
|
51fec1a534 | ||
|
|
e605e4b8f2 | ||
|
|
5562ce6a53 | ||
|
|
6f862c5c28 | ||
|
|
605921bc6b | ||
|
|
fe58672546 | ||
|
|
3fad4e3fe5 | ||
|
|
bea815cec8 | ||
|
|
0bcae8ad56 | ||
|
|
9b90b9454b | ||
|
|
6f8f3d4bc5 | ||
|
|
4c96ce396e | ||
|
|
95547e5300 | ||
|
|
b64b6d12d4 | ||
|
|
2fffcb24d8 | ||
|
|
8840a7b7f1 | ||
|
|
c99da2d079 | ||
|
|
6a605f4a77 | ||
|
|
8dc666f785 | ||
|
|
48278a0d09 | ||
|
|
64ef25391d | ||
|
|
6ce19b94e8 | ||
|
|
5cace20bf1 | ||
|
|
66c4b774fd | ||
|
|
5f277ffe89 | ||
|
|
73cbb284b9 | ||
|
|
68c258a604 | ||
|
|
595f28529c | ||
|
|
ef7f9286d1 | ||
|
|
82e62b488a | ||
|
|
af6374905a | ||
|
|
b09d90cac9 | ||
|
|
f1d5c2f269 | ||
|
|
0ef69ddbdc | ||
|
|
3b951445a7 | ||
|
|
a026695083 | ||
|
|
dc5f524974 | ||
|
|
a754510f28 | ||
|
|
b6f4d122ef | ||
|
|
a19d01c3d9 | ||
|
|
b67a7c62a2 | ||
|
|
1a4f10045f | ||
|
|
01f61da77f | ||
|
|
4b3e30c276 | ||
|
|
af784644c3 | ||
|
|
820337e6a4 | ||
|
|
84f235aea4 | ||
|
|
4ee71b9637 | ||
|
|
0c82d4aabe | ||
|
|
86a497efaa | ||
|
|
556a488209 | ||
|
|
a55e1ec9af | ||
|
|
98c8fc6ce8 | ||
|
|
9799c569bb | ||
|
|
09cb441a04 | ||
|
|
a37df1b091 | ||
|
|
499c44d696 | ||
|
|
f36434590c | ||
|
|
8eec25a1d9 | ||
|
|
a271e233e9 | ||
|
|
af54167516 | ||
|
|
2735b3e6f2 | ||
|
|
bcc115c28d | ||
|
|
d688a6dee5 | ||
|
|
da0040785e | ||
|
|
6250b95efe | ||
|
|
237f7eb87a | ||
|
|
c01bc5f43d | ||
|
|
2d44ee6868 | ||
|
|
df84ad602b | ||
|
|
4535532526 | ||
|
|
c9c3aea9b1 | ||
|
|
7537201840 | ||
|
|
46d0937447 | ||
|
|
93aa670642 | ||
|
|
f5c6a80886 | ||
|
|
e81fa92648 | ||
|
|
caa706d825 | ||
|
|
69ab3dddbc | ||
|
|
66bdca3e31 | ||
|
|
71f9966f27 | ||
|
|
2014098d01 | ||
|
|
0b99d4c8d2 | ||
|
|
3ae1464efd | ||
|
|
ece84f2c45 | ||
|
|
82d2168a15 | ||
|
|
2451003f6f | ||
|
|
29ffd680bf | ||
|
|
e320f5dba3 | ||
|
|
bfd7a9b65c | ||
|
|
ad4eab9862 | ||
|
|
3ed17ff651 | ||
|
|
56e281bf6c | ||
|
|
0e16b418f6 | ||
|
|
e002faee01 | ||
|
|
adc0d35b17 | ||
|
|
1bfd141205 | ||
|
|
a19bf32a03 | ||
|
|
a1ba7a850a | ||
|
|
0dffa9d0e0 | ||
|
|
75ca0a6168 | ||
|
|
4e393af52f | ||
|
|
576921c66a | ||
|
|
19d5dc6931 | ||
|
|
8d46fac98e | ||
|
|
b3e843be88 | ||
|
|
a930da3291 | ||
|
|
179dc8ae9e | ||
|
|
e0ef8fe58d | ||
|
|
b615fc35d6 | ||
|
|
f3a4be8700 | ||
|
|
72626b78ef | ||
|
|
2dbef6c10a | ||
|
|
60ad9460c4 | ||
|
|
400f391f71 | ||
|
|
c7a5e49664 | ||
|
|
34b0222c2b | ||
|
|
cc75a6b1b2 | ||
|
|
7004f43da1 | ||
|
|
d52c58dfa3 | ||
|
|
8c8e36af0d | ||
|
|
63cbdd8af0 | ||
|
|
c1510c97b5 | ||
|
|
4387b791e0 | ||
|
|
da957a60e8 | ||
|
|
85a09f8b8b | ||
|
|
1afc6ecae1 | ||
|
|
d7141e0b8b | ||
|
|
b5e910521b | ||
|
|
13f084eb58 | ||
|
|
31096132c3 | ||
|
|
9d0f9d51d5 | ||
|
|
bab2bc844c | ||
|
|
7cf83c0aca | ||
|
|
99e698d6ed | ||
|
|
dfa6143133 | ||
|
|
6a9d84a676 | ||
|
|
6c736fa472 | ||
|
|
898e3be4c9 | ||
|
|
5eb481cd5b | ||
|
|
64adbb7b54 | ||
|
|
12d79ff1b6 | ||
|
|
2b82ec425f | ||
|
|
b9ce53e878 | ||
|
|
b0f03aeb6a | ||
|
|
ba00e20234 | ||
|
|
2d91b6256e | ||
|
|
6408372234 | ||
|
|
0f9adc99ad | ||
|
|
09eff1b3db | ||
|
|
ef7fe09778 | ||
|
|
57501d9194 | ||
|
|
62db603fa0 | ||
|
|
0930e9ae12 | ||
|
|
2c61a318cc | ||
|
|
ee2cee5f52 | ||
|
|
106d99b8cd | ||
|
|
78d5896d19 | ||
|
|
9b016a0fb4 | ||
|
|
522489fbcd | ||
|
|
df95d3aec2 | ||
|
|
0dd0c40329 | ||
|
|
5e0e683541 | ||
|
|
a6c318735d | ||
|
|
95813ff43c | ||
|
|
a21f8c4b41 | ||
|
|
8b1185347a | ||
|
|
191396f4ba | ||
|
|
f3efa0036b | ||
|
|
0170774b19 | ||
|
|
d85bc9a4a7 | ||
|
|
3ab55d43bd | ||
|
|
cc33d9eee2 | ||
|
|
a5d2ea3d08 | ||
|
|
73743b8ad1 | ||
|
|
e8f24b6c35 | ||
|
|
7d70582eb0 | ||
|
|
37b845dabc | ||
|
|
e09be0c87a | ||
|
|
5573133348 | ||
|
|
6a67f3786a | ||
|
|
013e0f9cae | ||
|
|
daf498e099 | ||
|
|
efd0074ab7 | ||
|
|
e2f0b49b3f | ||
|
|
1609ccf8fe | ||
|
|
50d8601581 | ||
|
|
b3698f945c | ||
|
|
b1c1a34f46 | ||
|
|
4d761d24ba | ||
|
|
87c3a6dcc0 | ||
|
|
99a4e5222d | ||
|
|
35d6b914eb | ||
|
|
404444260a | ||
|
|
317e9e415c | ||
|
|
b59f3281d5 | ||
|
|
b3e9b00fb2 | ||
|
|
1f9d0b8a7a | ||
|
|
cdd308845b | ||
|
|
732bbf6737 | ||
|
|
b83e822556 | ||
|
|
2a2b189130 | ||
|
|
8711e15734 | ||
|
|
988de0afb0 | ||
|
|
5dcacdf6d1 | ||
|
|
9abc5f2a05 | ||
|
|
84f5d83257 | ||
|
|
8eaffe013c | ||
|
|
1db9282dfa | ||
|
|
77ea03086c | ||
|
|
333d6f4e84 | ||
|
|
5c35074d85 | ||
|
|
36224e056a | ||
|
|
a18c568516 | ||
|
|
a5871f53ed | ||
|
|
8afa48f7f6 | ||
|
|
f6b62bdc4d | ||
|
|
b8b905c4ea | ||
|
|
9e13cd98af | ||
|
|
6b18eb4430 | ||
|
|
b01e953291 | ||
|
|
60af28c5dd | ||
|
|
8c5255b664 | ||
|
|
406f7bfa17 | ||
|
|
e0f11ae4a5 | ||
|
|
5e29d417fc | ||
|
|
3828dd819b | ||
|
|
4c838112dc | ||
|
|
b742cb2e4a | ||
|
|
a7d22c36db | ||
|
|
1b112840d2 | ||
|
|
593eeac19e | ||
|
|
d51a340019 | ||
|
|
9f23ff78da | ||
|
|
c576598a68 | ||
|
|
51a5da74cc | ||
|
|
797ee7812d | ||
|
|
670a8d9a1e | ||
|
|
eb9ddc8c2e | ||
|
|
49a683d871 | ||
|
|
bb228f3523 | ||
|
|
0b4d5ce5e3 | ||
|
|
e79ee48313 | ||
|
|
7301019d48 | ||
|
|
e0bf34dada | ||
|
|
96fe77c254 | ||
|
|
86af6b2f0e | ||
|
|
52aefd5086 | ||
|
|
f563676c09 | ||
|
|
e564bdd127 | ||
|
|
4e51621064 | ||
|
|
f4b1a9a527 | ||
|
|
829f2a82b0 | ||
|
|
b0460936c8 | ||
|
|
370bca32e6 | ||
|
|
38b7db5885 | ||
|
|
c80878d22a | ||
|
|
f8d0f72b27 | ||
|
|
6744273f0b | ||
|
|
4f00432ce1 | ||
|
|
392863fbf1 | ||
|
|
2faac70e63 | ||
|
|
b2c5e79291 | ||
|
|
3a5b0cbe7a | ||
|
|
787af4a106 | ||
|
|
d099535deb | ||
|
|
cb88ed912b | ||
|
|
6f6e956338 | ||
|
|
7036a7a60a | ||
|
|
660c8c1415 | ||
|
|
eda8c88b84 | ||
|
|
30f0240401 | ||
|
|
730b40dd5e | ||
|
|
2d2c6a41fe | ||
|
|
f7b034a24b | ||
|
|
a0f48ee89d | ||
|
|
d1cbad388f | ||
|
|
a071144a5c | ||
|
|
32072dcdac | ||
|
|
e46ac85d67 | ||
|
|
7e440520c9 | ||
|
|
9e5a429c8b | ||
|
|
d1bf5f7c9d | ||
|
|
7d84d2523a | ||
|
|
44dee1fe8c | ||
|
|
145cb6d08e | ||
|
|
29364145b2 | ||
|
|
3412f5c8d8 | ||
|
|
c4bf48ee6f | ||
|
|
a03ed5e6ae | ||
|
|
3aefc7b66d | ||
|
|
428174f902 | ||
|
|
a19aa8b162 | ||
|
|
176aa55fd5 | ||
|
|
e32b9f44ee | ||
|
|
94b620a5ed | ||
|
|
8cef1ab2ac | ||
|
|
13032b6603 | ||
|
|
1b9ce5e8a6 | ||
|
|
67815cc3db | ||
|
|
5279b9161b | ||
|
|
2be0fde3d6 | ||
|
|
9fd057b8c5 | ||
|
|
62800a8fe3 | ||
|
|
0f007fe009 | ||
|
|
8aaa4b7b5d | ||
|
|
2622b28c5c | ||
|
|
37bb93d181 | ||
|
|
eb2c7e51c4 | ||
|
|
2b9d174791 | ||
|
|
bc69d49362 | ||
|
|
c3ccad7785 | ||
|
|
3c50192d3f | ||
|
|
a8bbf08576 | ||
|
|
707d5e4e48 | ||
|
|
d37841787a | ||
|
|
f7768f62cb | ||
|
|
6c83c27107 | ||
|
|
d138187045 | ||
|
|
b10257e879 | ||
|
|
ea01d4c2de | ||
|
|
0420d4e6a5 | ||
|
|
bb7fdd821b | ||
|
|
85551b7a85 | ||
|
|
261c9763c4 | ||
|
|
50022cff96 | ||
|
|
fa74536384 | ||
|
|
7f3352743e | ||
|
|
e704cc2a48 | ||
|
|
90d9fc7505 | ||
|
|
a7304adc7d | ||
|
|
47854c71e9 | ||
|
|
a10988983a | ||
|
|
dcfd864970 | ||
|
|
e584534403 | ||
|
|
aa2c027792 | ||
|
|
26f2bfedbf | ||
|
|
f78b68a96b | ||
|
|
03db6701d5 | ||
|
|
8f2a52766b | ||
|
|
6fc8be9a1b | ||
|
|
9391de3f37 | ||
|
|
52913d56a5 | ||
|
|
724aef9a87 | ||
|
|
80828eda06 | ||
|
|
4ecf51812e | ||
|
|
a2d7195e01 | ||
|
|
51e2db3598 | ||
|
|
4054dfa409 | ||
|
|
b25a494779 | ||
|
|
ebd8baf61f | ||
|
|
ba7a91aea5 | ||
|
|
2843058a8b | ||
|
|
5fca3c8ae6 | ||
|
|
ee557b5375 | ||
|
|
706b0e41a1 | ||
|
|
60453315bd | ||
|
|
6a751ff5e0 | ||
|
|
f455b0e420 | ||
|
|
b3590614da | ||
|
|
437961744c | ||
|
|
6b6bb81b23 | ||
|
|
b4c1af8cea | ||
|
|
bfb4b858a9 | ||
|
|
3eba047d38 | ||
|
|
b93259082c | ||
|
|
8c7a531e27 | ||
|
|
145c006ef7 | ||
|
|
1c555527b3 | ||
|
|
8eb7cb2e0d | ||
|
|
14b8c0476f | ||
|
|
51e1b96d04 | ||
|
|
b996782df5 | ||
|
|
319b8b6bef |
57
.ci/scripts/test_export_data_command.sh
Executable file
57
.ci/scripts/test_export_data_command.sh
Executable file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Test for the export-data admin command against sqlite and postgres
|
||||||
|
|
||||||
|
set -xe
|
||||||
|
cd "$(dirname "$0")/../.."
|
||||||
|
|
||||||
|
echo "--- Install dependencies"
|
||||||
|
|
||||||
|
# Install dependencies for this test.
|
||||||
|
pip install psycopg2
|
||||||
|
|
||||||
|
# Install Synapse itself. This won't update any libraries.
|
||||||
|
pip install -e .
|
||||||
|
|
||||||
|
echo "--- Generate the signing key"
|
||||||
|
|
||||||
|
# Generate the server's signing key.
|
||||||
|
python -m synapse.app.homeserver --generate-keys -c .ci/sqlite-config.yaml
|
||||||
|
|
||||||
|
echo "--- Prepare test database"
|
||||||
|
|
||||||
|
# Make sure the SQLite3 database is using the latest schema and has no pending background update.
|
||||||
|
scripts/update_synapse_database --database-config .ci/sqlite-config.yaml --run-background-updates
|
||||||
|
|
||||||
|
# Run the export-data command on the sqlite test database
|
||||||
|
python -m synapse.app.admin_cmd -c .ci/sqlite-config.yaml export-data @anon-20191002_181700-832:localhost:8800 \
|
||||||
|
--output-directory /tmp/export_data
|
||||||
|
|
||||||
|
# Test that the output directory exists and contains the rooms directory
|
||||||
|
dir="/tmp/export_data/rooms"
|
||||||
|
if [ -d "$dir" ]; then
|
||||||
|
echo "Command successful, this test passes"
|
||||||
|
else
|
||||||
|
echo "No output directories found, the command fails against a sqlite database."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create the PostgreSQL database.
|
||||||
|
.ci/scripts/postgres_exec.py "CREATE DATABASE synapse"
|
||||||
|
|
||||||
|
# Port the SQLite databse to postgres so we can check command works against postgres
|
||||||
|
echo "+++ Port SQLite3 databse to postgres"
|
||||||
|
scripts/synapse_port_db --sqlite-database .ci/test_db.db --postgres-config .ci/postgres-config.yaml
|
||||||
|
|
||||||
|
# Run the export-data command on postgres database
|
||||||
|
python -m synapse.app.admin_cmd -c .ci/postgres-config.yaml export-data @anon-20191002_181700-832:localhost:8800 \
|
||||||
|
--output-directory /tmp/export_data2
|
||||||
|
|
||||||
|
# Test that the output directory exists and contains the rooms directory
|
||||||
|
dir2="/tmp/export_data2/rooms"
|
||||||
|
if [ -d "$dir2" ]; then
|
||||||
|
echo "Command successful, this test passes"
|
||||||
|
else
|
||||||
|
echo "No output directories found, the command fails against a postgres database."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
|
|
||||||
set -xe
|
set -xe
|
||||||
cd `dirname $0`/../..
|
cd "$(dirname "$0")/../.."
|
||||||
|
|
||||||
echo "--- Install dependencies"
|
echo "--- Install dependencies"
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ python -m synapse.app.homeserver --generate-keys -c .ci/sqlite-config.yaml
|
|||||||
echo "--- Prepare test database"
|
echo "--- Prepare test database"
|
||||||
|
|
||||||
# Make sure the SQLite3 database is using the latest schema and has no pending background update.
|
# Make sure the SQLite3 database is using the latest schema and has no pending background update.
|
||||||
scripts-dev/update_database --database-config .ci/sqlite-config.yaml
|
scripts/update_synapse_database --database-config .ci/sqlite-config.yaml --run-background-updates
|
||||||
|
|
||||||
# Create the PostgreSQL database.
|
# Create the PostgreSQL database.
|
||||||
.ci/scripts/postgres_exec.py "CREATE DATABASE synapse"
|
.ci/scripts/postgres_exec.py "CREATE DATABASE synapse"
|
||||||
@@ -46,7 +46,7 @@ echo "--- Prepare empty SQLite database"
|
|||||||
# we do this by deleting the sqlite db, and then doing the same again.
|
# we do this by deleting the sqlite db, and then doing the same again.
|
||||||
rm .ci/test_db.db
|
rm .ci/test_db.db
|
||||||
|
|
||||||
scripts-dev/update_database --database-config .ci/sqlite-config.yaml
|
scripts/update_synapse_database --database-config .ci/sqlite-config.yaml --run-background-updates
|
||||||
|
|
||||||
# re-create the PostgreSQL database.
|
# re-create the PostgreSQL database.
|
||||||
.ci/scripts/postgres_exec.py \
|
.ci/scripts/postgres_exec.py \
|
||||||
|
|||||||
2
.github/CODEOWNERS
vendored
Normal file
2
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Automatically request reviews from the synapse-core team when a pull request comes in.
|
||||||
|
* @matrix-org/synapse-core
|
||||||
9
.github/PULL_REQUEST_TEMPLATE.md
vendored
9
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,12 +1,13 @@
|
|||||||
### Pull Request Checklist
|
### Pull Request Checklist
|
||||||
|
|
||||||
<!-- Please read CONTRIBUTING.md before submitting your pull request -->
|
<!-- Please read https://matrix-org.github.io/synapse/latest/development/contributing_guide.html before submitting your pull request -->
|
||||||
|
|
||||||
* [ ] Pull request is based on the develop branch
|
* [ ] Pull request is based on the develop branch
|
||||||
* [ ] Pull request includes a [changelog file](https://github.com/matrix-org/synapse/blob/master/CONTRIBUTING.md#changelog). The entry should:
|
* [ ] Pull request includes a [changelog file](https://matrix-org.github.io/synapse/latest/development/contributing_guide.html#changelog). The entry should:
|
||||||
- Be a short description of your change which makes sense to users. "Fixed a bug that prevented receiving messages from other servers." instead of "Moved X method from `EventStore` to `EventWorkerStore`.".
|
- Be a short description of your change which makes sense to users. "Fixed a bug that prevented receiving messages from other servers." instead of "Moved X method from `EventStore` to `EventWorkerStore`.".
|
||||||
- Use markdown where necessary, mostly for `code blocks`.
|
- Use markdown where necessary, mostly for `code blocks`.
|
||||||
- End with either a period (.) or an exclamation mark (!).
|
- End with either a period (.) or an exclamation mark (!).
|
||||||
- Start with a capital letter.
|
- Start with a capital letter.
|
||||||
* [ ] Pull request includes a [sign off](https://github.com/matrix-org/synapse/blob/master/CONTRIBUTING.md#sign-off)
|
* [ ] Pull request includes a [sign off](https://matrix-org.github.io/synapse/latest/development/contributing_guide.html#sign-off)
|
||||||
* [ ] Code style is correct (run the [linters](https://github.com/matrix-org/synapse/blob/master/CONTRIBUTING.md#code-style))
|
* [ ] [Code style](https://matrix-org.github.io/synapse/latest/code_style.html) is correct
|
||||||
|
(run the [linters](https://matrix-org.github.io/synapse/latest/development/contributing_guide.html#run-the-linters))
|
||||||
|
|||||||
1
.github/workflows/docs.yaml
vendored
1
.github/workflows/docs.yaml
vendored
@@ -61,6 +61,5 @@ jobs:
|
|||||||
uses: peaceiris/actions-gh-pages@068dc23d9710f1ba62e86896f84735d869951305 # v3.8.0
|
uses: peaceiris/actions-gh-pages@068dc23d9710f1ba62e86896f84735d869951305 # v3.8.0
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
keep_files: true
|
|
||||||
publish_dir: ./book
|
publish_dir: ./book
|
||||||
destination_dir: ./${{ steps.vars.outputs.branch-version }}
|
destination_dir: ./${{ steps.vars.outputs.branch-version }}
|
||||||
|
|||||||
59
.github/workflows/tests.yml
vendored
59
.github/workflows/tests.yml
vendored
@@ -76,22 +76,25 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ["3.6", "3.7", "3.8", "3.9"]
|
python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"]
|
||||||
database: ["sqlite"]
|
database: ["sqlite"]
|
||||||
|
toxenv: ["py"]
|
||||||
include:
|
include:
|
||||||
# Newest Python without optional deps
|
# Newest Python without optional deps
|
||||||
- python-version: "3.9"
|
- python-version: "3.10"
|
||||||
toxenv: "py-noextras,combine"
|
toxenv: "py-noextras"
|
||||||
|
|
||||||
# Oldest Python with PostgreSQL
|
# Oldest Python with PostgreSQL
|
||||||
- python-version: "3.6"
|
- python-version: "3.6"
|
||||||
database: "postgres"
|
database: "postgres"
|
||||||
postgres-version: "9.6"
|
postgres-version: "9.6"
|
||||||
|
toxenv: "py"
|
||||||
|
|
||||||
# Newest Python with PostgreSQL
|
# Newest Python with newest PostgreSQL
|
||||||
- python-version: "3.9"
|
- python-version: "3.10"
|
||||||
database: "postgres"
|
database: "postgres"
|
||||||
postgres-version: "13"
|
postgres-version: "14"
|
||||||
|
toxenv: "py"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
@@ -111,7 +114,7 @@ jobs:
|
|||||||
if: ${{ matrix.postgres-version }}
|
if: ${{ matrix.postgres-version }}
|
||||||
timeout-minutes: 2
|
timeout-minutes: 2
|
||||||
run: until pg_isready -h localhost; do sleep 1; done
|
run: until pg_isready -h localhost; do sleep 1; done
|
||||||
- run: tox -e py,combine
|
- run: tox -e ${{ matrix.toxenv }}
|
||||||
env:
|
env:
|
||||||
TRIAL_FLAGS: "--jobs=2"
|
TRIAL_FLAGS: "--jobs=2"
|
||||||
SYNAPSE_POSTGRES: ${{ matrix.database == 'postgres' || '' }}
|
SYNAPSE_POSTGRES: ${{ matrix.database == 'postgres' || '' }}
|
||||||
@@ -119,6 +122,8 @@ jobs:
|
|||||||
SYNAPSE_POSTGRES_USER: postgres
|
SYNAPSE_POSTGRES_USER: postgres
|
||||||
SYNAPSE_POSTGRES_PASSWORD: postgres
|
SYNAPSE_POSTGRES_PASSWORD: postgres
|
||||||
- name: Dump logs
|
- name: Dump logs
|
||||||
|
# Logs are most useful when the command fails, always include them.
|
||||||
|
if: ${{ always() }}
|
||||||
# Note: Dumps to workflow logs instead of using actions/upload-artifact
|
# Note: Dumps to workflow logs instead of using actions/upload-artifact
|
||||||
# This keeps logs colocated with failing jobs
|
# This keeps logs colocated with failing jobs
|
||||||
# It also ignores find's exit code; this is a best effort affair
|
# It also ignores find's exit code; this is a best effort affair
|
||||||
@@ -143,6 +148,8 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
TRIAL_FLAGS: "--jobs=2"
|
TRIAL_FLAGS: "--jobs=2"
|
||||||
- name: Dump logs
|
- name: Dump logs
|
||||||
|
# Logs are most useful when the command fails, always include them.
|
||||||
|
if: ${{ always() }}
|
||||||
# Note: Dumps to workflow logs instead of using actions/upload-artifact
|
# Note: Dumps to workflow logs instead of using actions/upload-artifact
|
||||||
# This keeps logs colocated with failing jobs
|
# This keeps logs colocated with failing jobs
|
||||||
# It also ignores find's exit code; this is a best effort affair
|
# It also ignores find's exit code; this is a best effort affair
|
||||||
@@ -169,10 +176,12 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
- run: pip install tox
|
- run: pip install tox
|
||||||
- run: tox -e py,combine
|
- run: tox -e py
|
||||||
env:
|
env:
|
||||||
TRIAL_FLAGS: "--jobs=2"
|
TRIAL_FLAGS: "--jobs=2"
|
||||||
- name: Dump logs
|
- name: Dump logs
|
||||||
|
# Logs are most useful when the command fails, always include them.
|
||||||
|
if: ${{ always() }}
|
||||||
# Note: Dumps to workflow logs instead of using actions/upload-artifact
|
# Note: Dumps to workflow logs instead of using actions/upload-artifact
|
||||||
# This keeps logs colocated with failing jobs
|
# This keeps logs colocated with failing jobs
|
||||||
# It also ignores find's exit code; this is a best effort affair
|
# It also ignores find's exit code; this is a best effort affair
|
||||||
@@ -192,6 +201,7 @@ jobs:
|
|||||||
volumes:
|
volumes:
|
||||||
- ${{ github.workspace }}:/src
|
- ${{ github.workspace }}:/src
|
||||||
env:
|
env:
|
||||||
|
SYTEST_BRANCH: ${{ github.head_ref }}
|
||||||
POSTGRES: ${{ matrix.postgres && 1}}
|
POSTGRES: ${{ matrix.postgres && 1}}
|
||||||
MULTI_POSTGRES: ${{ (matrix.postgres == 'multi-postgres') && 1}}
|
MULTI_POSTGRES: ${{ (matrix.postgres == 'multi-postgres') && 1}}
|
||||||
WORKERS: ${{ matrix.workers && 1 }}
|
WORKERS: ${{ matrix.workers && 1 }}
|
||||||
@@ -243,6 +253,35 @@ jobs:
|
|||||||
/logs/results.tap
|
/logs/results.tap
|
||||||
/logs/**/*.log*
|
/logs/**/*.log*
|
||||||
|
|
||||||
|
export-data:
|
||||||
|
if: ${{ !failure() && !cancelled() }} # Allow previous steps to be skipped, but not fail
|
||||||
|
needs: [linting-done, portdb]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
TOP: ${{ github.workspace }}
|
||||||
|
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
env:
|
||||||
|
POSTGRES_PASSWORD: "postgres"
|
||||||
|
POSTGRES_INITDB_ARGS: "--lc-collate C --lc-ctype C --encoding UTF8"
|
||||||
|
options: >-
|
||||||
|
--health-cmd pg_isready
|
||||||
|
--health-interval 10s
|
||||||
|
--health-timeout 5s
|
||||||
|
--health-retries 5
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- run: sudo apt-get -qq install xmlsec1
|
||||||
|
- uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: "3.9"
|
||||||
|
- run: .ci/scripts/test_export_data_command.sh
|
||||||
|
|
||||||
portdb:
|
portdb:
|
||||||
if: ${{ !failure() && !cancelled() }} # Allow previous steps to be skipped, but not fail
|
if: ${{ !failure() && !cancelled() }} # Allow previous steps to be skipped, but not fail
|
||||||
needs: linting-done
|
needs: linting-done
|
||||||
@@ -255,8 +294,8 @@ jobs:
|
|||||||
- python-version: "3.6"
|
- python-version: "3.6"
|
||||||
postgres-version: "9.6"
|
postgres-version: "9.6"
|
||||||
|
|
||||||
- python-version: "3.9"
|
- python-version: "3.10"
|
||||||
postgres-version: "13"
|
postgres-version: "14"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
|
|||||||
2
.github/workflows/twisted_trunk.yml
vendored
2
.github/workflows/twisted_trunk.yml
vendored
@@ -33,6 +33,8 @@ jobs:
|
|||||||
TRIAL_FLAGS: "--jobs=2"
|
TRIAL_FLAGS: "--jobs=2"
|
||||||
|
|
||||||
- name: Dump logs
|
- name: Dump logs
|
||||||
|
# Logs are most useful when the command fails, always include them.
|
||||||
|
if: ${{ always() }}
|
||||||
# Note: Dumps to workflow logs instead of using actions/upload-artifact
|
# Note: Dumps to workflow logs instead of using actions/upload-artifact
|
||||||
# This keeps logs colocated with failing jobs
|
# This keeps logs colocated with failing jobs
|
||||||
# It also ignores find's exit code; this is a best effort affair
|
# It also ignores find's exit code; this is a best effort affair
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -40,6 +40,7 @@ __pycache__/
|
|||||||
/.coverage*
|
/.coverage*
|
||||||
/.mypy_cache/
|
/.mypy_cache/
|
||||||
/.tox
|
/.tox
|
||||||
|
/.tox-pg-container
|
||||||
/build/
|
/build/
|
||||||
/coverage.*
|
/coverage.*
|
||||||
/dist/
|
/dist/
|
||||||
|
|||||||
418
CHANGES.md
418
CHANGES.md
@@ -1,3 +1,421 @@
|
|||||||
|
Synapse 1.47.0rc2 (2021-11-10)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
This fixes an issue with publishing the Debian packages for 1.47.0rc1.
|
||||||
|
It is otherwise identical to 1.47.0rc1.
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.47.0rc1 (2021-11-09)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Deprecations and Removals
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
- The `user_may_create_room_with_invites` module callback is now deprecated. Please refer to the [upgrade notes](https://matrix-org.github.io/synapse/develop/upgrade#upgrading-to-v1470) for more information. ([\#11206](https://github.com/matrix-org/synapse/issues/11206))
|
||||||
|
- Remove deprecated admin API to delete rooms (`POST /_synapse/admin/v1/rooms/<room_id>/delete`). ([\#11213](https://github.com/matrix-org/synapse/issues/11213))
|
||||||
|
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Advertise support for Client-Server API r0.6.1. ([\#11097](https://github.com/matrix-org/synapse/issues/11097))
|
||||||
|
- Add search by room ID and room alias to the List Room admin API. ([\#11099](https://github.com/matrix-org/synapse/issues/11099))
|
||||||
|
- Add an `on_new_event` third-party rules callback to allow Synapse modules to act after an event has been sent into a room. ([\#11126](https://github.com/matrix-org/synapse/issues/11126))
|
||||||
|
- Add a module API method to update a user's membership in a room. ([\#11147](https://github.com/matrix-org/synapse/issues/11147))
|
||||||
|
- Add metrics for thread pool usage. ([\#11178](https://github.com/matrix-org/synapse/issues/11178))
|
||||||
|
- Support the stable room type field for [MSC3288](https://github.com/matrix-org/matrix-doc/pull/3288). ([\#11187](https://github.com/matrix-org/synapse/issues/11187))
|
||||||
|
- Add a module API method to retrieve the current state of a room. ([\#11204](https://github.com/matrix-org/synapse/issues/11204))
|
||||||
|
- Calculate a default value for `public_baseurl` based on `server_name`. ([\#11210](https://github.com/matrix-org/synapse/issues/11210))
|
||||||
|
- Add support for serving `/.well-known/matrix/server` files, to redirect federation traffic to port 443. ([\#11211](https://github.com/matrix-org/synapse/issues/11211))
|
||||||
|
- Add admin APIs to pause, start and check the status of background updates. ([\#11263](https://github.com/matrix-org/synapse/issues/11263))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a long-standing bug which allowed hidden devices to receive to-device messages, resulting in unnecessary database bloat. ([\#10097](https://github.com/matrix-org/synapse/issues/10097))
|
||||||
|
- Fix a long-standing bug where messages in the `device_inbox` table for deleted devices would persist indefinitely. Contributed by @dklimpel and @JohannesKleine. ([\#10969](https://github.com/matrix-org/synapse/issues/10969), [\#11212](https://github.com/matrix-org/synapse/issues/11212))
|
||||||
|
- Do not accept events if a third-party rule `check_event_allowed` callback raises an exception. ([\#11033](https://github.com/matrix-org/synapse/issues/11033))
|
||||||
|
- Fix long-standing bug where verification requests could fail in certain cases if a federation whitelist was in place but did not include your own homeserver. ([\#11129](https://github.com/matrix-org/synapse/issues/11129))
|
||||||
|
- Allow an empty list of `state_events_at_start` to be sent when using the [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) `/batch_send` endpoint and the author of the historical messages is already part of the current room state at the given `?prev_event_id`. ([\#11188](https://github.com/matrix-org/synapse/issues/11188))
|
||||||
|
- Fix a bug introduced in Synapse 1.45.0 which prevented the `synapse_review_recent_signups` script from running. Contributed by @samuel-p. ([\#11191](https://github.com/matrix-org/synapse/issues/11191))
|
||||||
|
- Delete `to_device` messages for hidden devices that will never be read, reducing database size. ([\#11199](https://github.com/matrix-org/synapse/issues/11199))
|
||||||
|
- Fix a long-standing bug wherein a missing `Content-Type` header when downloading remote media would cause Synapse to throw an error. ([\#11200](https://github.com/matrix-org/synapse/issues/11200))
|
||||||
|
- Fix a long-standing bug which could result in serialization errors and potentially duplicate transaction data when sending ephemeral events to application services. Contributed by @Fizzadar at Beeper. ([\#11207](https://github.com/matrix-org/synapse/issues/11207))
|
||||||
|
- Fix a bug introduced in Synapse 1.35.0 which made it impossible to join rooms that return a `send_join` response containing floats. ([\#11217](https://github.com/matrix-org/synapse/issues/11217))
|
||||||
|
- Fix long-standing bug where cross signing keys were not included in the response to `/r0/keys/query` the first time a remote user was queried. ([\#11234](https://github.com/matrix-org/synapse/issues/11234))
|
||||||
|
- Fix a long-standing bug where all requests that read events from the database could get stuck as a result of losing the database connection. ([\#11240](https://github.com/matrix-org/synapse/issues/11240))
|
||||||
|
- Fix a bug preventing Synapse from being rolled back to an earlier version when using workers. ([\#11255](https://github.com/matrix-org/synapse/issues/11255), [\#11276](https://github.com/matrix-org/synapse/issues/11276))
|
||||||
|
- Fix a bug introduced in Synapse 1.37.1 which caused a remote event being processed by a worker to not get processed on restart if the worker was killed. ([\#11262](https://github.com/matrix-org/synapse/issues/11262))
|
||||||
|
- Only allow old Element/Riot Android clients to send read receipts without a request body. All other clients must include a request body as required by the specification. Contributed by @rogersheu. ([\#11157](https://github.com/matrix-org/synapse/issues/11157))
|
||||||
|
|
||||||
|
|
||||||
|
Updates to the Docker image
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
- Avoid changing user ID when started as a non-root user, and no explicit `UID` is set. ([\#11209](https://github.com/matrix-org/synapse/issues/11209))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Improve example HAProxy config in the docs to properly handle HTTP `Host` headers with port information. This is required for federation over port 443 to work correctly. ([\#11128](https://github.com/matrix-org/synapse/issues/11128))
|
||||||
|
- Add documentation for using Authentik as an OpenID Connect Identity Provider. Contributed by @samip5. ([\#11151](https://github.com/matrix-org/synapse/issues/11151))
|
||||||
|
- Clarify lack of support for Windows. ([\#11198](https://github.com/matrix-org/synapse/issues/11198))
|
||||||
|
- Improve code formatting and fix a few typos in docs. Contributed by @sumnerevans at Beeper. ([\#11221](https://github.com/matrix-org/synapse/issues/11221))
|
||||||
|
- Add documentation for using LemonLDAP as an OpenID Connect Identity Provider. Contributed by @l00ptr. ([\#11257](https://github.com/matrix-org/synapse/issues/11257))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Add type annotations for the `log_function` decorator. ([\#10943](https://github.com/matrix-org/synapse/issues/10943))
|
||||||
|
- Add type hints to `synapse.events`. ([\#11098](https://github.com/matrix-org/synapse/issues/11098))
|
||||||
|
- Remove and document unnecessary `RoomStreamToken` checks in application service ephemeral event code. ([\#11137](https://github.com/matrix-org/synapse/issues/11137))
|
||||||
|
- Add type hints so that `synapse.http` passes `mypy` checks. ([\#11164](https://github.com/matrix-org/synapse/issues/11164))
|
||||||
|
- Update scripts to pass Shellcheck lints. ([\#11166](https://github.com/matrix-org/synapse/issues/11166))
|
||||||
|
- Add knock information in admin export. Contributed by Rafael Gonçalves. ([\#11171](https://github.com/matrix-org/synapse/issues/11171))
|
||||||
|
- Add tests to check that `ClientIpStore.get_last_client_ip_by_device` and `get_user_ip_and_agents` combine database and in-memory data correctly. ([\#11179](https://github.com/matrix-org/synapse/issues/11179))
|
||||||
|
- Refactor `Filter` to check different fields depending on the data type. ([\#11194](https://github.com/matrix-org/synapse/issues/11194))
|
||||||
|
- Improve type hints for the relations datastore. ([\#11205](https://github.com/matrix-org/synapse/issues/11205))
|
||||||
|
- Replace outdated links in the pull request checklist with links to the rendered documentation. ([\#11225](https://github.com/matrix-org/synapse/issues/11225))
|
||||||
|
- Fix a bug in unit test `test_block_room_and_not_purge`. ([\#11226](https://github.com/matrix-org/synapse/issues/11226))
|
||||||
|
- In `ObservableDeferred`, run observers in the order they were registered. ([\#11229](https://github.com/matrix-org/synapse/issues/11229))
|
||||||
|
- Minor speed up to start up times and getting updates for groups by adding missing index to `local_group_updates.stream_id`. ([\#11231](https://github.com/matrix-org/synapse/issues/11231))
|
||||||
|
- Add `twine` and `towncrier` as dev dependencies, as they're used by the release script. ([\#11233](https://github.com/matrix-org/synapse/issues/11233))
|
||||||
|
- Allow `stream_writers.typing` config to be a list of one worker. ([\#11237](https://github.com/matrix-org/synapse/issues/11237))
|
||||||
|
- Remove debugging statement in tests. ([\#11239](https://github.com/matrix-org/synapse/issues/11239))
|
||||||
|
- Fix [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) historical messages backfilling in random order on remote homeservers. ([\#11244](https://github.com/matrix-org/synapse/issues/11244))
|
||||||
|
- Add an additional test for the `cachedList` method decorator. ([\#11246](https://github.com/matrix-org/synapse/issues/11246))
|
||||||
|
- Make minor correction to the type of `auth_checkers` callbacks. ([\#11253](https://github.com/matrix-org/synapse/issues/11253))
|
||||||
|
- Clean up trivial aspects of the Debian package build tooling. ([\#11269](https://github.com/matrix-org/synapse/issues/11269), [\#11273](https://github.com/matrix-org/synapse/issues/11273))
|
||||||
|
- Blacklist new SyTest that checks that key uploads are valid pending the validation being implemented in Synapse. ([\#11270](https://github.com/matrix-org/synapse/issues/11270))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.46.0 (2021-11-02)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
The cause of the [performance regression affecting Synapse 1.44](https://github.com/matrix-org/synapse/issues/11049) has been identified and fixed. ([\#11177](https://github.com/matrix-org/synapse/issues/11177))
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a bug introduced in v1.46.0rc1 where URL previews of some XML documents would fail. ([\#11196](https://github.com/matrix-org/synapse/issues/11196))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.46.0rc1 (2021-10-27)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Add support for Ubuntu 21.10 "Impish Indri". ([\#11024](https://github.com/matrix-org/synapse/issues/11024))
|
||||||
|
- Port the Password Auth Providers module interface to the new generic interface. ([\#10548](https://github.com/matrix-org/synapse/issues/10548), [\#11180](https://github.com/matrix-org/synapse/issues/11180))
|
||||||
|
- Experimental support for the thread relation defined in [MSC3440](https://github.com/matrix-org/matrix-doc/pull/3440). ([\#11088](https://github.com/matrix-org/synapse/issues/11088), [\#11181](https://github.com/matrix-org/synapse/issues/11181), [\#11192](https://github.com/matrix-org/synapse/issues/11192))
|
||||||
|
- Users admin API can now also modify user type in addition to allowing it to be set on user creation. ([\#11174](https://github.com/matrix-org/synapse/issues/11174))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Newly-created public rooms are now only assigned an alias if the room's creation has not been blocked by permission settings. Contributed by @AndrewFerr. ([\#10930](https://github.com/matrix-org/synapse/issues/10930))
|
||||||
|
- Fix a long-standing bug which meant that events received over federation were sometimes incorrectly accepted into the room state. ([\#11001](https://github.com/matrix-org/synapse/issues/11001), [\#11009](https://github.com/matrix-org/synapse/issues/11009), [\#11012](https://github.com/matrix-org/synapse/issues/11012))
|
||||||
|
- Fix 500 error on `/messages` when the server accumulates more than 5 backwards extremities at a given depth for a room. ([\#11027](https://github.com/matrix-org/synapse/issues/11027))
|
||||||
|
- Fix a bug where setting a user's `external_id` via the admin API returns 500 and deletes user's existing external mappings if that external ID is already mapped. ([\#11051](https://github.com/matrix-org/synapse/issues/11051))
|
||||||
|
- Fix a long-standing bug where users excluded from the user directory were added into the directory if they belonged to a room which became public or private. ([\#11075](https://github.com/matrix-org/synapse/issues/11075))
|
||||||
|
- Fix a long-standing bug when attempting to preview URLs which are in the `windows-1252` character encoding. ([\#11077](https://github.com/matrix-org/synapse/issues/11077), [\#11089](https://github.com/matrix-org/synapse/issues/11089))
|
||||||
|
- Fix broken export-data admin command and add test script checking the command to CI. ([\#11078](https://github.com/matrix-org/synapse/issues/11078))
|
||||||
|
- Show an error when timestamp in seconds is provided to the `/purge_media_cache` Admin API. ([\#11101](https://github.com/matrix-org/synapse/issues/11101))
|
||||||
|
- Fix local users who left all their rooms being removed from the user directory, even if the `search_all_users` config option was enabled. ([\#11103](https://github.com/matrix-org/synapse/issues/11103))
|
||||||
|
- Fix a bug which caused the module API's `get_user_ip_and_agents` function to always fail on workers. `get_user_ip_and_agents` was introduced in 1.44.0 and did not function correctly on worker processes at the time. ([\#11112](https://github.com/matrix-org/synapse/issues/11112))
|
||||||
|
- Identity server connection is no longer ignoring `ip_range_whitelist`. ([\#11120](https://github.com/matrix-org/synapse/issues/11120))
|
||||||
|
- Fix a bug introduced in Synapse 1.45.0 breaking the configuration file parsing script. ([\#11145](https://github.com/matrix-org/synapse/issues/11145))
|
||||||
|
- Fix a performance regression introduced in 1.44.0 which could cause client requests to time out when making large numbers of outbound requests. ([\#11177](https://github.com/matrix-org/synapse/issues/11177), [\#11190](https://github.com/matrix-org/synapse/issues/11190))
|
||||||
|
- Resolve and share `state_groups` for all [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) historical events in batch. ([\#10975](https://github.com/matrix-org/synapse/issues/10975))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Fix broken links relating to module API deprecation in the upgrade notes. ([\#11069](https://github.com/matrix-org/synapse/issues/11069))
|
||||||
|
- Add more information about what happens when a user is deactivated. ([\#11083](https://github.com/matrix-org/synapse/issues/11083))
|
||||||
|
- Clarify the the sample log config can be copied from the documentation without issue. ([\#11092](https://github.com/matrix-org/synapse/issues/11092))
|
||||||
|
- Update the admin API documentation with an updated list of the characters allowed in registration tokens. ([\#11093](https://github.com/matrix-org/synapse/issues/11093))
|
||||||
|
- Document Synapse's behaviour when dealing with multiple modules registering the same callbacks and/or handlers for the same HTTP endpoints. ([\#11096](https://github.com/matrix-org/synapse/issues/11096))
|
||||||
|
- Fix instances of `[example]{.title-ref}` in the upgrade documentation as a result of prior RST to Markdown conversion. ([\#11118](https://github.com/matrix-org/synapse/issues/11118))
|
||||||
|
- Document the version of Synapse each module callback was introduced in. ([\#11132](https://github.com/matrix-org/synapse/issues/11132))
|
||||||
|
- Document the version of Synapse that introduced each module API method. ([\#11183](https://github.com/matrix-org/synapse/issues/11183))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
- Fix spurious warnings about losing the logging context on the `ReplicationCommandHandler` when losing the replication connection. ([\#10984](https://github.com/matrix-org/synapse/issues/10984))
|
||||||
|
- Include rejected status when we log events. ([\#11008](https://github.com/matrix-org/synapse/issues/11008))
|
||||||
|
- Add some extra logging to the event persistence code. ([\#11014](https://github.com/matrix-org/synapse/issues/11014))
|
||||||
|
- Rearrange the internal workings of the incremental user directory updates. ([\#11035](https://github.com/matrix-org/synapse/issues/11035))
|
||||||
|
- Fix a long-standing bug where users excluded from the directory could still be added to the `users_who_share_private_rooms` table after a regular user joins a private room. ([\#11143](https://github.com/matrix-org/synapse/issues/11143))
|
||||||
|
- Add and improve type hints. ([\#10972](https://github.com/matrix-org/synapse/issues/10972), [\#11055](https://github.com/matrix-org/synapse/issues/11055), [\#11066](https://github.com/matrix-org/synapse/issues/11066), [\#11076](https://github.com/matrix-org/synapse/issues/11076), [\#11095](https://github.com/matrix-org/synapse/issues/11095), [\#11109](https://github.com/matrix-org/synapse/issues/11109), [\#11121](https://github.com/matrix-org/synapse/issues/11121), [\#11146](https://github.com/matrix-org/synapse/issues/11146))
|
||||||
|
- Mark the Synapse package as containing type annotations and fix export declarations so that Synapse pluggable modules may be type checked against Synapse. ([\#11054](https://github.com/matrix-org/synapse/issues/11054))
|
||||||
|
- Remove dead code from `MediaFilePaths`. ([\#11056](https://github.com/matrix-org/synapse/issues/11056))
|
||||||
|
- Be more lenient when parsing oEmbed response versions. ([\#11065](https://github.com/matrix-org/synapse/issues/11065))
|
||||||
|
- Create a separate module for the retention configuration. ([\#11070](https://github.com/matrix-org/synapse/issues/11070))
|
||||||
|
- Clean up some of the federation event authentication code for clarity. ([\#11115](https://github.com/matrix-org/synapse/issues/11115), [\#11116](https://github.com/matrix-org/synapse/issues/11116), [\#11122](https://github.com/matrix-org/synapse/issues/11122))
|
||||||
|
- Add docstrings and comments to the application service ephemeral event sending code. ([\#11138](https://github.com/matrix-org/synapse/issues/11138))
|
||||||
|
- Update the `sign_json` script to support inline configuration of the signing key. ([\#11139](https://github.com/matrix-org/synapse/issues/11139))
|
||||||
|
- Fix broken link in the docker image README. ([\#11144](https://github.com/matrix-org/synapse/issues/11144))
|
||||||
|
- Always dump logs from unit tests during CI runs. ([\#11068](https://github.com/matrix-org/synapse/issues/11068))
|
||||||
|
- Add tests for `MediaFilePaths` class. ([\#11057](https://github.com/matrix-org/synapse/issues/11057))
|
||||||
|
- Simplify the user admin API tests. ([\#11048](https://github.com/matrix-org/synapse/issues/11048))
|
||||||
|
- Add a test for the workaround introduced in [\#11042](https://github.com/matrix-org/synapse/pull/11042) concerning the behaviour of third-party rule modules and `SynapseError`s. ([\#11071](https://github.com/matrix-org/synapse/issues/11071))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.45.1 (2021-10-20)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Revert change to counting of deactivated users towards the monthly active users limit, introduced in 1.45.0rc1. ([\#11127](https://github.com/matrix-org/synapse/issues/11127))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.45.0 (2021-10-19)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
No functional changes since Synapse 1.45.0rc2.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
------------
|
||||||
|
|
||||||
|
- A suspected [performance regression](https://github.com/matrix-org/synapse/issues/11049) which was first reported after the release of 1.44.0 remains unresolved.
|
||||||
|
|
||||||
|
We have not been able to identify a probable cause. Affected users report that setting up a federation sender worker appears to alleviate symptoms of the regression.
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Reword changelog to clarify concerns about a suspected performance regression in 1.44.0. ([\#11117](https://github.com/matrix-org/synapse/issues/11117))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.45.0rc2 (2021-10-14)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
This release candidate [fixes](https://github.com/matrix-org/synapse/issues/11053) a user directory [bug](https://github.com/matrix-org/synapse/issues/11025) present in 1.45.0rc1.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
------------
|
||||||
|
|
||||||
|
- A suspected [performance regression](https://github.com/matrix-org/synapse/issues/11049) which was first reported after the release of 1.44.0 remains unresolved.
|
||||||
|
|
||||||
|
We have not been able to identify a probable cause. Affected users report that setting up a federation sender worker appears to alleviate symptoms of the regression.
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a long-standing bug when using multiple event persister workers where events were not correctly sent down `/sync` due to a race. ([\#11045](https://github.com/matrix-org/synapse/issues/11045))
|
||||||
|
- Fix a bug introduced in Synapse 1.45.0rc1 where the user directory would stop updating if it processed an event from a
|
||||||
|
user not in the `users` table. ([\#11053](https://github.com/matrix-org/synapse/issues/11053))
|
||||||
|
- Fix a bug introduced in Synapse 1.44.0 when logging errors during oEmbed processing. ([\#11061](https://github.com/matrix-org/synapse/issues/11061))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Add an 'approximate difference' method to `StateFilter`. ([\#10825](https://github.com/matrix-org/synapse/issues/10825))
|
||||||
|
- Fix inconsistent behavior of `get_last_client_by_ip` when reporting data that has not been stored in the database yet. ([\#10970](https://github.com/matrix-org/synapse/issues/10970))
|
||||||
|
- Fix a bug introduced in Synapse 1.21.0 that causes opentracing and Prometheus metrics for replication requests to be measured incorrectly. ([\#10996](https://github.com/matrix-org/synapse/issues/10996))
|
||||||
|
- Ensure that cache config tests do not share state. ([\#11036](https://github.com/matrix-org/synapse/issues/11036))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.45.0rc1 (2021-10-12)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
**Note:** Media storage providers module that read from Synapse's configuration need changes as of this version, see the [upgrade notes](https://matrix-org.github.io/synapse/develop/upgrade#upgrading-to-v1450) for more information.
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
------------
|
||||||
|
|
||||||
|
- We are investigating [a performance issue](https://github.com/matrix-org/synapse/issues/11049) which was reported after the release of 1.44.0.
|
||||||
|
- We are aware of [a bug](https://github.com/matrix-org/synapse/issues/11025) with the user directory when using application services. A second release candidate is expected which will resolve this.
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Add [MSC3069](https://github.com/matrix-org/matrix-doc/pull/3069) support to `/account/whoami`. ([\#9655](https://github.com/matrix-org/synapse/issues/9655))
|
||||||
|
- Support autodiscovery of oEmbed previews. ([\#10822](https://github.com/matrix-org/synapse/issues/10822))
|
||||||
|
- Add a `user_may_send_3pid_invite` spam checker callback for modules to allow or deny 3PID invites. ([\#10894](https://github.com/matrix-org/synapse/issues/10894))
|
||||||
|
- Add a spam checker callback to allow or deny room joins. ([\#10910](https://github.com/matrix-org/synapse/issues/10910))
|
||||||
|
- Include an `update_synapse_database` script in the distribution. Contributed by @Fizzadar at Beeper. ([\#10954](https://github.com/matrix-org/synapse/issues/10954))
|
||||||
|
- Include exception information in JSON logging output. Contributed by @Fizzadar at Beeper. ([\#11028](https://github.com/matrix-org/synapse/issues/11028))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a minor bug in the response to `/_matrix/client/r0/voip/turnServer`. Contributed by @lukaslihotzki. ([\#10922](https://github.com/matrix-org/synapse/issues/10922))
|
||||||
|
- Fix a bug where empty `yyyy-mm-dd/` directories would be left behind in the media store's `url_cache_thumbnails/` directory. ([\#10924](https://github.com/matrix-org/synapse/issues/10924))
|
||||||
|
- Fix a bug introduced in Synapse v1.40.0 where the signature checks for room version 8 and 9 could be applied to earlier room versions in some situations. ([\#10927](https://github.com/matrix-org/synapse/issues/10927))
|
||||||
|
- Fix a long-standing bug wherein deactivated users still count towards the monthly active users limit. ([\#10947](https://github.com/matrix-org/synapse/issues/10947))
|
||||||
|
- Fix a long-standing bug which meant that events received over federation were sometimes incorrectly accepted into the room state. ([\#10956](https://github.com/matrix-org/synapse/issues/10956))
|
||||||
|
- Fix a long-standing bug where rebuilding the user directory wouldn't exclude support and deactivated users. ([\#10960](https://github.com/matrix-org/synapse/issues/10960))
|
||||||
|
- Fix [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) `/batch_send` endpoint rejecting subsequent batches with unknown batch ID error in existing room versions from the room creator. ([\#10962](https://github.com/matrix-org/synapse/issues/10962))
|
||||||
|
- Fix a bug that could leak local users' per-room nicknames and avatars when the user directory is rebuilt. ([\#10981](https://github.com/matrix-org/synapse/issues/10981))
|
||||||
|
- Fix a long-standing bug where the remainder of a batch of user directory changes would be silently dropped if the server left a room early in the batch. ([\#10982](https://github.com/matrix-org/synapse/issues/10982))
|
||||||
|
- Correct a bugfix introduced in Synapse v1.44.0 that would catch the wrong error if a connection is lost before a response could be written to it. ([\#10995](https://github.com/matrix-org/synapse/issues/10995))
|
||||||
|
- Fix a long-standing bug where local users' per-room nicknames/avatars were visible to anyone who could see you in the user directory. ([\#11002](https://github.com/matrix-org/synapse/issues/11002))
|
||||||
|
- Fix a long-standing bug where a user's per-room nickname/avatar would overwrite their profile in the user directory when a room was made public. ([\#11003](https://github.com/matrix-org/synapse/issues/11003))
|
||||||
|
- Work around a regression, introduced in Synapse v1.39.0, that caused `SynapseError`s raised by the experimental third-party rules module callback `check_event_allowed` to be ignored. ([\#11042](https://github.com/matrix-org/synapse/issues/11042))
|
||||||
|
- Fix a bug in [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) insertion events in rooms that could cause cross-talk/conflicts between batches. ([\#10877](https://github.com/matrix-org/synapse/issues/10877))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Change wording ("reference homeserver") in Synapse repository documentation. Contributed by @maxkratz. ([\#10971](https://github.com/matrix-org/synapse/issues/10971))
|
||||||
|
- Fix a dead URL in development documentation (SAML) and change wording from "Riot" to "Element". Contributed by @maxkratz. ([\#10973](https://github.com/matrix-org/synapse/issues/10973))
|
||||||
|
- Add additional content to the Welcome and Overview page of the documentation. ([\#10990](https://github.com/matrix-org/synapse/issues/10990))
|
||||||
|
- Update links to MSCs in documentation. Contributed by @dklimpel. ([\#10991](https://github.com/matrix-org/synapse/issues/10991))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Improve type hinting in `synapse.util`. ([\#10888](https://github.com/matrix-org/synapse/issues/10888))
|
||||||
|
- Add further type hints to `synapse.storage.util`. ([\#10892](https://github.com/matrix-org/synapse/issues/10892))
|
||||||
|
- Fix type hints to be compatible with an upcoming change to Twisted. ([\#10895](https://github.com/matrix-org/synapse/issues/10895))
|
||||||
|
- Update utility code to handle C implementations of frozendict. ([\#10902](https://github.com/matrix-org/synapse/issues/10902))
|
||||||
|
- Drop old functionality which maintained database compatibility with Synapse versions before v1.31. ([\#10903](https://github.com/matrix-org/synapse/issues/10903))
|
||||||
|
- Clean-up configuration helper classes for the `ServerConfig` class. ([\#10915](https://github.com/matrix-org/synapse/issues/10915))
|
||||||
|
- Use direct references to config flags. ([\#10916](https://github.com/matrix-org/synapse/issues/10916), [\#10959](https://github.com/matrix-org/synapse/issues/10959), [\#10985](https://github.com/matrix-org/synapse/issues/10985))
|
||||||
|
- Clean up some of the federation event authentication code for clarity. ([\#10926](https://github.com/matrix-org/synapse/issues/10926), [\#10940](https://github.com/matrix-org/synapse/issues/10940), [\#10986](https://github.com/matrix-org/synapse/issues/10986), [\#10987](https://github.com/matrix-org/synapse/issues/10987), [\#10988](https://github.com/matrix-org/synapse/issues/10988), [\#11010](https://github.com/matrix-org/synapse/issues/11010), [\#11011](https://github.com/matrix-org/synapse/issues/11011))
|
||||||
|
- Refactor various parts of the codebase to use `RoomVersion` objects instead of room version identifier strings. ([\#10934](https://github.com/matrix-org/synapse/issues/10934))
|
||||||
|
- Refactor user directory tests in preparation for upcoming changes. ([\#10935](https://github.com/matrix-org/synapse/issues/10935))
|
||||||
|
- Include the event id in the logcontext when handling PDUs received over federation. ([\#10936](https://github.com/matrix-org/synapse/issues/10936))
|
||||||
|
- Fix logged errors in unit tests. ([\#10939](https://github.com/matrix-org/synapse/issues/10939))
|
||||||
|
- Fix a broken test to ensure that consent configuration works during registration. ([\#10945](https://github.com/matrix-org/synapse/issues/10945))
|
||||||
|
- Add type hints to filtering classes. ([\#10958](https://github.com/matrix-org/synapse/issues/10958))
|
||||||
|
- Add type-hint to `HomeserverTestcase.setup_test_homeserver`. ([\#10961](https://github.com/matrix-org/synapse/issues/10961))
|
||||||
|
- Fix the test utility function `create_room_as` so that `is_public=True` will explicitly set the `visibility` parameter of room creation requests to `public`. Contributed by @AndrewFerr. ([\#10963](https://github.com/matrix-org/synapse/issues/10963))
|
||||||
|
- Make the release script more robust and transparent. ([\#10966](https://github.com/matrix-org/synapse/issues/10966))
|
||||||
|
- Refactor [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) `/batch_send` mega function into smaller handler functions. ([\#10974](https://github.com/matrix-org/synapse/issues/10974))
|
||||||
|
- Log stack traces when a missing opentracing span is detected. ([\#10983](https://github.com/matrix-org/synapse/issues/10983))
|
||||||
|
- Update GHA config to run tests against Python 3.10 and PostgreSQL 14. ([\#10992](https://github.com/matrix-org/synapse/issues/10992))
|
||||||
|
- Fix a long-standing bug where `ReadWriteLock`s could drop logging contexts on exit. ([\#10993](https://github.com/matrix-org/synapse/issues/10993))
|
||||||
|
- Add a `CODEOWNERS` file to automatically request reviews from the `@matrix-org/synapse-core` team on new pull requests. ([\#10994](https://github.com/matrix-org/synapse/issues/10994))
|
||||||
|
- Add further type hints to `synapse.state`. ([\#11004](https://github.com/matrix-org/synapse/issues/11004))
|
||||||
|
- Remove the deprecated `BaseHandler` object. ([\#11005](https://github.com/matrix-org/synapse/issues/11005))
|
||||||
|
- Bump mypy version for CI to 0.910, and pull in new type stubs for dependencies. ([\#11006](https://github.com/matrix-org/synapse/issues/11006))
|
||||||
|
- Fix CI to run the unit tests without optional deps. ([\#11017](https://github.com/matrix-org/synapse/issues/11017))
|
||||||
|
- Ensure that cache config tests do not share state. ([\#11019](https://github.com/matrix-org/synapse/issues/11019))
|
||||||
|
- Add additional type hints to `synapse.server_notices`. ([\#11021](https://github.com/matrix-org/synapse/issues/11021))
|
||||||
|
- Add additional type hints for `synapse.push`. ([\#11023](https://github.com/matrix-org/synapse/issues/11023))
|
||||||
|
- When installing the optional developer dependencies, also include the dependencies needed for type-checking and unit testing. ([\#11034](https://github.com/matrix-org/synapse/issues/11034))
|
||||||
|
- Remove unnecessary list comprehension from `synapse_port_db` to satisfy code style requirements. ([\#11043](https://github.com/matrix-org/synapse/issues/11043))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.44.0 (2021-10-05)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
No significant changes since 1.44.0rc3.
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.44.0rc3 (2021-10-04)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a bug introduced in Synapse v1.40.0 where changing a user's display name or avatar in a restricted room would cause an authentication error. ([\#10933](https://github.com/matrix-org/synapse/issues/10933))
|
||||||
|
- Fix `/admin/whois/{user_id}` endpoint, which was broken in v1.44.0rc1. ([\#10968](https://github.com/matrix-org/synapse/issues/10968))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.44.0rc2 (2021-09-30)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a bug introduced in v1.44.0rc1 which caused the experimental [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) `/batch_send` endpoint to return a 500 error. ([\#10938](https://github.com/matrix-org/synapse/issues/10938))
|
||||||
|
- Fix a bug introduced in v1.44.0rc1 which prevented sending presence events to application services. ([\#10944](https://github.com/matrix-org/synapse/issues/10944))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Minor updates to the installation instructions. ([\#10919](https://github.com/matrix-org/synapse/issues/10919))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.44.0rc1 (2021-09-29)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Only allow the [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) `/batch_send?chunk_id=xxx` endpoint to connect to an already existing insertion event. ([\#10776](https://github.com/matrix-org/synapse/issues/10776))
|
||||||
|
- Improve oEmbed URL previews by processing the author name, photo, and video information. ([\#10814](https://github.com/matrix-org/synapse/issues/10814), [\#10819](https://github.com/matrix-org/synapse/issues/10819))
|
||||||
|
- Speed up responding with large JSON objects to requests. ([\#10868](https://github.com/matrix-org/synapse/issues/10868), [\#10905](https://github.com/matrix-org/synapse/issues/10905))
|
||||||
|
- Add a `user_may_create_room_with_invites` spam checker callback to allow modules to allow or deny a room creation request based on the invites and/or 3PID invites it includes. ([\#10898](https://github.com/matrix-org/synapse/issues/10898))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a long-standing bug that caused an `AssertionError` when purging history in certain rooms. Contributed by @Kokokokoka. ([\#10690](https://github.com/matrix-org/synapse/issues/10690))
|
||||||
|
- Fix a long-standing bug which caused deactivated users that were later reactivated to be missing from the user directory. ([\#10782](https://github.com/matrix-org/synapse/issues/10782))
|
||||||
|
- Fix a long-standing bug that caused unbanning a user by sending a membership event to fail. Contributed by @aaronraimist. ([\#10807](https://github.com/matrix-org/synapse/issues/10807))
|
||||||
|
- Fix a long-standing bug where logging contexts would go missing when federation requests time out. ([\#10810](https://github.com/matrix-org/synapse/issues/10810))
|
||||||
|
- Fix a long-standing bug causing an error in the deprecated `/initialSync` endpoint when using the undocumented `from` and `to` parameters. ([\#10827](https://github.com/matrix-org/synapse/issues/10827))
|
||||||
|
- Fix a bug causing the `remove_stale_pushers` background job to repeatedly fail and log errors. This bug affected Synapse servers that had been upgraded from version 1.28 or older and are using SQLite. ([\#10843](https://github.com/matrix-org/synapse/issues/10843))
|
||||||
|
- Fix a long-standing bug in Unicode support of the room search admin API breaking search for rooms with non-ASCII characters. ([\#10859](https://github.com/matrix-org/synapse/issues/10859))
|
||||||
|
- Fix a bug introduced in Synapse 1.37.0 which caused `knock` membership events which we sent to remote servers to be incorrectly stored in the local database. ([\#10873](https://github.com/matrix-org/synapse/issues/10873))
|
||||||
|
- Fix invalidating one-time key count cache after claiming keys. The bug was introduced in Synapse v1.41.0. Contributed by Tulir at Beeper. ([\#10875](https://github.com/matrix-org/synapse/issues/10875))
|
||||||
|
- Fix a long-standing bug causing application service users to be subject to MAU blocking if the MAU limit had been reached, even if configured not to be blocked. ([\#10881](https://github.com/matrix-org/synapse/issues/10881))
|
||||||
|
- Fix a long-standing bug which could cause events pulled over federation to be incorrectly rejected. ([\#10907](https://github.com/matrix-org/synapse/issues/10907))
|
||||||
|
- Fix a long-standing bug causing URL cache files to be stored in storage providers. Server admins may safely delete the `url_cache/` and `url_cache_thumbnails/` directories from any configured storage providers to reclaim space. ([\#10911](https://github.com/matrix-org/synapse/issues/10911))
|
||||||
|
- Fix a long-standing bug leading to race conditions when creating media store and config directories. ([\#10913](https://github.com/matrix-org/synapse/issues/10913))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Fix some crashes in the Module API example code, by adding JSON encoding/decoding. ([\#10845](https://github.com/matrix-org/synapse/issues/10845))
|
||||||
|
- Add developer documentation about experimental configuration flags. ([\#10865](https://github.com/matrix-org/synapse/issues/10865))
|
||||||
|
- Properly remove deleted files from GitHub pages when generating the documentation. ([\#10869](https://github.com/matrix-org/synapse/issues/10869))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Fix GitHub Actions config so we can run sytest on synapse from parallel branches. ([\#10659](https://github.com/matrix-org/synapse/issues/10659))
|
||||||
|
- Split out [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) meta events to their own fields in the `/batch_send` response. ([\#10777](https://github.com/matrix-org/synapse/issues/10777))
|
||||||
|
- Add missing type hints to REST servlets. ([\#10785](https://github.com/matrix-org/synapse/issues/10785), [\#10817](https://github.com/matrix-org/synapse/issues/10817))
|
||||||
|
- Simplify the internal logic which maintains the user directory database tables. ([\#10796](https://github.com/matrix-org/synapse/issues/10796))
|
||||||
|
- Use direct references to config flags. ([\#10812](https://github.com/matrix-org/synapse/issues/10812), [\#10885](https://github.com/matrix-org/synapse/issues/10885), [\#10893](https://github.com/matrix-org/synapse/issues/10893), [\#10897](https://github.com/matrix-org/synapse/issues/10897))
|
||||||
|
- Specify the type of token in generic "Invalid token" error messages. ([\#10815](https://github.com/matrix-org/synapse/issues/10815))
|
||||||
|
- Make `StateFilter` frozen so it is hashable. ([\#10816](https://github.com/matrix-org/synapse/issues/10816))
|
||||||
|
- Fix a long-standing bug where an `m.room.message` event containing a null byte would cause an internal server error. ([\#10820](https://github.com/matrix-org/synapse/issues/10820))
|
||||||
|
- Add type hints to the state database. ([\#10823](https://github.com/matrix-org/synapse/issues/10823))
|
||||||
|
- Opt out of cache expiry for `get_users_who_share_room_with_user`, to hopefully improve `/sync` performance when you
|
||||||
|
haven't synced recently. ([\#10826](https://github.com/matrix-org/synapse/issues/10826))
|
||||||
|
- Track cache eviction rates more finely in Prometheus's monitoring. ([\#10829](https://github.com/matrix-org/synapse/issues/10829))
|
||||||
|
- Add missing type hints to `synapse.handlers`. ([\#10831](https://github.com/matrix-org/synapse/issues/10831), [\#10856](https://github.com/matrix-org/synapse/issues/10856))
|
||||||
|
- Extend the Module API to let plug-ins check whether an ID is local and to access IP + User Agent data. ([\#10833](https://github.com/matrix-org/synapse/issues/10833))
|
||||||
|
- Factor out PNG image data to a constant to be used in several tests. ([\#10834](https://github.com/matrix-org/synapse/issues/10834))
|
||||||
|
- Add a test to ensure state events sent by modules get persisted correctly. ([\#10835](https://github.com/matrix-org/synapse/issues/10835))
|
||||||
|
- Rename [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) fields and event types from `chunk` to `batch` to match the `/batch_send` endpoint. ([\#10838](https://github.com/matrix-org/synapse/issues/10838))
|
||||||
|
- Rename [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) `/batch_send` query parameter from `?prev_event` to more obvious usage with `?prev_event_id`. ([\#10839](https://github.com/matrix-org/synapse/issues/10839))
|
||||||
|
- Add type hints to `synapse.http.site`. ([\#10867](https://github.com/matrix-org/synapse/issues/10867))
|
||||||
|
- Include outlier status when we log V2 or V3 events. ([\#10879](https://github.com/matrix-org/synapse/issues/10879))
|
||||||
|
- Break down Grafana's cache expiry time series based on reason for eviction, c.f. [\#10829](https://github.com/matrix-org/synapse/issues/10829). ([\#10880](https://github.com/matrix-org/synapse/issues/10880))
|
||||||
|
- Clean up some of the federation event authentication code for clarity. ([\#10883](https://github.com/matrix-org/synapse/issues/10883), [\#10884](https://github.com/matrix-org/synapse/issues/10884), [\#10896](https://github.com/matrix-org/synapse/issues/10896), [\#10901](https://github.com/matrix-org/synapse/issues/10901))
|
||||||
|
- Allow the `.` and `~` characters when creating registration tokens as per the change to [MSC3231](https://github.com/matrix-org/matrix-doc/pull/3231). ([\#10887](https://github.com/matrix-org/synapse/issues/10887))
|
||||||
|
- Clean up some unnecessary parentheses in places around the codebase. ([\#10889](https://github.com/matrix-org/synapse/issues/10889))
|
||||||
|
- Improve type hinting in the user directory code. ([\#10891](https://github.com/matrix-org/synapse/issues/10891))
|
||||||
|
- Update development testing script `test_postgresql.sh` to use a supported Python version and make re-runs quicker. ([\#10906](https://github.com/matrix-org/synapse/issues/10906))
|
||||||
|
- Document and summarize changes in schema version `61` – `64`. ([\#10917](https://github.com/matrix-org/synapse/issues/10917))
|
||||||
|
- Update release script to sign the newly created git tags. ([\#10925](https://github.com/matrix-org/synapse/issues/10925))
|
||||||
|
- Fix Debian builds due to `dh-virtualenv` no longer being able to build their docs. ([\#10931](https://github.com/matrix-org/synapse/issues/10931))
|
||||||
|
|
||||||
|
|
||||||
Synapse 1.43.0 (2021-09-21)
|
Synapse 1.43.0 (2021-09-21)
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ include demo/demo.tls.dh
|
|||||||
include demo/*.py
|
include demo/*.py
|
||||||
include demo/*.sh
|
include demo/*.sh
|
||||||
|
|
||||||
|
include synapse/py.typed
|
||||||
recursive-include synapse/storage *.sql
|
recursive-include synapse/storage *.sql
|
||||||
recursive-include synapse/storage *.sql.postgres
|
recursive-include synapse/storage *.sql.postgres
|
||||||
recursive-include synapse/storage *.sql.sqlite
|
recursive-include synapse/storage *.sql.sqlite
|
||||||
|
|||||||
11
README.rst
11
README.rst
@@ -55,11 +55,8 @@ solutions. The hope is for Matrix to act as the building blocks for a new
|
|||||||
generation of fully open and interoperable messaging and VoIP apps for the
|
generation of fully open and interoperable messaging and VoIP apps for the
|
||||||
internet.
|
internet.
|
||||||
|
|
||||||
Synapse is a reference "homeserver" implementation of Matrix from the core
|
Synapse is a Matrix "homeserver" implementation developed by the matrix.org core
|
||||||
development team at matrix.org, written in Python/Twisted. It is intended to
|
team, written in Python 3/Twisted.
|
||||||
showcase the concept of Matrix and let folks see the spec in the context of a
|
|
||||||
codebase and let you run your own homeserver and generally help bootstrap the
|
|
||||||
ecosystem.
|
|
||||||
|
|
||||||
In Matrix, every user runs one or more Matrix clients, which connect through to
|
In Matrix, every user runs one or more Matrix clients, which connect through to
|
||||||
a Matrix homeserver. The homeserver stores all their personal chat history and
|
a Matrix homeserver. The homeserver stores all their personal chat history and
|
||||||
@@ -288,7 +285,7 @@ Quick start
|
|||||||
|
|
||||||
Before setting up a development environment for synapse, make sure you have the
|
Before setting up a development environment for synapse, make sure you have the
|
||||||
system dependencies (such as the python header files) installed - see
|
system dependencies (such as the python header files) installed - see
|
||||||
`Installing from source <https://matrix-org.github.io/synapse/latest/setup/installation.html#installing-from-source>`_.
|
`Platform-specific prerequisites <https://matrix-org.github.io/synapse/latest/setup/installation.html#platform-specific-prerequisites>`_.
|
||||||
|
|
||||||
To check out a synapse for development, clone the git repo into a working
|
To check out a synapse for development, clone the git repo into a working
|
||||||
directory of your choice::
|
directory of your choice::
|
||||||
@@ -301,7 +298,7 @@ to install using pip and a virtualenv::
|
|||||||
|
|
||||||
python3 -m venv ./env
|
python3 -m venv ./env
|
||||||
source ./env/bin/activate
|
source ./env/bin/activate
|
||||||
pip install -e ".[all,test]"
|
pip install -e ".[all,dev]"
|
||||||
|
|
||||||
This will run a process of downloading and installing all the needed
|
This will run a process of downloading and installing all the needed
|
||||||
dependencies into a virtual env. If any dependencies fail to install,
|
dependencies into a virtual env. If any dependencies fail to install,
|
||||||
|
|||||||
1
changelog.d/11223.feature
Normal file
1
changelog.d/11223.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add a new version of delete room admin API `DELETE /_synapse/admin/v2/rooms/<room_id>` to run it in background. Contributed by @dklimpel.
|
||||||
1
changelog.d/11228.feature
Normal file
1
changelog.d/11228.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Allow the admin [Delete Room API](https://matrix-org.github.io/synapse/latest/admin_api/rooms.html#delete-room-api) to block a room without the need to join it.
|
||||||
2
changelog.d/11230.bugfix
Normal file
2
changelog.d/11230.bugfix
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
Fix a long-standing bug wherein display names or avatar URLs containing null bytes cause an internal server error
|
||||||
|
when stored in the DB.
|
||||||
1
changelog.d/11236.feature
Normal file
1
changelog.d/11236.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Support filtering by relation senders & types per [MSC3440](https://github.com/matrix-org/matrix-doc/pull/3440).
|
||||||
1
changelog.d/11242.misc
Normal file
1
changelog.d/11242.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Split out federated PDU retrieval function into a non-cached version.
|
||||||
1
changelog.d/11247.misc
Normal file
1
changelog.d/11247.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Clean up code relating to to-device messages and sending ephemeral events to application services.
|
||||||
1
changelog.d/11278.misc
Normal file
1
changelog.d/11278.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix a small typo in the error response when a relation type other than 'm.annotation' is passed to `GET /rooms/{room_id}/aggregations/{event_id}`.
|
||||||
1
changelog.d/11280.misc
Normal file
1
changelog.d/11280.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Drop unused db tables `room_stats_historical` and `user_stats_historical`.
|
||||||
1
changelog.d/11281.doc
Normal file
1
changelog.d/11281.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Suggest users of the Debian packages add configuration to `/etc/matrix-synapse/conf.d/` to prevent, upon upgrade, being asked to choose between their configuration and the maintainer's.
|
||||||
1
changelog.d/11282.misc
Normal file
1
changelog.d/11282.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Require all files in synapse/ and tests/ to pass mypy unless specifically excluded.
|
||||||
1
changelog.d/11285.misc
Normal file
1
changelog.d/11285.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Require all files in synapse/ and tests/ to pass mypy unless specifically excluded.
|
||||||
1
changelog.d/11286.doc
Normal file
1
changelog.d/11286.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix typo in the word `available` and fix HTTP method (should be `GET`) for the `username_available` admin API. Contributed by Stanislav Motylkov.
|
||||||
1
changelog.d/11287.misc
Normal file
1
changelog.d/11287.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add missing type hints to `synapse.app`.
|
||||||
1
changelog.d/11288.bugfix
Normal file
1
changelog.d/11288.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix a long-standing bug where uploading extremely thin images (e.g. 1000x1) would fail. Contributed by @Neeeflix.
|
||||||
1
changelog.d/11292.misc
Normal file
1
changelog.d/11292.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Remove unused parameters on `FederationEventHandler._check_event_auth`.
|
||||||
1
changelog.d/11297.misc
Normal file
1
changelog.d/11297.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to `synapse._scripts`.
|
||||||
1
changelog.d/11298.doc
Normal file
1
changelog.d/11298.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add Single Sign-On, SAML and CAS pages to the documentation.
|
||||||
1
changelog.d/11303.misc
Normal file
1
changelog.d/11303.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix an issue which prevented the 'remove deleted devices from device_inbox column' background process from running when updating from a recent Synapse version.
|
||||||
1
changelog.d/11307.misc
Normal file
1
changelog.d/11307.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to storage classes.
|
||||||
1
changelog.d/11310.misc
Normal file
1
changelog.d/11310.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to storage classes.
|
||||||
1
changelog.d/11311.misc
Normal file
1
changelog.d/11311.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to storage classes.
|
||||||
1
changelog.d/11312.misc
Normal file
1
changelog.d/11312.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to storage classes.
|
||||||
1
changelog.d/11313.misc
Normal file
1
changelog.d/11313.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to storage classes.
|
||||||
1
changelog.d/11314.misc
Normal file
1
changelog.d/11314.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to storage classes.
|
||||||
1
changelog.d/11316.misc
Normal file
1
changelog.d/11316.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to storage classes.
|
||||||
1
changelog.d/11321.misc
Normal file
1
changelog.d/11321.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to `synapse.util`.
|
||||||
1
changelog.d/11322.misc
Normal file
1
changelog.d/11322.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to storage classes.
|
||||||
1
changelog.d/11323.misc
Normal file
1
changelog.d/11323.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Improve type annotations in Synapse's test suite.
|
||||||
1
changelog.d/11327.misc
Normal file
1
changelog.d/11327.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Test that room alias deletion works as intended.
|
||||||
1
changelog.d/11332.misc
Normal file
1
changelog.d/11332.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to storage classes.
|
||||||
1
changelog.d/11335.feature
Normal file
1
changelog.d/11335.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Support the stable version of [MSC2778](https://github.com/matrix-org/matrix-doc/pull/2778): the `m.login.application_service` login type. Contributed by @tulir.
|
||||||
1
changelog.d/11339.misc
Normal file
1
changelog.d/11339.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to storage classes.
|
||||||
1
changelog.d/11342.misc
Normal file
1
changelog.d/11342.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints to storage classes.
|
||||||
1
changelog.d/11357.misc
Normal file
1
changelog.d/11357.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add a development script for visualising the storage class inheritance hierarchy.
|
||||||
@@ -6785,7 +6785,7 @@
|
|||||||
"expr": "rate(synapse_util_caches_cache:evicted_size{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}[$bucket_size])",
|
"expr": "rate(synapse_util_caches_cache:evicted_size{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}[$bucket_size])",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"intervalFactor": 1,
|
"intervalFactor": 1,
|
||||||
"legendFormat": "{{name}} {{job}}-{{index}}",
|
"legendFormat": "{{name}} ({{reason}}) {{job}}-{{index}}",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -10888,5 +10888,5 @@
|
|||||||
"timezone": "",
|
"timezone": "",
|
||||||
"title": "Synapse",
|
"title": "Synapse",
|
||||||
"uid": "000000012",
|
"uid": "000000012",
|
||||||
"version": 99
|
"version": 100
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,9 @@ AUTH="Authorization: Bearer $TOKEN"
|
|||||||
###################################################################################################
|
###################################################################################################
|
||||||
# finally start pruning the room:
|
# finally start pruning the room:
|
||||||
###################################################################################################
|
###################################################################################################
|
||||||
POSTDATA='{"delete_local_events":"true"}' # this will really delete local events, so the messages in the room really disappear unless they are restored by remote federation
|
# this will really delete local events, so the messages in the room really
|
||||||
|
# disappear unless they are restored by remote federation. This is because
|
||||||
|
# we pass {"delete_local_events":true} to the curl invocation below.
|
||||||
|
|
||||||
for ROOM in "${ROOMS_ARRAY[@]}"; do
|
for ROOM in "${ROOMS_ARRAY[@]}"; do
|
||||||
echo "########################################### $(date) ################# "
|
echo "########################################### $(date) ################# "
|
||||||
@@ -104,7 +106,7 @@ for ROOM in "${ROOMS_ARRAY[@]}"; do
|
|||||||
SLEEP=2
|
SLEEP=2
|
||||||
set -x
|
set -x
|
||||||
# call purge
|
# call purge
|
||||||
OUT=$(curl --header "$AUTH" -s -d $POSTDATA POST "$API_URL/admin/purge_history/$ROOM/$EVENT_ID")
|
OUT=$(curl --header "$AUTH" -s -d '{"delete_local_events":true}' POST "$API_URL/admin/purge_history/$ROOM/$EVENT_ID")
|
||||||
PURGE_ID=$(echo "$OUT" |grep purge_id|cut -d'"' -f4 )
|
PURGE_ID=$(echo "$OUT" |grep purge_id|cut -d'"' -f4 )
|
||||||
if [ "$PURGE_ID" == "" ]; then
|
if [ "$PURGE_ID" == "" ]; then
|
||||||
# probably the history purge is already in progress for $ROOM
|
# probably the history purge is already in progress for $ROOM
|
||||||
|
|||||||
11
debian/build_virtualenv
vendored
11
debian/build_virtualenv
vendored
@@ -15,7 +15,7 @@ export DH_VIRTUALENV_INSTALL_ROOT=/opt/venvs
|
|||||||
# python won't look in the right directory. At least this way, the error will
|
# python won't look in the right directory. At least this way, the error will
|
||||||
# be a *bit* more obvious.
|
# be a *bit* more obvious.
|
||||||
#
|
#
|
||||||
SNAKE=`readlink -e /usr/bin/python3`
|
SNAKE=$(readlink -e /usr/bin/python3)
|
||||||
|
|
||||||
# try to set the CFLAGS so any compiled C extensions are compiled with the most
|
# try to set the CFLAGS so any compiled C extensions are compiled with the most
|
||||||
# generic as possible x64 instructions, so that compiling it on a new Intel chip
|
# generic as possible x64 instructions, so that compiling it on a new Intel chip
|
||||||
@@ -24,7 +24,7 @@ SNAKE=`readlink -e /usr/bin/python3`
|
|||||||
# TODO: add similar things for non-amd64, or figure out a more generic way to
|
# TODO: add similar things for non-amd64, or figure out a more generic way to
|
||||||
# do this.
|
# do this.
|
||||||
|
|
||||||
case `dpkg-architecture -q DEB_HOST_ARCH` in
|
case $(dpkg-architecture -q DEB_HOST_ARCH) in
|
||||||
amd64)
|
amd64)
|
||||||
export CFLAGS=-march=x86-64
|
export CFLAGS=-march=x86-64
|
||||||
;;
|
;;
|
||||||
@@ -40,6 +40,7 @@ dh_virtualenv \
|
|||||||
--upgrade-pip \
|
--upgrade-pip \
|
||||||
--preinstall="lxml" \
|
--preinstall="lxml" \
|
||||||
--preinstall="mock" \
|
--preinstall="mock" \
|
||||||
|
--preinstall="wheel" \
|
||||||
--extra-pip-arg="--no-cache-dir" \
|
--extra-pip-arg="--no-cache-dir" \
|
||||||
--extra-pip-arg="--compile" \
|
--extra-pip-arg="--compile" \
|
||||||
--extras="all,systemd,test"
|
--extras="all,systemd,test"
|
||||||
@@ -56,8 +57,8 @@ case "$DEB_BUILD_OPTIONS" in
|
|||||||
*)
|
*)
|
||||||
# Copy tests to a temporary directory so that we can put them on the
|
# Copy tests to a temporary directory so that we can put them on the
|
||||||
# PYTHONPATH without putting the uninstalled synapse on the pythonpath.
|
# PYTHONPATH without putting the uninstalled synapse on the pythonpath.
|
||||||
tmpdir=`mktemp -d`
|
tmpdir=$(mktemp -d)
|
||||||
trap "rm -r $tmpdir" EXIT
|
trap 'rm -r $tmpdir' EXIT
|
||||||
|
|
||||||
cp -r tests "$tmpdir"
|
cp -r tests "$tmpdir"
|
||||||
|
|
||||||
@@ -98,7 +99,7 @@ esac
|
|||||||
--output-file="${PACKAGE_BUILD_DIR}/etc/matrix-synapse/log.yaml"
|
--output-file="${PACKAGE_BUILD_DIR}/etc/matrix-synapse/log.yaml"
|
||||||
|
|
||||||
# add a dependency on the right version of python to substvars.
|
# add a dependency on the right version of python to substvars.
|
||||||
PYPKG=`basename $SNAKE`
|
PYPKG=$(basename "$SNAKE")
|
||||||
echo "synapse:pydepends=$PYPKG" >> debian/matrix-synapse-py3.substvars
|
echo "synapse:pydepends=$PYPKG" >> debian/matrix-synapse-py3.substvars
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
82
debian/changelog
vendored
82
debian/changelog
vendored
@@ -1,3 +1,85 @@
|
|||||||
|
matrix-synapse-py3 (1.47.0~rc2) stable; urgency=medium
|
||||||
|
|
||||||
|
[ Dan Callahan ]
|
||||||
|
* Update scripts to pass Shellcheck lints.
|
||||||
|
* Remove unused Vagrant scripts from debian/ directory.
|
||||||
|
* Allow building Debian packages for any architecture, not just amd64.
|
||||||
|
* Preinstall the "wheel" package when building virtualenvs.
|
||||||
|
* Do not error if /etc/default/matrix-synapse is missing.
|
||||||
|
|
||||||
|
[ Synapse Packaging team ]
|
||||||
|
* New synapse release 1.47.0~rc2.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Wed, 10 Nov 2021 09:41:01 +0000
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.46.0) stable; urgency=medium
|
||||||
|
|
||||||
|
[ Richard van der Hoff ]
|
||||||
|
* Compress debs with xz, to fix incompatibility of impish debs with reprepro.
|
||||||
|
|
||||||
|
[ Synapse Packaging team ]
|
||||||
|
* New synapse release 1.46.0.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 02 Nov 2021 13:22:53 +0000
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.46.0~rc1) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.46.0~rc1.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 26 Oct 2021 14:04:04 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.45.1) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.45.1.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Wed, 20 Oct 2021 11:58:27 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.45.0) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.45.0.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 19 Oct 2021 11:18:53 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.45.0~rc2) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.45.0~rc2.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Thu, 14 Oct 2021 10:58:24 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.45.0~rc1) stable; urgency=medium
|
||||||
|
|
||||||
|
[ Nick @ Beeper ]
|
||||||
|
* Include an `update_synapse_database` script in the distribution.
|
||||||
|
|
||||||
|
[ Synapse Packaging team ]
|
||||||
|
* New synapse release 1.45.0~rc1.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 12 Oct 2021 10:46:27 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.44.0) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.44.0.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 05 Oct 2021 13:43:57 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.44.0~rc3) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.44.0~rc3.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Mon, 04 Oct 2021 14:57:22 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.44.0~rc2) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.44.0~rc2.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Thu, 30 Sep 2021 12:39:10 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.44.0~rc1) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.44.0~rc1.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 28 Sep 2021 13:41:28 +0100
|
||||||
|
|
||||||
matrix-synapse-py3 (1.43.0) stable; urgency=medium
|
matrix-synapse-py3 (1.43.0) stable; urgency=medium
|
||||||
|
|
||||||
* New synapse release 1.43.0.
|
* New synapse release 1.43.0.
|
||||||
|
|||||||
2
debian/control
vendored
2
debian/control
vendored
@@ -19,7 +19,7 @@ Standards-Version: 3.9.8
|
|||||||
Homepage: https://github.com/matrix-org/synapse
|
Homepage: https://github.com/matrix-org/synapse
|
||||||
|
|
||||||
Package: matrix-synapse-py3
|
Package: matrix-synapse-py3
|
||||||
Architecture: amd64
|
Architecture: any
|
||||||
Provides: matrix-synapse
|
Provides: matrix-synapse
|
||||||
Conflicts:
|
Conflicts:
|
||||||
matrix-synapse (<< 0.34.0.1-0matrix2),
|
matrix-synapse (<< 0.34.0.1-0matrix2),
|
||||||
|
|||||||
1
debian/matrix-synapse-py3.config
vendored
1
debian/matrix-synapse-py3.config
vendored
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
# shellcheck disable=SC1091
|
||||||
. /usr/share/debconf/confmodule
|
. /usr/share/debconf/confmodule
|
||||||
|
|
||||||
# try to update the debconf db according to whatever is in the config files
|
# try to update the debconf db according to whatever is in the config files
|
||||||
|
|||||||
1
debian/matrix-synapse-py3.links
vendored
1
debian/matrix-synapse-py3.links
vendored
@@ -3,3 +3,4 @@ opt/venvs/matrix-synapse/bin/register_new_matrix_user usr/bin/register_new_matri
|
|||||||
opt/venvs/matrix-synapse/bin/synapse_port_db usr/bin/synapse_port_db
|
opt/venvs/matrix-synapse/bin/synapse_port_db usr/bin/synapse_port_db
|
||||||
opt/venvs/matrix-synapse/bin/synapse_review_recent_signups usr/bin/synapse_review_recent_signups
|
opt/venvs/matrix-synapse/bin/synapse_review_recent_signups usr/bin/synapse_review_recent_signups
|
||||||
opt/venvs/matrix-synapse/bin/synctl usr/bin/synctl
|
opt/venvs/matrix-synapse/bin/synctl usr/bin/synctl
|
||||||
|
opt/venvs/matrix-synapse/bin/update_synapse_database usr/bin/update_synapse_database
|
||||||
|
|||||||
1
debian/matrix-synapse-py3.postinst
vendored
1
debian/matrix-synapse-py3.postinst
vendored
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
# shellcheck disable=SC1091
|
||||||
. /usr/share/debconf/confmodule
|
. /usr/share/debconf/confmodule
|
||||||
|
|
||||||
CONFIGFILE_SERVERNAME="/etc/matrix-synapse/conf.d/server_name.yaml"
|
CONFIGFILE_SERVERNAME="/etc/matrix-synapse/conf.d/server_name.yaml"
|
||||||
|
|||||||
2
debian/matrix-synapse.service
vendored
2
debian/matrix-synapse.service
vendored
@@ -5,7 +5,7 @@ Description=Synapse Matrix homeserver
|
|||||||
Type=notify
|
Type=notify
|
||||||
User=matrix-synapse
|
User=matrix-synapse
|
||||||
WorkingDirectory=/var/lib/matrix-synapse
|
WorkingDirectory=/var/lib/matrix-synapse
|
||||||
EnvironmentFile=/etc/default/matrix-synapse
|
EnvironmentFile=-/etc/default/matrix-synapse
|
||||||
ExecStartPre=/opt/venvs/matrix-synapse/bin/python -m synapse.app.homeserver --config-path=/etc/matrix-synapse/homeserver.yaml --config-path=/etc/matrix-synapse/conf.d/ --generate-keys
|
ExecStartPre=/opt/venvs/matrix-synapse/bin/python -m synapse.app.homeserver --config-path=/etc/matrix-synapse/homeserver.yaml --config-path=/etc/matrix-synapse/conf.d/ --generate-keys
|
||||||
ExecStart=/opt/venvs/matrix-synapse/bin/python -m synapse.app.homeserver --config-path=/etc/matrix-synapse/homeserver.yaml --config-path=/etc/matrix-synapse/conf.d/
|
ExecStart=/opt/venvs/matrix-synapse/bin/python -m synapse.app.homeserver --config-path=/etc/matrix-synapse/homeserver.yaml --config-path=/etc/matrix-synapse/conf.d/
|
||||||
ExecReload=/bin/kill -HUP $MAINPID
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
|
|||||||
6
debian/rules
vendored
6
debian/rules
vendored
@@ -51,5 +51,11 @@ override_dh_shlibdeps:
|
|||||||
override_dh_virtualenv:
|
override_dh_virtualenv:
|
||||||
./debian/build_virtualenv
|
./debian/build_virtualenv
|
||||||
|
|
||||||
|
override_dh_builddeb:
|
||||||
|
# force the compression to xzip, to stop dpkg-deb on impish defaulting to zstd
|
||||||
|
# (which requires reprepro 5.3.0-1.3, which is currently only in 'experimental' in Debian:
|
||||||
|
# https://metadata.ftp-master.debian.org/changelogs/main/r/reprepro/reprepro_5.3.0-1.3_changelog)
|
||||||
|
dh_builddeb -- -Zxz
|
||||||
|
|
||||||
%:
|
%:
|
||||||
dh $@ --with python-virtualenv
|
dh $@ --with python-virtualenv
|
||||||
|
|||||||
2
debian/test/.gitignore
vendored
2
debian/test/.gitignore
vendored
@@ -1,2 +0,0 @@
|
|||||||
.vagrant
|
|
||||||
*.log
|
|
||||||
23
debian/test/provision.sh
vendored
23
debian/test/provision.sh
vendored
@@ -1,23 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# provisioning script for vagrant boxes for testing the matrix-synapse debs.
|
|
||||||
#
|
|
||||||
# Will install the most recent matrix-synapse-py3 deb for this platform from
|
|
||||||
# the /debs directory.
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
apt-get update
|
|
||||||
apt-get install -y lsb-release
|
|
||||||
|
|
||||||
deb=`ls /debs/matrix-synapse-py3_*+$(lsb_release -cs)*.deb | sort | tail -n1`
|
|
||||||
|
|
||||||
debconf-set-selections <<EOF
|
|
||||||
matrix-synapse matrix-synapse/report-stats boolean false
|
|
||||||
matrix-synapse matrix-synapse/server-name string localhost:18448
|
|
||||||
EOF
|
|
||||||
|
|
||||||
dpkg -i "$deb"
|
|
||||||
|
|
||||||
sed -i -e '/port: 8...$/{s/8448/18448/; s/8008/18008/}' -e '$aregistration_shared_secret: secret' /etc/matrix-synapse/homeserver.yaml
|
|
||||||
systemctl restart matrix-synapse
|
|
||||||
13
debian/test/stretch/Vagrantfile
vendored
13
debian/test/stretch/Vagrantfile
vendored
@@ -1,13 +0,0 @@
|
|||||||
# -*- mode: ruby -*-
|
|
||||||
# vi: set ft=ruby :
|
|
||||||
|
|
||||||
ver = `cd ../../..; dpkg-parsechangelog -S Version`.strip()
|
|
||||||
|
|
||||||
Vagrant.configure("2") do |config|
|
|
||||||
config.vm.box = "debian/stretch64"
|
|
||||||
|
|
||||||
config.vm.synced_folder ".", "/vagrant", disabled: true
|
|
||||||
config.vm.synced_folder "../../../../debs", "/debs", type: "nfs"
|
|
||||||
|
|
||||||
config.vm.provision "shell", path: "../provision.sh"
|
|
||||||
end
|
|
||||||
10
debian/test/xenial/Vagrantfile
vendored
10
debian/test/xenial/Vagrantfile
vendored
@@ -1,10 +0,0 @@
|
|||||||
# -*- mode: ruby -*-
|
|
||||||
# vi: set ft=ruby :
|
|
||||||
|
|
||||||
Vagrant.configure("2") do |config|
|
|
||||||
config.vm.box = "ubuntu/xenial64"
|
|
||||||
|
|
||||||
config.vm.synced_folder ".", "/vagrant", disabled: true
|
|
||||||
config.vm.synced_folder "../../../../debs", "/debs"
|
|
||||||
config.vm.provision "shell", path: "../provision.sh"
|
|
||||||
end
|
|
||||||
@@ -6,14 +6,14 @@ DIR="$( cd "$( dirname "$0" )" && pwd )"
|
|||||||
|
|
||||||
PID_FILE="$DIR/servers.pid"
|
PID_FILE="$DIR/servers.pid"
|
||||||
|
|
||||||
if [ -f $PID_FILE ]; then
|
if [ -f "$PID_FILE" ]; then
|
||||||
echo "servers.pid exists!"
|
echo "servers.pid exists!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for port in 8080 8081 8082; do
|
for port in 8080 8081 8082; do
|
||||||
rm -rf $DIR/$port
|
rm -rf "${DIR:?}/$port"
|
||||||
rm -rf $DIR/media_store.$port
|
rm -rf "$DIR/media_store.$port"
|
||||||
done
|
done
|
||||||
|
|
||||||
rm -rf $DIR/etc
|
rm -rf "${DIR:?}/etc"
|
||||||
|
|||||||
150
demo/start.sh
150
demo/start.sh
@@ -4,21 +4,22 @@ DIR="$( cd "$( dirname "$0" )" && pwd )"
|
|||||||
|
|
||||||
CWD=$(pwd)
|
CWD=$(pwd)
|
||||||
|
|
||||||
cd "$DIR/.."
|
cd "$DIR/.." || exit
|
||||||
|
|
||||||
mkdir -p demo/etc
|
mkdir -p demo/etc
|
||||||
|
|
||||||
export PYTHONPATH=$(readlink -f $(pwd))
|
PYTHONPATH=$(readlink -f "$(pwd)")
|
||||||
|
export PYTHONPATH
|
||||||
|
|
||||||
|
|
||||||
echo $PYTHONPATH
|
echo "$PYTHONPATH"
|
||||||
|
|
||||||
for port in 8080 8081 8082; do
|
for port in 8080 8081 8082; do
|
||||||
echo "Starting server on port $port... "
|
echo "Starting server on port $port... "
|
||||||
|
|
||||||
https_port=$((port + 400))
|
https_port=$((port + 400))
|
||||||
mkdir -p demo/$port
|
mkdir -p demo/$port
|
||||||
pushd demo/$port
|
pushd demo/$port || exit
|
||||||
|
|
||||||
#rm $DIR/etc/$port.config
|
#rm $DIR/etc/$port.config
|
||||||
python3 -m synapse.app.homeserver \
|
python3 -m synapse.app.homeserver \
|
||||||
@@ -27,75 +28,78 @@ for port in 8080 8081 8082; do
|
|||||||
--config-path "$DIR/etc/$port.config" \
|
--config-path "$DIR/etc/$port.config" \
|
||||||
--report-stats no
|
--report-stats no
|
||||||
|
|
||||||
if ! grep -F "Customisation made by demo/start.sh" -q $DIR/etc/$port.config; then
|
if ! grep -F "Customisation made by demo/start.sh" -q "$DIR/etc/$port.config"; then
|
||||||
printf '\n\n# Customisation made by demo/start.sh\n' >> $DIR/etc/$port.config
|
|
||||||
|
|
||||||
echo "public_baseurl: http://localhost:$port/" >> $DIR/etc/$port.config
|
|
||||||
|
|
||||||
echo 'enable_registration: true' >> $DIR/etc/$port.config
|
|
||||||
|
|
||||||
# Warning, this heredoc depends on the interaction of tabs and spaces. Please don't
|
|
||||||
# accidentaly bork me with your fancy settings.
|
|
||||||
listeners=$(cat <<-PORTLISTENERS
|
|
||||||
# Configure server to listen on both $https_port and $port
|
|
||||||
# This overides some of the default settings above
|
|
||||||
listeners:
|
|
||||||
- port: $https_port
|
|
||||||
type: http
|
|
||||||
tls: true
|
|
||||||
resources:
|
|
||||||
- names: [client, federation]
|
|
||||||
|
|
||||||
- port: $port
|
|
||||||
tls: false
|
|
||||||
bind_addresses: ['::1', '127.0.0.1']
|
|
||||||
type: http
|
|
||||||
x_forwarded: true
|
|
||||||
resources:
|
|
||||||
- names: [client, federation]
|
|
||||||
compress: false
|
|
||||||
PORTLISTENERS
|
|
||||||
)
|
|
||||||
echo "${listeners}" >> $DIR/etc/$port.config
|
|
||||||
|
|
||||||
# Disable tls for the servers
|
|
||||||
printf '\n\n# Disable tls on the servers.' >> $DIR/etc/$port.config
|
|
||||||
echo '# DO NOT USE IN PRODUCTION' >> $DIR/etc/$port.config
|
|
||||||
echo 'use_insecure_ssl_client_just_for_testing_do_not_use: true' >> $DIR/etc/$port.config
|
|
||||||
echo 'federation_verify_certificates: false' >> $DIR/etc/$port.config
|
|
||||||
|
|
||||||
# Set tls paths
|
|
||||||
echo "tls_certificate_path: \"$DIR/etc/localhost:$https_port.tls.crt\"" >> $DIR/etc/$port.config
|
|
||||||
echo "tls_private_key_path: \"$DIR/etc/localhost:$https_port.tls.key\"" >> $DIR/etc/$port.config
|
|
||||||
|
|
||||||
# Generate tls keys
|
# Generate tls keys
|
||||||
openssl req -x509 -newkey rsa:4096 -keyout $DIR/etc/localhost\:$https_port.tls.key -out $DIR/etc/localhost\:$https_port.tls.crt -days 365 -nodes -subj "/O=matrix"
|
openssl req -x509 -newkey rsa:4096 -keyout "$DIR/etc/localhost:$https_port.tls.key" -out "$DIR/etc/localhost:$https_port.tls.crt" -days 365 -nodes -subj "/O=matrix"
|
||||||
|
|
||||||
# Ignore keys from the trusted keys server
|
# Regenerate configuration
|
||||||
echo '# Ignore keys from the trusted keys server' >> $DIR/etc/$port.config
|
{
|
||||||
echo 'trusted_key_servers:' >> $DIR/etc/$port.config
|
printf '\n\n# Customisation made by demo/start.sh\n'
|
||||||
echo ' - server_name: "matrix.org"' >> $DIR/etc/$port.config
|
echo "public_baseurl: http://localhost:$port/"
|
||||||
echo ' accept_keys_insecurely: true' >> $DIR/etc/$port.config
|
echo 'enable_registration: true'
|
||||||
|
|
||||||
# Reduce the blacklist
|
# Warning, this heredoc depends on the interaction of tabs and spaces.
|
||||||
blacklist=$(cat <<-BLACK
|
# Please don't accidentaly bork me with your fancy settings.
|
||||||
# Set the blacklist so that it doesn't include 127.0.0.1, ::1
|
listeners=$(cat <<-PORTLISTENERS
|
||||||
federation_ip_range_blacklist:
|
# Configure server to listen on both $https_port and $port
|
||||||
- '10.0.0.0/8'
|
# This overides some of the default settings above
|
||||||
- '172.16.0.0/12'
|
listeners:
|
||||||
- '192.168.0.0/16'
|
- port: $https_port
|
||||||
- '100.64.0.0/10'
|
type: http
|
||||||
- '169.254.0.0/16'
|
tls: true
|
||||||
- 'fe80::/64'
|
resources:
|
||||||
- 'fc00::/7'
|
- names: [client, federation]
|
||||||
BLACK
|
|
||||||
)
|
- port: $port
|
||||||
echo "${blacklist}" >> $DIR/etc/$port.config
|
tls: false
|
||||||
|
bind_addresses: ['::1', '127.0.0.1']
|
||||||
|
type: http
|
||||||
|
x_forwarded: true
|
||||||
|
resources:
|
||||||
|
- names: [client, federation]
|
||||||
|
compress: false
|
||||||
|
PORTLISTENERS
|
||||||
|
)
|
||||||
|
|
||||||
|
echo "${listeners}"
|
||||||
|
|
||||||
|
# Disable tls for the servers
|
||||||
|
printf '\n\n# Disable tls on the servers.'
|
||||||
|
echo '# DO NOT USE IN PRODUCTION'
|
||||||
|
echo 'use_insecure_ssl_client_just_for_testing_do_not_use: true'
|
||||||
|
echo 'federation_verify_certificates: false'
|
||||||
|
|
||||||
|
# Set tls paths
|
||||||
|
echo "tls_certificate_path: \"$DIR/etc/localhost:$https_port.tls.crt\""
|
||||||
|
echo "tls_private_key_path: \"$DIR/etc/localhost:$https_port.tls.key\""
|
||||||
|
|
||||||
|
# Ignore keys from the trusted keys server
|
||||||
|
echo '# Ignore keys from the trusted keys server'
|
||||||
|
echo 'trusted_key_servers:'
|
||||||
|
echo ' - server_name: "matrix.org"'
|
||||||
|
echo ' accept_keys_insecurely: true'
|
||||||
|
|
||||||
|
# Reduce the blacklist
|
||||||
|
blacklist=$(cat <<-BLACK
|
||||||
|
# Set the blacklist so that it doesn't include 127.0.0.1, ::1
|
||||||
|
federation_ip_range_blacklist:
|
||||||
|
- '10.0.0.0/8'
|
||||||
|
- '172.16.0.0/12'
|
||||||
|
- '192.168.0.0/16'
|
||||||
|
- '100.64.0.0/10'
|
||||||
|
- '169.254.0.0/16'
|
||||||
|
- 'fe80::/64'
|
||||||
|
- 'fc00::/7'
|
||||||
|
BLACK
|
||||||
|
)
|
||||||
|
|
||||||
|
echo "${blacklist}"
|
||||||
|
} >> "$DIR/etc/$port.config"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check script parameters
|
# Check script parameters
|
||||||
if [ $# -eq 1 ]; then
|
if [ $# -eq 1 ]; then
|
||||||
if [ $1 = "--no-rate-limit" ]; then
|
if [ "$1" = "--no-rate-limit" ]; then
|
||||||
|
|
||||||
# Disable any rate limiting
|
# Disable any rate limiting
|
||||||
ratelimiting=$(cat <<-RC
|
ratelimiting=$(cat <<-RC
|
||||||
@@ -137,22 +141,22 @@ for port in 8080 8081 8082; do
|
|||||||
burst_count: 1000
|
burst_count: 1000
|
||||||
RC
|
RC
|
||||||
)
|
)
|
||||||
echo "${ratelimiting}" >> $DIR/etc/$port.config
|
echo "${ratelimiting}" >> "$DIR/etc/$port.config"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! grep -F "full_twisted_stacktraces" -q $DIR/etc/$port.config; then
|
if ! grep -F "full_twisted_stacktraces" -q "$DIR/etc/$port.config"; then
|
||||||
echo "full_twisted_stacktraces: true" >> $DIR/etc/$port.config
|
echo "full_twisted_stacktraces: true" >> "$DIR/etc/$port.config"
|
||||||
fi
|
fi
|
||||||
if ! grep -F "report_stats" -q $DIR/etc/$port.config ; then
|
if ! grep -F "report_stats" -q "$DIR/etc/$port.config" ; then
|
||||||
echo "report_stats: false" >> $DIR/etc/$port.config
|
echo "report_stats: false" >> "$DIR/etc/$port.config"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
python3 -m synapse.app.homeserver \
|
python3 -m synapse.app.homeserver \
|
||||||
--config-path "$DIR/etc/$port.config" \
|
--config-path "$DIR/etc/$port.config" \
|
||||||
-D \
|
-D \
|
||||||
|
|
||||||
popd
|
popd || exit
|
||||||
done
|
done
|
||||||
|
|
||||||
cd "$CWD"
|
cd "$CWD" || exit
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ for pid_file in $FILES; do
|
|||||||
pid=$(cat "$pid_file")
|
pid=$(cat "$pid_file")
|
||||||
if [[ $pid ]]; then
|
if [[ $pid ]]; then
|
||||||
echo "Killing $pid_file with $pid"
|
echo "Killing $pid_file with $pid"
|
||||||
kill $pid
|
kill "$pid"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
@@ -47,8 +47,9 @@ RUN apt-get update -qq -o Acquire::Languages=none \
|
|||||||
&& cd /dh-virtualenv \
|
&& cd /dh-virtualenv \
|
||||||
&& env DEBIAN_FRONTEND=noninteractive mk-build-deps -ri -t "apt-get -y --no-install-recommends"
|
&& env DEBIAN_FRONTEND=noninteractive mk-build-deps -ri -t "apt-get -y --no-install-recommends"
|
||||||
|
|
||||||
# build it
|
# Build it. Note that building the docs doesn't work due to differences in
|
||||||
RUN cd /dh-virtualenv && dpkg-buildpackage -us -uc -b
|
# Sphinx APIs across versions/distros.
|
||||||
|
RUN cd /dh-virtualenv && DEB_BUILD_OPTIONS=nodoc dpkg-buildpackage -us -uc -b
|
||||||
|
|
||||||
###
|
###
|
||||||
### Stage 1
|
### Stage 1
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Use the Sytest image that comes with a lot of the build dependencies
|
# Use the Sytest image that comes with a lot of the build dependencies
|
||||||
# pre-installed
|
# pre-installed
|
||||||
FROM matrixdotorg/sytest:latest
|
FROM matrixdotorg/sytest:bionic
|
||||||
|
|
||||||
# The Sytest image doesn't come with python, so install that
|
# The Sytest image doesn't come with python, so install that
|
||||||
RUN apt-get update && apt-get -qq install -y python3 python3-dev python3-pip
|
RUN apt-get update && apt-get -qq install -y python3 python3-dev python3-pip
|
||||||
@@ -8,5 +8,23 @@ RUN apt-get update && apt-get -qq install -y python3 python3-dev python3-pip
|
|||||||
# We need tox to run the tests in run_pg_tests.sh
|
# We need tox to run the tests in run_pg_tests.sh
|
||||||
RUN python3 -m pip install tox
|
RUN python3 -m pip install tox
|
||||||
|
|
||||||
ADD run_pg_tests.sh /pg_tests.sh
|
# Initialise the db
|
||||||
ENTRYPOINT /pg_tests.sh
|
RUN su -c '/usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/data -E "UTF-8" --lc-collate="C.UTF-8" --lc-ctype="C.UTF-8" --username=postgres' postgres
|
||||||
|
|
||||||
|
# Add a user with our UID and GID so that files get created on the host owned
|
||||||
|
# by us, not root.
|
||||||
|
ARG UID
|
||||||
|
ARG GID
|
||||||
|
RUN groupadd --gid $GID user
|
||||||
|
RUN useradd --uid $UID --gid $GID --groups sudo --no-create-home user
|
||||||
|
|
||||||
|
# Ensure we can start postgres by sudo-ing as the postgres user.
|
||||||
|
RUN apt-get update && apt-get -qq install -y sudo
|
||||||
|
RUN echo "user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
||||||
|
|
||||||
|
ADD run_pg_tests.sh /run_pg_tests.sh
|
||||||
|
# Use the "exec form" of ENTRYPOINT (https://docs.docker.com/engine/reference/builder/#entrypoint)
|
||||||
|
# so that we can `docker run` this container and pass arguments to pg_tests.sh
|
||||||
|
ENTRYPOINT ["/run_pg_tests.sh"]
|
||||||
|
|
||||||
|
USER user
|
||||||
|
|||||||
@@ -65,7 +65,8 @@ The following environment variables are supported in `generate` mode:
|
|||||||
* `SYNAPSE_DATA_DIR`: where the generated config will put persistent data
|
* `SYNAPSE_DATA_DIR`: where the generated config will put persistent data
|
||||||
such as the database and media store. Defaults to `/data`.
|
such as the database and media store. Defaults to `/data`.
|
||||||
* `UID`, `GID`: the user id and group id to use for creating the data
|
* `UID`, `GID`: the user id and group id to use for creating the data
|
||||||
directories. Defaults to `991`, `991`.
|
directories. If unset, and no user is set via `docker run --user`, defaults
|
||||||
|
to `991`, `991`.
|
||||||
|
|
||||||
## Running synapse
|
## Running synapse
|
||||||
|
|
||||||
@@ -97,7 +98,9 @@ The following environment variables are supported in `run` mode:
|
|||||||
`<SYNAPSE_CONFIG_DIR>/homeserver.yaml`.
|
`<SYNAPSE_CONFIG_DIR>/homeserver.yaml`.
|
||||||
* `SYNAPSE_WORKER`: module to execute, used when running synapse with workers.
|
* `SYNAPSE_WORKER`: module to execute, used when running synapse with workers.
|
||||||
Defaults to `synapse.app.homeserver`, which is suitable for non-worker mode.
|
Defaults to `synapse.app.homeserver`, which is suitable for non-worker mode.
|
||||||
* `UID`, `GID`: the user and group id to run Synapse as. Defaults to `991`, `991`.
|
* `UID`, `GID`: the user and group id to run Synapse as. If unset, and no user
|
||||||
|
is set via `docker run --user`, defaults to `991`, `991`. Note that this user
|
||||||
|
must have permission to read the config files, and write to the data directories.
|
||||||
* `TZ`: the [timezone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) the container will run with. Defaults to `UTC`.
|
* `TZ`: the [timezone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) the container will run with. Defaults to `UTC`.
|
||||||
|
|
||||||
For more complex setups (e.g. for workers) you can also pass your args directly to synapse using `run` mode. For example like this:
|
For more complex setups (e.g. for workers) you can also pass your args directly to synapse using `run` mode. For example like this:
|
||||||
@@ -186,7 +189,7 @@ point to another Dockerfile.
|
|||||||
## Disabling the healthcheck
|
## Disabling the healthcheck
|
||||||
|
|
||||||
If you are using a non-standard port or tls inside docker you can disable the healthcheck
|
If you are using a non-standard port or tls inside docker you can disable the healthcheck
|
||||||
whilst running the above `docker run` commands.
|
whilst running the above `docker run` commands.
|
||||||
|
|
||||||
```
|
```
|
||||||
--no-healthcheck
|
--no-healthcheck
|
||||||
@@ -212,7 +215,7 @@ If you wish to point the healthcheck at a different port with docker command, ad
|
|||||||
## Setting the healthcheck in docker-compose file
|
## Setting the healthcheck in docker-compose file
|
||||||
|
|
||||||
You can add the following to set a custom healthcheck in a docker compose file.
|
You can add the following to set a custom healthcheck in a docker compose file.
|
||||||
You will need docker-compose version >2.1 for this to work.
|
You will need docker-compose version >2.1 for this to work.
|
||||||
|
|
||||||
```
|
```
|
||||||
healthcheck:
|
healthcheck:
|
||||||
@@ -226,4 +229,5 @@ healthcheck:
|
|||||||
## Using jemalloc
|
## Using jemalloc
|
||||||
|
|
||||||
Jemalloc is embedded in the image and will be used instead of the default allocator.
|
Jemalloc is embedded in the image and will be used instead of the default allocator.
|
||||||
You can read about jemalloc by reading the Synapse [README](../README.rst).
|
You can read about jemalloc by reading the Synapse
|
||||||
|
[README](https://github.com/matrix-org/synapse/blob/HEAD/README.rst#help-synapse-is-slow-and-eats-all-my-ram-cpu).
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
# Get the codename from distro env
|
# Get the codename from distro env
|
||||||
DIST=`cut -d ':' -f2 <<< $distro`
|
DIST=$(cut -d ':' -f2 <<< "${distro:?}")
|
||||||
|
|
||||||
# we get a read-only copy of the source: make a writeable copy
|
# we get a read-only copy of the source: make a writeable copy
|
||||||
cp -aT /synapse/source /synapse/build
|
cp -aT /synapse/source /synapse/build
|
||||||
@@ -17,7 +17,7 @@ cd /synapse/build
|
|||||||
# Section to determine which "component" it should go into (see
|
# Section to determine which "component" it should go into (see
|
||||||
# https://manpages.debian.org/stretch/reprepro/reprepro.1.en.html#GUESSING)
|
# https://manpages.debian.org/stretch/reprepro/reprepro.1.en.html#GUESSING)
|
||||||
|
|
||||||
DEB_VERSION=`dpkg-parsechangelog -SVersion`
|
DEB_VERSION=$(dpkg-parsechangelog -SVersion)
|
||||||
case $DEB_VERSION in
|
case $DEB_VERSION in
|
||||||
*~rc*|*~a*|*~b*|*~c*)
|
*~rc*|*~a*|*~b*|*~c*)
|
||||||
sed -ie '/^Section:/c\Section: prerelease' debian/control
|
sed -ie '/^Section:/c\Section: prerelease' debian/control
|
||||||
|
|||||||
@@ -10,11 +10,10 @@ set -e
|
|||||||
# Set PGUSER so Synapse's tests know what user to connect to the database with
|
# Set PGUSER so Synapse's tests know what user to connect to the database with
|
||||||
export PGUSER=postgres
|
export PGUSER=postgres
|
||||||
|
|
||||||
# Initialise & start the database
|
# Start the database
|
||||||
su -c '/usr/lib/postgresql/9.6/bin/initdb -D /var/lib/postgresql/data -E "UTF-8" --lc-collate="en_US.UTF-8" --lc-ctype="en_US.UTF-8" --username=postgres' postgres
|
sudo -u postgres /usr/lib/postgresql/10/bin/pg_ctl -w -D /var/lib/postgresql/data start
|
||||||
su -c '/usr/lib/postgresql/9.6/bin/pg_ctl -w -D /var/lib/postgresql/data start' postgres
|
|
||||||
|
|
||||||
# Run the tests
|
# Run the tests
|
||||||
cd /src
|
cd /src
|
||||||
export TRIAL_FLAGS="-j 4"
|
export TRIAL_FLAGS="-j 4"
|
||||||
tox --workdir=/tmp -e py35-postgres
|
tox --workdir=./.tox-pg-container -e py36-postgres "$@"
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ def generate_config_from_template(config_dir, config_path, environ, ownership):
|
|||||||
]
|
]
|
||||||
|
|
||||||
if ownership is not None:
|
if ownership is not None:
|
||||||
|
log(f"Setting ownership on /data to {ownership}")
|
||||||
subprocess.check_output(["chown", "-R", ownership, "/data"])
|
subprocess.check_output(["chown", "-R", ownership, "/data"])
|
||||||
args = ["gosu", ownership] + args
|
args = ["gosu", ownership] + args
|
||||||
|
|
||||||
@@ -144,12 +145,18 @@ def run_generate_config(environ, ownership):
|
|||||||
config_path = environ.get("SYNAPSE_CONFIG_PATH", config_dir + "/homeserver.yaml")
|
config_path = environ.get("SYNAPSE_CONFIG_PATH", config_dir + "/homeserver.yaml")
|
||||||
data_dir = environ.get("SYNAPSE_DATA_DIR", "/data")
|
data_dir = environ.get("SYNAPSE_DATA_DIR", "/data")
|
||||||
|
|
||||||
|
if ownership is not None:
|
||||||
|
# make sure that synapse has perms to write to the data dir.
|
||||||
|
log(f"Setting ownership on {data_dir} to {ownership}")
|
||||||
|
subprocess.check_output(["chown", ownership, data_dir])
|
||||||
|
|
||||||
# create a suitable log config from our template
|
# create a suitable log config from our template
|
||||||
log_config_file = "%s/%s.log.config" % (config_dir, server_name)
|
log_config_file = "%s/%s.log.config" % (config_dir, server_name)
|
||||||
if not os.path.exists(log_config_file):
|
if not os.path.exists(log_config_file):
|
||||||
log("Creating log config %s" % (log_config_file,))
|
log("Creating log config %s" % (log_config_file,))
|
||||||
convert("/conf/log.config", log_config_file, environ)
|
convert("/conf/log.config", log_config_file, environ)
|
||||||
|
|
||||||
|
# generate the main config file, and a signing key.
|
||||||
args = [
|
args = [
|
||||||
"python",
|
"python",
|
||||||
"-m",
|
"-m",
|
||||||
@@ -168,29 +175,23 @@ def run_generate_config(environ, ownership):
|
|||||||
"--open-private-ports",
|
"--open-private-ports",
|
||||||
]
|
]
|
||||||
# log("running %s" % (args, ))
|
# log("running %s" % (args, ))
|
||||||
|
os.execv("/usr/local/bin/python", args)
|
||||||
if ownership is not None:
|
|
||||||
# make sure that synapse has perms to write to the data dir.
|
|
||||||
subprocess.check_output(["chown", ownership, data_dir])
|
|
||||||
|
|
||||||
args = ["gosu", ownership] + args
|
|
||||||
os.execv("/usr/sbin/gosu", args)
|
|
||||||
else:
|
|
||||||
os.execv("/usr/local/bin/python", args)
|
|
||||||
|
|
||||||
|
|
||||||
def main(args, environ):
|
def main(args, environ):
|
||||||
mode = args[1] if len(args) > 1 else "run"
|
mode = args[1] if len(args) > 1 else "run"
|
||||||
desired_uid = int(environ.get("UID", "991"))
|
|
||||||
desired_gid = int(environ.get("GID", "991"))
|
|
||||||
synapse_worker = environ.get("SYNAPSE_WORKER", "synapse.app.homeserver")
|
|
||||||
if (desired_uid == os.getuid()) and (desired_gid == os.getgid()):
|
|
||||||
ownership = None
|
|
||||||
else:
|
|
||||||
ownership = "{}:{}".format(desired_uid, desired_gid)
|
|
||||||
|
|
||||||
if ownership is None:
|
# if we were given an explicit user to switch to, do so
|
||||||
log("Will not perform chmod/gosu as UserID already matches request")
|
ownership = None
|
||||||
|
if "UID" in environ:
|
||||||
|
desired_uid = int(environ["UID"])
|
||||||
|
desired_gid = int(environ.get("GID", "991"))
|
||||||
|
ownership = f"{desired_uid}:{desired_gid}"
|
||||||
|
elif os.getuid() == 0:
|
||||||
|
# otherwise, if we are running as root, use user 991
|
||||||
|
ownership = "991:991"
|
||||||
|
|
||||||
|
synapse_worker = environ.get("SYNAPSE_WORKER", "synapse.app.homeserver")
|
||||||
|
|
||||||
# In generate mode, generate a configuration and missing keys, then exit
|
# In generate mode, generate a configuration and missing keys, then exit
|
||||||
if mode == "generate":
|
if mode == "generate":
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ in `homeserver.yaml`, to the list of authorized domains. If you have not set
|
|||||||
1. Agree to the terms of service and submit.
|
1. Agree to the terms of service and submit.
|
||||||
1. Copy your site key and secret key and add them to your `homeserver.yaml`
|
1. Copy your site key and secret key and add them to your `homeserver.yaml`
|
||||||
configuration file
|
configuration file
|
||||||
```
|
```yaml
|
||||||
recaptcha_public_key: YOUR_SITE_KEY
|
recaptcha_public_key: YOUR_SITE_KEY
|
||||||
recaptcha_private_key: YOUR_SECRET_KEY
|
recaptcha_private_key: YOUR_SECRET_KEY
|
||||||
```
|
```
|
||||||
1. Enable the CAPTCHA for new registrations
|
1. Enable the CAPTCHA for new registrations
|
||||||
```
|
```yaml
|
||||||
enable_registration_captcha: true
|
enable_registration_captcha: true
|
||||||
```
|
```
|
||||||
1. Go to the settings page for the CAPTCHA you just created
|
1. Go to the settings page for the CAPTCHA you just created
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
## Historical Note
|
## Historical Note
|
||||||
This document was originally written to guide server admins through the upgrade
|
This document was originally written to guide server admins through the upgrade
|
||||||
path towards Synapse 1.0. Specifically,
|
path towards Synapse 1.0. Specifically,
|
||||||
[MSC1711](https://github.com/matrix-org/matrix-doc/blob/master/proposals/1711-x509-for-federation.md)
|
[MSC1711](https://github.com/matrix-org/matrix-doc/blob/main/proposals/1711-x509-for-federation.md)
|
||||||
required that all servers present valid TLS certificates on their federation
|
required that all servers present valid TLS certificates on their federation
|
||||||
API. Admins were encouraged to achieve compliance from version 0.99.0 (released
|
API. Admins were encouraged to achieve compliance from version 0.99.0 (released
|
||||||
in February 2019) ahead of version 1.0 (released June 2019) enforcing the
|
in February 2019) ahead of version 1.0 (released June 2019) enforcing the
|
||||||
@@ -282,7 +282,7 @@ coffin of the Perspectives project (which was already pretty dead). So, the
|
|||||||
Spec Core Team decided that a better approach would be to mandate valid TLS
|
Spec Core Team decided that a better approach would be to mandate valid TLS
|
||||||
certificates for federation alongside the rest of the Web. More details can be
|
certificates for federation alongside the rest of the Web. More details can be
|
||||||
found in
|
found in
|
||||||
[MSC1711](https://github.com/matrix-org/matrix-doc/blob/master/proposals/1711-x509-for-federation.md#background-the-failure-of-the-perspectives-approach).
|
[MSC1711](https://github.com/matrix-org/matrix-doc/blob/main/proposals/1711-x509-for-federation.md#background-the-failure-of-the-perspectives-approach).
|
||||||
|
|
||||||
This results in a breaking change, which is disruptive, but absolutely critical
|
This results in a breaking change, which is disruptive, but absolutely critical
|
||||||
for the security model. However, the existence of Let's Encrypt as a trivial
|
for the security model. However, the existence of Let's Encrypt as a trivial
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ Please update any links to point to the new website instead.
|
|||||||
## About
|
## About
|
||||||
|
|
||||||
This directory currently holds a series of markdown files documenting how to install, use
|
This directory currently holds a series of markdown files documenting how to install, use
|
||||||
and develop Synapse, the reference Matrix homeserver. The documentation is readable directly
|
and develop Synapse. The documentation is readable directly from this repository, but it is
|
||||||
from this repository, but it is recommended to instead browse through the
|
recommended to instead browse through the [website](https://matrix-org.github.io/synapse) for
|
||||||
[website](https://matrix-org.github.io/synapse) for easier discoverability.
|
easier discoverability.
|
||||||
|
|
||||||
## Adding to the documentation
|
## Adding to the documentation
|
||||||
|
|
||||||
|
|||||||
@@ -23,10 +23,10 @@
|
|||||||
- [Structured Logging](structured_logging.md)
|
- [Structured Logging](structured_logging.md)
|
||||||
- [Templates](templates.md)
|
- [Templates](templates.md)
|
||||||
- [User Authentication](usage/configuration/user_authentication/README.md)
|
- [User Authentication](usage/configuration/user_authentication/README.md)
|
||||||
- [Single-Sign On]()
|
- [Single-Sign On](usage/configuration/user_authentication/single_sign_on/README.md)
|
||||||
- [OpenID Connect](openid.md)
|
- [OpenID Connect](openid.md)
|
||||||
- [SAML]()
|
- [SAML](usage/configuration/user_authentication/single_sign_on/saml.md)
|
||||||
- [CAS]()
|
- [CAS](usage/configuration/user_authentication/single_sign_on/cas.md)
|
||||||
- [SSO Mapping Providers](sso_mapping_providers.md)
|
- [SSO Mapping Providers](sso_mapping_providers.md)
|
||||||
- [Password Auth Providers](password_auth_providers.md)
|
- [Password Auth Providers](password_auth_providers.md)
|
||||||
- [JSON Web Tokens](jwt.md)
|
- [JSON Web Tokens](jwt.md)
|
||||||
@@ -43,6 +43,7 @@
|
|||||||
- [Third-party rules callbacks](modules/third_party_rules_callbacks.md)
|
- [Third-party rules callbacks](modules/third_party_rules_callbacks.md)
|
||||||
- [Presence router callbacks](modules/presence_router_callbacks.md)
|
- [Presence router callbacks](modules/presence_router_callbacks.md)
|
||||||
- [Account validity callbacks](modules/account_validity_callbacks.md)
|
- [Account validity callbacks](modules/account_validity_callbacks.md)
|
||||||
|
- [Password auth provider callbacks](modules/password_auth_provider_callbacks.md)
|
||||||
- [Porting a legacy module to the new interface](modules/porting_legacy_module.md)
|
- [Porting a legacy module to the new interface](modules/porting_legacy_module.md)
|
||||||
- [Workers](workers.md)
|
- [Workers](workers.md)
|
||||||
- [Using `synctl` with Workers](synctl_workers.md)
|
- [Using `synctl` with Workers](synctl_workers.md)
|
||||||
@@ -50,6 +51,7 @@
|
|||||||
- [Administration](usage/administration/README.md)
|
- [Administration](usage/administration/README.md)
|
||||||
- [Admin API](usage/administration/admin_api/README.md)
|
- [Admin API](usage/administration/admin_api/README.md)
|
||||||
- [Account Validity](admin_api/account_validity.md)
|
- [Account Validity](admin_api/account_validity.md)
|
||||||
|
- [Background Updates](usage/administration/admin_api/background_updates.md)
|
||||||
- [Delete Group](admin_api/delete_group.md)
|
- [Delete Group](admin_api/delete_group.md)
|
||||||
- [Event Reports](admin_api/event_reports.md)
|
- [Event Reports](admin_api/event_reports.md)
|
||||||
- [Media](admin_api/media_admin_api.md)
|
- [Media](admin_api/media_admin_api.md)
|
||||||
@@ -74,6 +76,7 @@
|
|||||||
- [Testing]()
|
- [Testing]()
|
||||||
- [OpenTracing](opentracing.md)
|
- [OpenTracing](opentracing.md)
|
||||||
- [Database Schemas](development/database_schema.md)
|
- [Database Schemas](development/database_schema.md)
|
||||||
|
- [Experimental features](development/experimental_features.md)
|
||||||
- [Synapse Architecture]()
|
- [Synapse Architecture]()
|
||||||
- [Log Contexts](log_contexts.md)
|
- [Log Contexts](log_contexts.md)
|
||||||
- [Replication](replication.md)
|
- [Replication](replication.md)
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ server admin: see [Admin API](../usage/administration/admin_api).
|
|||||||
|
|
||||||
It returns a JSON body like the following:
|
It returns a JSON body like the following:
|
||||||
|
|
||||||
```jsonc
|
```json
|
||||||
{
|
{
|
||||||
"event_id": "$bNUFCwGzWca1meCGkjp-zwslF-GfVcXukvRLI1_FaVY",
|
"event_id": "$bNUFCwGzWca1meCGkjp-zwslF-GfVcXukvRLI1_FaVY",
|
||||||
"event_json": {
|
"event_json": {
|
||||||
@@ -132,7 +132,7 @@ It returns a JSON body like the following:
|
|||||||
},
|
},
|
||||||
"type": "m.room.message",
|
"type": "m.room.message",
|
||||||
"unsigned": {
|
"unsigned": {
|
||||||
"age_ts": 1592291711430,
|
"age_ts": 1592291711430
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"id": <report_id>,
|
"id": <report_id>,
|
||||||
|
|||||||
@@ -257,9 +257,9 @@ POST /_synapse/admin/v1/media/<server_name>/delete?before_ts=<before_ts>
|
|||||||
URL Parameters
|
URL Parameters
|
||||||
|
|
||||||
* `server_name`: string - The name of your local server (e.g `matrix.org`).
|
* `server_name`: string - The name of your local server (e.g `matrix.org`).
|
||||||
* `before_ts`: string representing a positive integer - Unix timestamp in ms.
|
* `before_ts`: string representing a positive integer - Unix timestamp in milliseconds.
|
||||||
Files that were last used before this timestamp will be deleted. It is the timestamp of
|
Files that were last used before this timestamp will be deleted. It is the timestamp of
|
||||||
last access and not the timestamp creation.
|
last access, not the timestamp when the file was created.
|
||||||
* `size_gt`: Optional - string representing a positive integer - Size of the media in bytes.
|
* `size_gt`: Optional - string representing a positive integer - Size of the media in bytes.
|
||||||
Files that are larger will be deleted. Defaults to `0`.
|
Files that are larger will be deleted. Defaults to `0`.
|
||||||
* `keep_profiles`: Optional - string representing a boolean - Switch to also delete files
|
* `keep_profiles`: Optional - string representing a boolean - Switch to also delete files
|
||||||
@@ -302,7 +302,7 @@ POST /_synapse/admin/v1/purge_media_cache?before_ts=<unix_timestamp_in_ms>
|
|||||||
|
|
||||||
URL Parameters
|
URL Parameters
|
||||||
|
|
||||||
* `unix_timestamp_in_ms`: string representing a positive integer - Unix timestamp in ms.
|
* `unix_timestamp_in_ms`: string representing a positive integer - Unix timestamp in milliseconds.
|
||||||
All cached media that was last accessed before this timestamp will be removed.
|
All cached media that was last accessed before this timestamp will be removed.
|
||||||
|
|
||||||
Response:
|
Response:
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ Room state data (such as joins, leaves, topic) is always preserved.
|
|||||||
|
|
||||||
To delete local message events as well, set `delete_local_events` in the body:
|
To delete local message events as well, set `delete_local_events` in the body:
|
||||||
|
|
||||||
```
|
```json
|
||||||
{
|
{
|
||||||
"delete_local_events": true
|
"delete_local_events": true
|
||||||
}
|
}
|
||||||
@@ -70,6 +70,8 @@ This API returns a JSON body like the following:
|
|||||||
|
|
||||||
The status will be one of `active`, `complete`, or `failed`.
|
The status will be one of `active`, `complete`, or `failed`.
|
||||||
|
|
||||||
|
If `status` is `failed` there will be a string `error` with the error message.
|
||||||
|
|
||||||
## Reclaim disk space (Postgres)
|
## Reclaim disk space (Postgres)
|
||||||
|
|
||||||
To reclaim the disk space and return it to the operating system, you need to run
|
To reclaim the disk space and return it to the operating system, you need to run
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ server admin: see [Admin API](../usage/administration/admin_api).
|
|||||||
|
|
||||||
Response:
|
Response:
|
||||||
|
|
||||||
```
|
```json
|
||||||
{
|
{
|
||||||
"room_id": "!636q39766251:server.com"
|
"room_id": "!636q39766251:server.com"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,9 @@
|
|||||||
- [Room Members API](#room-members-api)
|
- [Room Members API](#room-members-api)
|
||||||
- [Room State API](#room-state-api)
|
- [Room State API](#room-state-api)
|
||||||
- [Delete Room API](#delete-room-api)
|
- [Delete Room API](#delete-room-api)
|
||||||
|
* [Version 1 (old version)](#version-1-old-version)
|
||||||
|
* [Version 2 (new version)](#version-2-new-version)
|
||||||
|
* [Status of deleting rooms](#status-of-deleting-rooms)
|
||||||
* [Undoing room shutdowns](#undoing-room-shutdowns)
|
* [Undoing room shutdowns](#undoing-room-shutdowns)
|
||||||
- [Make Room Admin API](#make-room-admin-api)
|
- [Make Room Admin API](#make-room-admin-api)
|
||||||
- [Forward Extremities Admin API](#forward-extremities-admin-api)
|
- [Forward Extremities Admin API](#forward-extremities-admin-api)
|
||||||
@@ -38,9 +41,14 @@ The following query parameters are available:
|
|||||||
- `history_visibility` - Rooms are ordered alphabetically by visibility of history of the room.
|
- `history_visibility` - Rooms are ordered alphabetically by visibility of history of the room.
|
||||||
- `state_events` - Rooms are ordered by number of state events. Largest to smallest.
|
- `state_events` - Rooms are ordered by number of state events. Largest to smallest.
|
||||||
* `dir` - Direction of room order. Either `f` for forwards or `b` for backwards. Setting
|
* `dir` - Direction of room order. Either `f` for forwards or `b` for backwards. Setting
|
||||||
this value to `b` will reverse the above sort order. Defaults to `f`.
|
this value to `b` will reverse the above sort order. Defaults to `f`.
|
||||||
* `search_term` - Filter rooms by their room name. Search term can be contained in any
|
* `search_term` - Filter rooms by their room name, canonical alias and room id.
|
||||||
part of the room name. Defaults to no filtering.
|
Specifically, rooms are selected if the search term is contained in
|
||||||
|
- the room's name,
|
||||||
|
- the local part of the room's canonical alias, or
|
||||||
|
- the complete (local and server part) room's id (case sensitive).
|
||||||
|
|
||||||
|
Defaults to no filtering.
|
||||||
|
|
||||||
**Response**
|
**Response**
|
||||||
|
|
||||||
@@ -87,7 +95,7 @@ GET /_synapse/admin/v1/rooms
|
|||||||
|
|
||||||
A response body like the following is returned:
|
A response body like the following is returned:
|
||||||
|
|
||||||
```jsonc
|
```json
|
||||||
{
|
{
|
||||||
"rooms": [
|
"rooms": [
|
||||||
{
|
{
|
||||||
@@ -170,7 +178,7 @@ GET /_synapse/admin/v1/rooms?order_by=size
|
|||||||
|
|
||||||
A response body like the following is returned:
|
A response body like the following is returned:
|
||||||
|
|
||||||
```jsonc
|
```json
|
||||||
{
|
{
|
||||||
"rooms": [
|
"rooms": [
|
||||||
{
|
{
|
||||||
@@ -208,7 +216,7 @@ A response body like the following is returned:
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"offset": 0,
|
"offset": 0,
|
||||||
"total_rooms": 150
|
"total_rooms": 150,
|
||||||
"next_token": 100
|
"next_token": 100
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -224,7 +232,7 @@ GET /_synapse/admin/v1/rooms?order_by=size&from=100
|
|||||||
|
|
||||||
A response body like the following is returned:
|
A response body like the following is returned:
|
||||||
|
|
||||||
```jsonc
|
```json
|
||||||
{
|
{
|
||||||
"rooms": [
|
"rooms": [
|
||||||
{
|
{
|
||||||
@@ -380,7 +388,7 @@ A response body like the following is returned:
|
|||||||
|
|
||||||
# Delete Room API
|
# Delete Room API
|
||||||
|
|
||||||
The Delete Room admin API allows server admins to remove rooms from server
|
The Delete Room admin API allows server admins to remove rooms from the server
|
||||||
and block these rooms.
|
and block these rooms.
|
||||||
|
|
||||||
Shuts down a room. Moves all local users and room aliases automatically to a
|
Shuts down a room. Moves all local users and room aliases automatically to a
|
||||||
@@ -391,18 +399,33 @@ The new room will be created with the user specified by the `new_room_user_id` p
|
|||||||
as room administrator and will contain a message explaining what happened. Users invited
|
as room administrator and will contain a message explaining what happened. Users invited
|
||||||
to the new room will have power level `-10` by default, and thus be unable to speak.
|
to the new room will have power level `-10` by default, and thus be unable to speak.
|
||||||
|
|
||||||
If `block` is `True` it prevents new joins to the old room.
|
If `block` is `true`, users will be prevented from joining the old room.
|
||||||
|
This option can in [Version 1](#version-1-old-version) also be used to pre-emptively
|
||||||
|
block a room, even if it's unknown to this homeserver. In this case, the room will be
|
||||||
|
blocked, and no further action will be taken. If `block` is `false`, attempting to
|
||||||
|
delete an unknown room is invalid and will be rejected as a bad request.
|
||||||
|
|
||||||
This API will remove all trace of the old room from your database after removing
|
This API will remove all trace of the old room from your database after removing
|
||||||
all local users. If `purge` is `true` (the default), all traces of the old room will
|
all local users. If `purge` is `true` (the default), all traces of the old room will
|
||||||
be removed from your database after removing all local users. If you do not want
|
be removed from your database after removing all local users. If you do not want
|
||||||
this to happen, set `purge` to `false`.
|
this to happen, set `purge` to `false`.
|
||||||
Depending on the amount of history being purged a call to the API may take
|
Depending on the amount of history being purged, a call to the API may take
|
||||||
several minutes or longer.
|
several minutes or longer.
|
||||||
|
|
||||||
The local server will only have the power to move local user and room aliases to
|
The local server will only have the power to move local user and room aliases to
|
||||||
the new room. Users on other servers will be unaffected.
|
the new room. Users on other servers will be unaffected.
|
||||||
|
|
||||||
|
To use it, you will need to authenticate by providing an ``access_token`` for a
|
||||||
|
server admin: see [Admin API](../usage/administration/admin_api).
|
||||||
|
|
||||||
|
## Version 1 (old version)
|
||||||
|
|
||||||
|
This version works synchronously. That means you only get the response once the server has
|
||||||
|
finished the action, which may take a long time. If you request the same action
|
||||||
|
a second time, and the server has not finished the first one, the second request will block.
|
||||||
|
This is fixed in version 2 of this API. The parameters are the same in both APIs.
|
||||||
|
This API will become deprecated in the future.
|
||||||
|
|
||||||
The API is:
|
The API is:
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -421,9 +444,6 @@ with a body of:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
To use it, you will need to authenticate by providing an ``access_token`` for a
|
|
||||||
server admin: see [Admin API](../usage/administration/admin_api).
|
|
||||||
|
|
||||||
A response body like the following is returned:
|
A response body like the following is returned:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
@@ -440,6 +460,44 @@ A response body like the following is returned:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The parameters and response values have the same format as
|
||||||
|
[version 2](#version-2-new-version) of the API.
|
||||||
|
|
||||||
|
## Version 2 (new version)
|
||||||
|
|
||||||
|
**Note**: This API is new, experimental and "subject to change".
|
||||||
|
|
||||||
|
This version works asynchronously, meaning you get the response from server immediately
|
||||||
|
while the server works on that task in background. You can then request the status of the action
|
||||||
|
to check if it has completed.
|
||||||
|
|
||||||
|
The API is:
|
||||||
|
|
||||||
|
```
|
||||||
|
DELETE /_synapse/admin/v2/rooms/<room_id>
|
||||||
|
```
|
||||||
|
|
||||||
|
with a body of:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"new_room_user_id": "@someuser:example.com",
|
||||||
|
"room_name": "Content Violation Notification",
|
||||||
|
"message": "Bad Room has been shutdown due to content violations on this server. Please review our Terms of Service.",
|
||||||
|
"block": true,
|
||||||
|
"purge": true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The API starts the shut down and purge running, and returns immediately with a JSON body with
|
||||||
|
a purge id:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"delete_id": "<opaque id>"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
**Parameters**
|
**Parameters**
|
||||||
|
|
||||||
The following parameters should be set in the URL:
|
The following parameters should be set in the URL:
|
||||||
@@ -459,8 +517,10 @@ The following JSON body parameters are available:
|
|||||||
`new_room_user_id` in the new room. Ideally this will clearly convey why the
|
`new_room_user_id` in the new room. Ideally this will clearly convey why the
|
||||||
original room was shut down. Defaults to `Sharing illegal content on this server
|
original room was shut down. Defaults to `Sharing illegal content on this server
|
||||||
is not permitted and rooms in violation will be blocked.`
|
is not permitted and rooms in violation will be blocked.`
|
||||||
* `block` - Optional. If set to `true`, this room will be added to a blocking list, preventing
|
* `block` - Optional. If set to `true`, this room will be added to a blocking list,
|
||||||
future attempts to join the room. Defaults to `false`.
|
preventing future attempts to join the room. Rooms can be blocked
|
||||||
|
even if they're not yet known to the homeserver (only with
|
||||||
|
[Version 1](#version-1-old-version) of the API). Defaults to `false`.
|
||||||
* `purge` - Optional. If set to `true`, it will remove all traces of the room from your database.
|
* `purge` - Optional. If set to `true`, it will remove all traces of the room from your database.
|
||||||
Defaults to `true`.
|
Defaults to `true`.
|
||||||
* `force_purge` - Optional, and ignored unless `purge` is `true`. If set to `true`, it
|
* `force_purge` - Optional, and ignored unless `purge` is `true`. If set to `true`, it
|
||||||
@@ -470,16 +530,124 @@ The following JSON body parameters are available:
|
|||||||
|
|
||||||
The JSON body must not be empty. The body must be at least `{}`.
|
The JSON body must not be empty. The body must be at least `{}`.
|
||||||
|
|
||||||
**Response**
|
## Status of deleting rooms
|
||||||
|
|
||||||
|
**Note**: This API is new, experimental and "subject to change".
|
||||||
|
|
||||||
|
It is possible to query the status of the background task for deleting rooms.
|
||||||
|
The status can be queried up to 24 hours after completion of the task,
|
||||||
|
or until Synapse is restarted (whichever happens first).
|
||||||
|
|
||||||
|
### Query by `room_id`
|
||||||
|
|
||||||
|
With this API you can get the status of all active deletion tasks, and all those completed in the last 24h,
|
||||||
|
for the given `room_id`.
|
||||||
|
|
||||||
|
The API is:
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /_synapse/admin/v2/rooms/<room_id>/delete_status
|
||||||
|
```
|
||||||
|
|
||||||
|
A response body like the following is returned:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"results": [
|
||||||
|
{
|
||||||
|
"delete_id": "delete_id1",
|
||||||
|
"status": "failed",
|
||||||
|
"error": "error message",
|
||||||
|
"shutdown_room": {
|
||||||
|
"kicked_users": [],
|
||||||
|
"failed_to_kick_users": [],
|
||||||
|
"local_aliases": [],
|
||||||
|
"new_room_id": null
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
"delete_id": "delete_id2",
|
||||||
|
"status": "purging",
|
||||||
|
"shutdown_room": {
|
||||||
|
"kicked_users": [
|
||||||
|
"@foobar:example.com"
|
||||||
|
],
|
||||||
|
"failed_to_kick_users": [],
|
||||||
|
"local_aliases": [
|
||||||
|
"#badroom:example.com",
|
||||||
|
"#evilsaloon:example.com"
|
||||||
|
],
|
||||||
|
"new_room_id": "!newroomid:example.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Parameters**
|
||||||
|
|
||||||
|
The following parameters should be set in the URL:
|
||||||
|
|
||||||
|
* `room_id` - The ID of the room.
|
||||||
|
|
||||||
|
### Query by `delete_id`
|
||||||
|
|
||||||
|
With this API you can get the status of one specific task by `delete_id`.
|
||||||
|
|
||||||
|
The API is:
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /_synapse/admin/v2/rooms/delete_status/<delete_id>
|
||||||
|
```
|
||||||
|
|
||||||
|
A response body like the following is returned:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"status": "purging",
|
||||||
|
"shutdown_room": {
|
||||||
|
"kicked_users": [
|
||||||
|
"@foobar:example.com"
|
||||||
|
],
|
||||||
|
"failed_to_kick_users": [],
|
||||||
|
"local_aliases": [
|
||||||
|
"#badroom:example.com",
|
||||||
|
"#evilsaloon:example.com"
|
||||||
|
],
|
||||||
|
"new_room_id": "!newroomid:example.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Parameters**
|
||||||
|
|
||||||
|
The following parameters should be set in the URL:
|
||||||
|
|
||||||
|
* `delete_id` - The ID for this delete.
|
||||||
|
|
||||||
|
### Response
|
||||||
|
|
||||||
The following fields are returned in the JSON response body:
|
The following fields are returned in the JSON response body:
|
||||||
|
|
||||||
* `kicked_users` - An array of users (`user_id`) that were kicked.
|
- `results` - An array of objects, each containing information about one task.
|
||||||
* `failed_to_kick_users` - An array of users (`user_id`) that that were not kicked.
|
This field is omitted from the result when you query by `delete_id`.
|
||||||
* `local_aliases` - An array of strings representing the local aliases that were migrated from
|
Task objects contain the following fields:
|
||||||
the old room to the new.
|
- `delete_id` - The ID for this purge if you query by `room_id`.
|
||||||
* `new_room_id` - A string representing the room ID of the new room.
|
- `status` - The status will be one of:
|
||||||
|
- `shutting_down` - The process is removing users from the room.
|
||||||
|
- `purging` - The process is purging the room and event data from database.
|
||||||
|
- `complete` - The process has completed successfully.
|
||||||
|
- `failed` - The process is aborted, an error has occurred.
|
||||||
|
- `error` - A string that shows an error message if `status` is `failed`.
|
||||||
|
Otherwise this field is hidden.
|
||||||
|
- `shutdown_room` - An object containing information about the result of shutting down the room.
|
||||||
|
*Note:* The result is shown after removing the room members.
|
||||||
|
The delete process can still be running. Please pay attention to the `status`.
|
||||||
|
- `kicked_users` - An array of users (`user_id`) that were kicked.
|
||||||
|
- `failed_to_kick_users` - An array of users (`user_id`) that that were not kicked.
|
||||||
|
- `local_aliases` - An array of strings representing the local aliases that were
|
||||||
|
migrated from the old room to the new.
|
||||||
|
- `new_room_id` - A string representing the room ID of the new room, or `null` if
|
||||||
|
no such room was created.
|
||||||
|
|
||||||
## Undoing room deletions
|
## Undoing room deletions
|
||||||
|
|
||||||
@@ -520,16 +688,6 @@ With all that being said, if you still want to try and recover the room:
|
|||||||
4. If `new_room_user_id` was given, a 'Content Violation' will have been
|
4. If `new_room_user_id` was given, a 'Content Violation' will have been
|
||||||
created. Consider whether you want to delete that roomm.
|
created. Consider whether you want to delete that roomm.
|
||||||
|
|
||||||
## Deprecated endpoint
|
|
||||||
|
|
||||||
The previous deprecated API will be removed in a future release, it was:
|
|
||||||
|
|
||||||
```
|
|
||||||
POST /_synapse/admin/v1/rooms/<room_id>/delete
|
|
||||||
```
|
|
||||||
|
|
||||||
It behaves the same way than the current endpoint except the path and the method.
|
|
||||||
|
|
||||||
# Make Room Admin API
|
# Make Room Admin API
|
||||||
|
|
||||||
Grants another user the highest power available to a local user who is in the room.
|
Grants another user the highest power available to a local user who is in the room.
|
||||||
|
|||||||
@@ -50,7 +50,8 @@ It returns a JSON body like the following:
|
|||||||
"auth_provider": "<provider2>",
|
"auth_provider": "<provider2>",
|
||||||
"external_id": "<user_id_provider_2>"
|
"external_id": "<user_id_provider_2>"
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"user_type": null
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -97,7 +98,8 @@ with a body of:
|
|||||||
],
|
],
|
||||||
"avatar_url": "<avatar_url>",
|
"avatar_url": "<avatar_url>",
|
||||||
"admin": false,
|
"admin": false,
|
||||||
"deactivated": false
|
"deactivated": false,
|
||||||
|
"user_type": null
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -135,6 +137,9 @@ Body parameters:
|
|||||||
unchanged on existing accounts and set to `false` for new accounts.
|
unchanged on existing accounts and set to `false` for new accounts.
|
||||||
A user cannot be erased by deactivating with this API. For details on
|
A user cannot be erased by deactivating with this API. For details on
|
||||||
deactivating users see [Deactivate Account](#deactivate-account).
|
deactivating users see [Deactivate Account](#deactivate-account).
|
||||||
|
- `user_type` - string or null, optional. If provided, the user type will be
|
||||||
|
adjusted. If `null` given, the user type will be cleared. Other
|
||||||
|
allowed options are: `bot` and `support`.
|
||||||
|
|
||||||
If the user already exists then optional parameters default to the current value.
|
If the user already exists then optional parameters default to the current value.
|
||||||
|
|
||||||
@@ -341,6 +346,7 @@ The following actions are performed when deactivating an user:
|
|||||||
- Remove all 3PIDs from the homeserver
|
- Remove all 3PIDs from the homeserver
|
||||||
- Delete all devices and E2EE keys
|
- Delete all devices and E2EE keys
|
||||||
- Delete all access tokens
|
- Delete all access tokens
|
||||||
|
- Delete all pushers
|
||||||
- Delete the password hash
|
- Delete the password hash
|
||||||
- Removal from all rooms the user is a member of
|
- Removal from all rooms the user is a member of
|
||||||
- Remove the user from the user directory
|
- Remove the user from the user directory
|
||||||
@@ -354,6 +360,15 @@ is set to `true`:
|
|||||||
- Remove the user's avatar URL
|
- Remove the user's avatar URL
|
||||||
- Mark the user as erased
|
- Mark the user as erased
|
||||||
|
|
||||||
|
The following actions are **NOT** performed. The list may be incomplete.
|
||||||
|
|
||||||
|
- Remove mappings of SSO IDs
|
||||||
|
- [Delete media uploaded](#delete-media-uploaded-by-a-user) by user (included avatar images)
|
||||||
|
- Delete sent and received messages
|
||||||
|
- Delete E2E cross-signing keys
|
||||||
|
- Remove the user's creation (registration) timestamp
|
||||||
|
- [Remove rate limit overrides](#override-ratelimiting-for-users)
|
||||||
|
- Remove from monthly active users
|
||||||
|
|
||||||
## Reset password
|
## Reset password
|
||||||
|
|
||||||
@@ -1092,7 +1107,7 @@ This endpoint will work even if registration is disabled on the server, unlike
|
|||||||
The API is:
|
The API is:
|
||||||
|
|
||||||
```
|
```
|
||||||
POST /_synapse/admin/v1/username_availabile?username=$localpart
|
GET /_synapse/admin/v1/username_available?username=$localpart
|
||||||
```
|
```
|
||||||
|
|
||||||
The request and response format is the same as the [/_matrix/client/r0/register/available](https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-r0-register-available) API.
|
The request and response format is the same as the [/_matrix/client/r0/register/available](https://matrix.org/docs/spec/client_server/r0.6.0#get-matrix-client-r0-register-available) API.
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ The necessary tools are detailed below.
|
|||||||
|
|
||||||
First install them with:
|
First install them with:
|
||||||
|
|
||||||
pip install -e ".[lint,mypy]"
|
```sh
|
||||||
|
pip install -e ".[lint,mypy]"
|
||||||
|
```
|
||||||
|
|
||||||
- **black**
|
- **black**
|
||||||
|
|
||||||
@@ -21,7 +23,9 @@ First install them with:
|
|||||||
Have `black` auto-format your code (it shouldn't change any
|
Have `black` auto-format your code (it shouldn't change any
|
||||||
functionality) with:
|
functionality) with:
|
||||||
|
|
||||||
black . --exclude="\.tox|build|env"
|
```sh
|
||||||
|
black . --exclude="\.tox|build|env"
|
||||||
|
```
|
||||||
|
|
||||||
- **flake8**
|
- **flake8**
|
||||||
|
|
||||||
@@ -30,7 +34,9 @@ First install them with:
|
|||||||
|
|
||||||
Check all application and test code with:
|
Check all application and test code with:
|
||||||
|
|
||||||
flake8 synapse tests
|
```sh
|
||||||
|
flake8 synapse tests
|
||||||
|
```
|
||||||
|
|
||||||
- **isort**
|
- **isort**
|
||||||
|
|
||||||
@@ -39,7 +45,9 @@ First install them with:
|
|||||||
|
|
||||||
Auto-fix imports with:
|
Auto-fix imports with:
|
||||||
|
|
||||||
isort -rc synapse tests
|
```sh
|
||||||
|
isort -rc synapse tests
|
||||||
|
```
|
||||||
|
|
||||||
`-rc` means to recursively search the given directories.
|
`-rc` means to recursively search the given directories.
|
||||||
|
|
||||||
@@ -66,15 +74,19 @@ save as it takes a while and is very resource intensive.
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
from synapse.types import UserID
|
```python
|
||||||
...
|
from synapse.types import UserID
|
||||||
user_id = UserID(local, server)
|
...
|
||||||
|
user_id = UserID(local, server)
|
||||||
|
```
|
||||||
|
|
||||||
is preferred over:
|
is preferred over:
|
||||||
|
|
||||||
from synapse import types
|
```python
|
||||||
...
|
from synapse import types
|
||||||
user_id = types.UserID(local, server)
|
...
|
||||||
|
user_id = types.UserID(local, server)
|
||||||
|
```
|
||||||
|
|
||||||
(or any other variant).
|
(or any other variant).
|
||||||
|
|
||||||
@@ -134,28 +146,30 @@ Some guidelines follow:
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
## Frobnication ##
|
```yaml
|
||||||
|
## Frobnication ##
|
||||||
|
|
||||||
# The frobnicator will ensure that all requests are fully frobnicated.
|
# The frobnicator will ensure that all requests are fully frobnicated.
|
||||||
# To enable it, uncomment the following.
|
# To enable it, uncomment the following.
|
||||||
#
|
#
|
||||||
#frobnicator_enabled: true
|
#frobnicator_enabled: true
|
||||||
|
|
||||||
# By default, the frobnicator will frobnicate with the default frobber.
|
# By default, the frobnicator will frobnicate with the default frobber.
|
||||||
# The following will make it use an alternative frobber.
|
# The following will make it use an alternative frobber.
|
||||||
#
|
#
|
||||||
#frobincator_frobber: special_frobber
|
#frobincator_frobber: special_frobber
|
||||||
|
|
||||||
# Settings for the frobber
|
# Settings for the frobber
|
||||||
#
|
#
|
||||||
frobber:
|
frobber:
|
||||||
# frobbing speed. Defaults to 1.
|
# frobbing speed. Defaults to 1.
|
||||||
#
|
#
|
||||||
#speed: 10
|
#speed: 10
|
||||||
|
|
||||||
# frobbing distance. Defaults to 1000.
|
# frobbing distance. Defaults to 1000.
|
||||||
#
|
#
|
||||||
#distance: 100
|
#distance: 100
|
||||||
|
```
|
||||||
|
|
||||||
Note that the sample configuration is generated from the synapse code
|
Note that the sample configuration is generated from the synapse code
|
||||||
and is maintained by a script, `scripts-dev/generate_sample_config`.
|
and is maintained by a script, `scripts-dev/generate_sample_config`.
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ construct URIs where users can give their consent.
|
|||||||
see if an unauthenticated user is viewing the page. This is typically
|
see if an unauthenticated user is viewing the page. This is typically
|
||||||
wrapped around the form that would be used to actually agree to the document:
|
wrapped around the form that would be used to actually agree to the document:
|
||||||
|
|
||||||
```
|
```html
|
||||||
{% if not public_version %}
|
{% if not public_version %}
|
||||||
<!-- The variables used here are only provided when the 'u' param is given to the homeserver -->
|
<!-- The variables used here are only provided when the 'u' param is given to the homeserver -->
|
||||||
<form method="post" action="consent">
|
<form method="post" action="consent">
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
# Delegation
|
# Delegation of incoming federation traffic
|
||||||
|
|
||||||
|
In the following documentation, we use the term `server_name` to refer to that setting
|
||||||
|
in your homeserver configuration file. It appears at the ends of user ids, and tells
|
||||||
|
other homeservers where they can find your server.
|
||||||
|
|
||||||
By default, other homeservers will expect to be able to reach yours via
|
By default, other homeservers will expect to be able to reach yours via
|
||||||
your `server_name`, on port 8448. For example, if you set your `server_name`
|
your `server_name`, on port 8448. For example, if you set your `server_name`
|
||||||
@@ -12,13 +16,21 @@ to a different server and/or port (e.g. `synapse.example.com:443`).
|
|||||||
|
|
||||||
## .well-known delegation
|
## .well-known delegation
|
||||||
|
|
||||||
To use this method, you need to be able to alter the
|
To use this method, you need to be able to configure the server at
|
||||||
`server_name` 's https server to serve the `/.well-known/matrix/server`
|
`https://<server_name>` to serve a file at
|
||||||
URL. Having an active server (with a valid TLS certificate) serving your
|
`https://<server_name>/.well-known/matrix/server`. There are two ways to do this, shown below.
|
||||||
`server_name` domain is out of the scope of this documentation.
|
|
||||||
|
|
||||||
The URL `https://<server_name>/.well-known/matrix/server` should
|
Note that the `.well-known` file is hosted on the default port for `https` (port 443).
|
||||||
return a JSON structure containing the key `m.server` like so:
|
|
||||||
|
### External server
|
||||||
|
|
||||||
|
For maximum flexibility, you need to configure an external server such as nginx, Apache
|
||||||
|
or HAProxy to serve the `https://<server_name>/.well-known/matrix/server` file. Setting
|
||||||
|
up such a server is out of the scope of this documentation, but note that it is often
|
||||||
|
possible to configure your [reverse proxy](reverse_proxy.md) for this.
|
||||||
|
|
||||||
|
The URL `https://<server_name>/.well-known/matrix/server` should be configured
|
||||||
|
return a JSON structure containing the key `m.server` like this:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -26,8 +38,9 @@ return a JSON structure containing the key `m.server` like so:
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
In our example, this would mean that URL `https://example.com/.well-known/matrix/server`
|
In our example (where we want federation traffic to be routed to
|
||||||
should return:
|
`https://synapse.example.com`, on port 443), this would mean that
|
||||||
|
`https://example.com/.well-known/matrix/server` should return:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -38,16 +51,29 @@ should return:
|
|||||||
Note, specifying a port is optional. If no port is specified, then it defaults
|
Note, specifying a port is optional. If no port is specified, then it defaults
|
||||||
to 8448.
|
to 8448.
|
||||||
|
|
||||||
With .well-known delegation, federating servers will check for a valid TLS
|
### Serving a `.well-known/matrix/server` file with Synapse
|
||||||
certificate for the delegated hostname (in our example: `synapse.example.com`).
|
|
||||||
|
If you are able to set up your domain so that `https://<server_name>` is routed to
|
||||||
|
Synapse (i.e., the only change needed is to direct federation traffic to port 443
|
||||||
|
instead of port 8448), then it is possible to configure Synapse to serve a suitable
|
||||||
|
`.well-known/matrix/server` file. To do so, add the following to your `homeserver.yaml`
|
||||||
|
file:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
serve_server_wellknown: true
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: this *only* works if `https://<server_name>` is routed to Synapse, so is
|
||||||
|
generally not suitable if Synapse is hosted at a subdomain such as
|
||||||
|
`https://synapse.example.com`.
|
||||||
|
|
||||||
## SRV DNS record delegation
|
## SRV DNS record delegation
|
||||||
|
|
||||||
It is also possible to do delegation using a SRV DNS record. However, that is
|
It is also possible to do delegation using a SRV DNS record. However, that is generally
|
||||||
considered an advanced topic since it's a bit complex to set up, and `.well-known`
|
not recommended, as it can be difficult to configure the TLS certificates correctly in
|
||||||
delegation is already enough in most cases.
|
this case, and it offers little advantage over `.well-known` delegation.
|
||||||
|
|
||||||
However, if you really need it, you can find some documentation on how such a
|
However, if you really need it, you can find some documentation on what such a
|
||||||
record should look like and how Synapse will use it in [the Matrix
|
record should look like and how Synapse will use it in [the Matrix
|
||||||
specification](https://matrix.org/docs/spec/server_server/latest#resolving-server-names).
|
specification](https://matrix.org/docs/spec/server_server/latest#resolving-server-names).
|
||||||
|
|
||||||
@@ -68,27 +94,9 @@ wouldn't need any delegation set up.
|
|||||||
domain `server_name` points to, you will need to let other servers know how to
|
domain `server_name` points to, you will need to let other servers know how to
|
||||||
find it using delegation.
|
find it using delegation.
|
||||||
|
|
||||||
### Do you still recommend against using a reverse proxy on the federation port?
|
### Should I use a reverse proxy for federation traffic?
|
||||||
|
|
||||||
We no longer actively recommend against using a reverse proxy. Many admins will
|
Generally, using a reverse proxy for both the federation and client traffic is a good
|
||||||
find it easier to direct federation traffic to a reverse proxy and manage their
|
idea, since it saves handling TLS traffic in Synapse. See
|
||||||
own TLS certificates, and this is a supported configuration.
|
[the reverse proxy documentation](reverse_proxy.md) for information on setting up a
|
||||||
|
|
||||||
See [the reverse proxy documentation](reverse_proxy.md) for information on setting up a
|
|
||||||
reverse proxy.
|
reverse proxy.
|
||||||
|
|
||||||
### Do I still need to give my TLS certificates to Synapse if I am using a reverse proxy?
|
|
||||||
|
|
||||||
This is no longer necessary. If you are using a reverse proxy for all of your
|
|
||||||
TLS traffic, then you can set `no_tls: True` in the Synapse config.
|
|
||||||
|
|
||||||
In that case, the only reason Synapse needs the certificate is to populate a legacy
|
|
||||||
`tls_fingerprints` field in the federation API. This is ignored by Synapse 0.99.0
|
|
||||||
and later, and the only time pre-0.99 Synapses will check it is when attempting to
|
|
||||||
fetch the server keys - and generally this is delegated via `matrix.org`, which
|
|
||||||
is running a modern version of Synapse.
|
|
||||||
|
|
||||||
### Do I need the same certificate for the client and federation port?
|
|
||||||
|
|
||||||
No. There is nothing stopping you from using different certificates,
|
|
||||||
particularly if you are using a reverse proxy.
|
|
||||||
@@ -8,23 +8,23 @@ easy to run CAS implementation built on top of Django.
|
|||||||
1. Create a new virtualenv: `python3 -m venv <your virtualenv>`
|
1. Create a new virtualenv: `python3 -m venv <your virtualenv>`
|
||||||
2. Activate your virtualenv: `source /path/to/your/virtualenv/bin/activate`
|
2. Activate your virtualenv: `source /path/to/your/virtualenv/bin/activate`
|
||||||
3. Install Django and django-mama-cas:
|
3. Install Django and django-mama-cas:
|
||||||
```
|
```sh
|
||||||
python -m pip install "django<3" "django-mama-cas==2.4.0"
|
python -m pip install "django<3" "django-mama-cas==2.4.0"
|
||||||
```
|
```
|
||||||
4. Create a Django project in the current directory:
|
4. Create a Django project in the current directory:
|
||||||
```
|
```sh
|
||||||
django-admin startproject cas_test .
|
django-admin startproject cas_test .
|
||||||
```
|
```
|
||||||
5. Follow the [install directions](https://django-mama-cas.readthedocs.io/en/latest/installation.html#configuring) for django-mama-cas
|
5. Follow the [install directions](https://django-mama-cas.readthedocs.io/en/latest/installation.html#configuring) for django-mama-cas
|
||||||
6. Setup the SQLite database: `python manage.py migrate`
|
6. Setup the SQLite database: `python manage.py migrate`
|
||||||
7. Create a user:
|
7. Create a user:
|
||||||
```
|
```sh
|
||||||
python manage.py createsuperuser
|
python manage.py createsuperuser
|
||||||
```
|
```
|
||||||
1. Use whatever you want as the username and password.
|
1. Use whatever you want as the username and password.
|
||||||
2. Leave the other fields blank.
|
2. Leave the other fields blank.
|
||||||
8. Use the built-in Django test server to serve the CAS endpoints on port 8000:
|
8. Use the built-in Django test server to serve the CAS endpoints on port 8000:
|
||||||
```
|
```sh
|
||||||
python manage.py runserver
|
python manage.py runserver
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,11 @@ license - in our case, this is almost always Apache Software License v2 (see
|
|||||||
|
|
||||||
# 2. What do I need?
|
# 2. What do I need?
|
||||||
|
|
||||||
|
If you are running Windows, the Windows Subsystem for Linux (WSL) is strongly
|
||||||
|
recommended for development. More information about WSL can be found at
|
||||||
|
<https://docs.microsoft.com/en-us/windows/wsl/install>. Running Synapse natively
|
||||||
|
on Windows is not officially supported.
|
||||||
|
|
||||||
The code of Synapse is written in Python 3. To do pretty much anything, you'll need [a recent version of Python 3](https://wiki.python.org/moin/BeginnersGuide/Download).
|
The code of Synapse is written in Python 3. To do pretty much anything, you'll need [a recent version of Python 3](https://wiki.python.org/moin/BeginnersGuide/Download).
|
||||||
|
|
||||||
The source code of Synapse is hosted on GitHub. You will also need [a recent version of git](https://github.com/git-guides/install-git).
|
The source code of Synapse is hosted on GitHub. You will also need [a recent version of git](https://github.com/git-guides/install-git).
|
||||||
@@ -41,8 +46,6 @@ can find many good git tutorials on the web.
|
|||||||
|
|
||||||
# 4. Install the dependencies
|
# 4. Install the dependencies
|
||||||
|
|
||||||
## Under Unix (macOS, Linux, BSD, ...)
|
|
||||||
|
|
||||||
Once you have installed Python 3 and added the source, please open a terminal and
|
Once you have installed Python 3 and added the source, please open a terminal and
|
||||||
setup a *virtualenv*, as follows:
|
setup a *virtualenv*, as follows:
|
||||||
|
|
||||||
@@ -50,20 +53,16 @@ setup a *virtualenv*, as follows:
|
|||||||
cd path/where/you/have/cloned/the/repository
|
cd path/where/you/have/cloned/the/repository
|
||||||
python3 -m venv ./env
|
python3 -m venv ./env
|
||||||
source ./env/bin/activate
|
source ./env/bin/activate
|
||||||
pip install -e ".[all,lint,mypy,test]"
|
pip install -e ".[all,dev]"
|
||||||
pip install tox
|
pip install tox
|
||||||
```
|
```
|
||||||
|
|
||||||
This will install the developer dependencies for the project.
|
This will install the developer dependencies for the project.
|
||||||
|
|
||||||
## Under Windows
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
|
|
||||||
# 5. Get in touch.
|
# 5. Get in touch.
|
||||||
|
|
||||||
Join our developer community on Matrix: #synapse-dev:matrix.org !
|
Join our developer community on Matrix: [#synapse-dev:matrix.org](https://matrix.to/#/#synapse-dev:matrix.org)!
|
||||||
|
|
||||||
|
|
||||||
# 6. Pick an issue.
|
# 6. Pick an issue.
|
||||||
@@ -170,6 +169,53 @@ To increase the log level for the tests, set `SYNAPSE_TEST_LOG_LEVEL`:
|
|||||||
SYNAPSE_TEST_LOG_LEVEL=DEBUG trial tests
|
SYNAPSE_TEST_LOG_LEVEL=DEBUG trial tests
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Running tests under PostgreSQL
|
||||||
|
|
||||||
|
Invoking `trial` as above will use an in-memory SQLite database. This is great for
|
||||||
|
quick development and testing. However, we recommend using a PostgreSQL database
|
||||||
|
in production (and indeed, we have some code paths specific to each database).
|
||||||
|
This means that we need to run our unit tests against PostgreSQL too. Our CI does
|
||||||
|
this automatically for pull requests and release candidates, but it's sometimes
|
||||||
|
useful to reproduce this locally.
|
||||||
|
|
||||||
|
To do so, [configure Postgres](../postgres.md) and run `trial` with the
|
||||||
|
following environment variables matching your configuration:
|
||||||
|
|
||||||
|
- `SYNAPSE_POSTGRES` to anything nonempty
|
||||||
|
- `SYNAPSE_POSTGRES_HOST`
|
||||||
|
- `SYNAPSE_POSTGRES_USER`
|
||||||
|
- `SYNAPSE_POSTGRES_PASSWORD`
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
export SYNAPSE_POSTGRES=1
|
||||||
|
export SYNAPSE_POSTGRES_HOST=localhost
|
||||||
|
export SYNAPSE_POSTGRES_USER=postgres
|
||||||
|
export SYNAPSE_POSTGRES_PASSWORD=mydevenvpassword
|
||||||
|
trial
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Prebuilt container
|
||||||
|
|
||||||
|
Since configuring PostgreSQL can be fiddly, we can make use of a pre-made
|
||||||
|
Docker container to set up PostgreSQL and run our tests for us. To do so, run
|
||||||
|
|
||||||
|
```shell
|
||||||
|
scripts-dev/test_postgresql.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Any extra arguments to the script will be passed to `tox` and then to `trial`,
|
||||||
|
so we can run a specific test in this container with e.g.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
scripts-dev/test_postgresql.sh tests.replication.test_sharded_event_persister.EventPersisterShardTestCase
|
||||||
|
```
|
||||||
|
|
||||||
|
The container creates a folder in your Synapse checkout called
|
||||||
|
`.tox-pg-container` and uses this as a tox environment. The output of any
|
||||||
|
`trial` runs goes into `_trial_temp` in your synapse source directory — the same
|
||||||
|
as running `trial` directly on your host machine.
|
||||||
|
|
||||||
## Run the integration tests ([Sytest](https://github.com/matrix-org/sytest)).
|
## Run the integration tests ([Sytest](https://github.com/matrix-org/sytest)).
|
||||||
|
|
||||||
|
|||||||
@@ -89,7 +89,9 @@ To do so, use `scripts-dev/make_full_schema.sh`. This will produce new
|
|||||||
|
|
||||||
Ensure postgres is installed, then run:
|
Ensure postgres is installed, then run:
|
||||||
|
|
||||||
./scripts-dev/make_full_schema.sh -p postgres_username -o output_dir/
|
```sh
|
||||||
|
./scripts-dev/make_full_schema.sh -p postgres_username -o output_dir/
|
||||||
|
```
|
||||||
|
|
||||||
NB at the time of writing, this script predates the split into separate `state`/`main`
|
NB at the time of writing, this script predates the split into separate `state`/`main`
|
||||||
databases so will require updates to handle that correctly.
|
databases so will require updates to handle that correctly.
|
||||||
|
|||||||
37
docs/development/experimental_features.md
Normal file
37
docs/development/experimental_features.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# Implementing experimental features in Synapse
|
||||||
|
|
||||||
|
It can be desirable to implement "experimental" features which are disabled by
|
||||||
|
default and must be explicitly enabled via the Synapse configuration. This is
|
||||||
|
applicable for features which:
|
||||||
|
|
||||||
|
* Are unstable in the Matrix spec (e.g. those defined by an MSC that has not yet been merged).
|
||||||
|
* Developers are not confident in their use by general Synapse administrators/users
|
||||||
|
(e.g. a feature is incomplete, buggy, performs poorly, or needs further testing).
|
||||||
|
|
||||||
|
Note that this only really applies to features which are expected to be desirable
|
||||||
|
to a broad audience. The [module infrastructure](../modules/index.md) should
|
||||||
|
instead be investigated for non-standard features.
|
||||||
|
|
||||||
|
Guarding experimental features behind configuration flags should help with some
|
||||||
|
of the following scenarios:
|
||||||
|
|
||||||
|
* Ensure that clients do not assume that unstable features exist (failing
|
||||||
|
gracefully if they do not).
|
||||||
|
* Unstable features do not become de-facto standards and can be removed
|
||||||
|
aggressively (since only those who have opted-in will be affected).
|
||||||
|
* Ease finding the implementation of unstable features in Synapse (for future
|
||||||
|
removal or stabilization).
|
||||||
|
* Ease testing a feature (or removal of feature) due to enabling/disabling without
|
||||||
|
code changes. It also becomes possible to ask for wider testing, if desired.
|
||||||
|
|
||||||
|
Experimental configuration flags should be disabled by default (requiring Synapse
|
||||||
|
administrators to explicitly opt-in), although there are situations where it makes
|
||||||
|
sense (from a product point-of-view) to enable features by default. This is
|
||||||
|
expected and not an issue.
|
||||||
|
|
||||||
|
It is not a requirement for experimental features to be behind a configuration flag,
|
||||||
|
but one should be used if unsure.
|
||||||
|
|
||||||
|
New experimental configuration flags should be added under the `experimental`
|
||||||
|
configuration key (see the `synapse.config.experimental` file) and either explain
|
||||||
|
(briefly) what is being enabled, or include the MSC number.
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
# How to test SAML as a developer without a server
|
# How to test SAML as a developer without a server
|
||||||
|
|
||||||
https://capriza.github.io/samling/samling.html (https://github.com/capriza/samling) is a great
|
https://fujifish.github.io/samling/samling.html (https://github.com/fujifish/samling) is a great resource for being able to tinker with the
|
||||||
resource for being able to tinker with the SAML options within Synapse without needing to
|
SAML options within Synapse without needing to deploy and configure a complicated software stack.
|
||||||
deploy and configure a complicated software stack.
|
|
||||||
|
|
||||||
To make Synapse (and therefore Riot) use it:
|
To make Synapse (and therefore Element) use it:
|
||||||
|
|
||||||
1. Use the samling.html URL above or deploy your own and visit the IdP Metadata tab.
|
1. Use the samling.html URL above or deploy your own and visit the IdP Metadata tab.
|
||||||
2. Copy the XML to your clipboard.
|
2. Copy the XML to your clipboard.
|
||||||
@@ -16,7 +15,7 @@ To make Synapse (and therefore Riot) use it:
|
|||||||
sp_config:
|
sp_config:
|
||||||
allow_unknown_attributes: true # Works around a bug with AVA Hashes: https://github.com/IdentityPython/pysaml2/issues/388
|
allow_unknown_attributes: true # Works around a bug with AVA Hashes: https://github.com/IdentityPython/pysaml2/issues/388
|
||||||
metadata:
|
metadata:
|
||||||
local: ["samling.xml"]
|
local: ["samling.xml"]
|
||||||
```
|
```
|
||||||
5. Ensure that your `homeserver.yaml` has a setting for `public_baseurl`:
|
5. Ensure that your `homeserver.yaml` has a setting for `public_baseurl`:
|
||||||
```yaml
|
```yaml
|
||||||
@@ -26,9 +25,9 @@ To make Synapse (and therefore Riot) use it:
|
|||||||
the dependencies are installed and ready to go.
|
the dependencies are installed and ready to go.
|
||||||
7. Restart Synapse.
|
7. Restart Synapse.
|
||||||
|
|
||||||
Then in Riot:
|
Then in Element:
|
||||||
|
|
||||||
1. Visit the login page with a Riot pointing at your homeserver.
|
1. Visit the login page and point Element towards your homeserver using the `public_baseurl` above.
|
||||||
2. Click the Single Sign-On button.
|
2. Click the Single Sign-On button.
|
||||||
3. On the samling page, enter a Name Identifier and add a SAML Attribute for `uid=your_localpart`.
|
3. On the samling page, enter a Name Identifier and add a SAML Attribute for `uid=your_localpart`.
|
||||||
The response must also be signed.
|
The response must also be signed.
|
||||||
|
|||||||
@@ -25,16 +25,14 @@ When Synapse is asked to preview a URL it does the following:
|
|||||||
3. Kicks off a background process to generate a preview:
|
3. Kicks off a background process to generate a preview:
|
||||||
1. Checks the database cache by URL and timestamp and returns the result if it
|
1. Checks the database cache by URL and timestamp and returns the result if it
|
||||||
has not expired and was successful (a 2xx return code).
|
has not expired and was successful (a 2xx return code).
|
||||||
2. Checks if the URL matches an oEmbed pattern. If it does, fetch the oEmbed
|
2. Checks if the URL matches an [oEmbed](https://oembed.com/) pattern. If it
|
||||||
response. If this is an image, replace the URL to fetch and continue. If
|
does, update the URL to download.
|
||||||
if it is HTML content, use the HTML as the document and continue.
|
3. Downloads the URL and stores it into a file via the media storage provider
|
||||||
3. If it doesn't match an oEmbed pattern, downloads the URL and stores it
|
and saves the local media metadata.
|
||||||
into a file via the media storage provider and saves the local media
|
4. If the media is an image:
|
||||||
metadata.
|
|
||||||
5. If the media is an image:
|
|
||||||
1. Generates thumbnails.
|
1. Generates thumbnails.
|
||||||
2. Generates an Open Graph response based on image properties.
|
2. Generates an Open Graph response based on image properties.
|
||||||
6. If the media is HTML:
|
5. If the media is HTML:
|
||||||
1. Decodes the HTML via the stored file.
|
1. Decodes the HTML via the stored file.
|
||||||
2. Generates an Open Graph response from the HTML.
|
2. Generates an Open Graph response from the HTML.
|
||||||
3. If an image exists in the Open Graph response:
|
3. If an image exists in the Open Graph response:
|
||||||
@@ -42,6 +40,13 @@ When Synapse is asked to preview a URL it does the following:
|
|||||||
provider and saves the local media metadata.
|
provider and saves the local media metadata.
|
||||||
2. Generates thumbnails.
|
2. Generates thumbnails.
|
||||||
3. Updates the Open Graph response based on image properties.
|
3. Updates the Open Graph response based on image properties.
|
||||||
|
6. If the media is JSON and an oEmbed URL was found:
|
||||||
|
1. Convert the oEmbed response to an Open Graph response.
|
||||||
|
2. If a thumbnail or image is in the oEmbed response:
|
||||||
|
1. Downloads the URL and stores it into a file via the media storage
|
||||||
|
provider and saves the local media metadata.
|
||||||
|
2. Generates thumbnails.
|
||||||
|
3. Updates the Open Graph response based on image properties.
|
||||||
7. Stores the result in the database cache.
|
7. Stores the result in the database cache.
|
||||||
4. Returns the result.
|
4. Returns the result.
|
||||||
|
|
||||||
|
|||||||
@@ -69,9 +69,9 @@ A default policy can be defined as such, in the `retention` section of
|
|||||||
the configuration file:
|
the configuration file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
default_policy:
|
default_policy:
|
||||||
min_lifetime: 1d
|
min_lifetime: 1d
|
||||||
max_lifetime: 1y
|
max_lifetime: 1y
|
||||||
```
|
```
|
||||||
|
|
||||||
Here, `min_lifetime` and `max_lifetime` have the same meaning and level
|
Here, `min_lifetime` and `max_lifetime` have the same meaning and level
|
||||||
@@ -95,14 +95,14 @@ depending on an event's room's policy. This can be done by setting the
|
|||||||
file. An example of such configuration could be:
|
file. An example of such configuration could be:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
purge_jobs:
|
purge_jobs:
|
||||||
- longest_max_lifetime: 3d
|
- longest_max_lifetime: 3d
|
||||||
interval: 12h
|
interval: 12h
|
||||||
- shortest_max_lifetime: 3d
|
- shortest_max_lifetime: 3d
|
||||||
longest_max_lifetime: 1w
|
longest_max_lifetime: 1w
|
||||||
interval: 1d
|
interval: 1d
|
||||||
- shortest_max_lifetime: 1w
|
- shortest_max_lifetime: 1w
|
||||||
interval: 2d
|
interval: 2d
|
||||||
```
|
```
|
||||||
|
|
||||||
In this example, we define three jobs:
|
In this example, we define three jobs:
|
||||||
@@ -141,8 +141,8 @@ purging old events in a room. These limits can be defined as such in the
|
|||||||
`retention` section of the configuration file:
|
`retention` section of the configuration file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
allowed_lifetime_min: 1d
|
allowed_lifetime_min: 1d
|
||||||
allowed_lifetime_max: 1y
|
allowed_lifetime_max: 1y
|
||||||
```
|
```
|
||||||
|
|
||||||
The limits are considered when running purge jobs. If necessary, the
|
The limits are considered when running purge jobs. If necessary, the
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ The available account validity callbacks are:
|
|||||||
|
|
||||||
### `is_user_expired`
|
### `is_user_expired`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.39.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def is_user_expired(user: str) -> Optional[bool]
|
async def is_user_expired(user: str) -> Optional[bool]
|
||||||
```
|
```
|
||||||
@@ -22,8 +24,15 @@ If the module returns `True`, the current request will be denied with the error
|
|||||||
`ORG_MATRIX_EXPIRED_ACCOUNT` and the HTTP status code 403. Note that this doesn't
|
`ORG_MATRIX_EXPIRED_ACCOUNT` and the HTTP status code 403. Note that this doesn't
|
||||||
invalidate the user's access token.
|
invalidate the user's access token.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `None`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `None` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
### `on_user_registration`
|
### `on_user_registration`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.39.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def on_user_registration(user: str) -> None
|
async def on_user_registration(user: str) -> None
|
||||||
```
|
```
|
||||||
@@ -31,3 +40,5 @@ async def on_user_registration(user: str) -> None
|
|||||||
Called after successfully registering a user, in case the module needs to perform extra
|
Called after successfully registering a user, in case the module needs to perform extra
|
||||||
operations to keep track of them. (e.g. add them to a database table). The user is
|
operations to keep track of them. (e.g. add them to a database table). The user is
|
||||||
represented by their Matrix user ID.
|
represented by their Matrix user ID.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, Synapse runs them all in order.
|
||||||
|
|||||||
@@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
Synapse supports extending its functionality by configuring external modules.
|
Synapse supports extending its functionality by configuring external modules.
|
||||||
|
|
||||||
|
**Note**: When using third-party modules, you effectively allow someone else to run
|
||||||
|
custom code on your Synapse homeserver. Server admins are encouraged to verify the
|
||||||
|
provenance of the modules they use on their homeserver and make sure the modules aren't
|
||||||
|
running malicious code on their instance.
|
||||||
|
|
||||||
## Using modules
|
## Using modules
|
||||||
|
|
||||||
To use a module on Synapse, add it to the `modules` section of the configuration file:
|
To use a module on Synapse, add it to the `modules` section of the configuration file:
|
||||||
@@ -18,17 +23,31 @@ modules:
|
|||||||
Each module is defined by a path to a Python class as well as a configuration. This
|
Each module is defined by a path to a Python class as well as a configuration. This
|
||||||
information for a given module should be available in the module's own documentation.
|
information for a given module should be available in the module's own documentation.
|
||||||
|
|
||||||
**Note**: When using third-party modules, you effectively allow someone else to run
|
## Using multiple modules
|
||||||
custom code on your Synapse homeserver. Server admins are encouraged to verify the
|
|
||||||
provenance of the modules they use on their homeserver and make sure the modules aren't
|
|
||||||
running malicious code on their instance.
|
|
||||||
|
|
||||||
Also note that we are currently in the process of migrating module interfaces to this
|
The order in which modules are listed in this section is important. When processing an
|
||||||
system. While some interfaces might be compatible with it, others still require
|
action that can be handled by several modules, Synapse will always prioritise the module
|
||||||
configuring modules in another part of Synapse's configuration file.
|
that appears first (i.e. is the highest in the list). This means:
|
||||||
|
|
||||||
|
* If several modules register the same callback, the callback registered by the module
|
||||||
|
that appears first is used.
|
||||||
|
* If several modules try to register a handler for the same HTTP path, only the handler
|
||||||
|
registered by the module that appears first is used. Handlers registered by the other
|
||||||
|
module(s) are ignored and Synapse will log a warning message about them.
|
||||||
|
|
||||||
|
Note that Synapse doesn't allow multiple modules implementing authentication checkers via
|
||||||
|
the password auth provider feature for the same login type with different fields. If this
|
||||||
|
happens, Synapse will refuse to start.
|
||||||
|
|
||||||
|
## Current status
|
||||||
|
|
||||||
|
We are currently in the process of migrating module interfaces to this system. While some
|
||||||
|
interfaces might be compatible with it, others still require configuring modules in
|
||||||
|
another part of Synapse's configuration file.
|
||||||
|
|
||||||
Currently, only the following pre-existing interfaces are compatible with this new system:
|
Currently, only the following pre-existing interfaces are compatible with this new system:
|
||||||
|
|
||||||
* spam checker
|
* spam checker
|
||||||
* third-party rules
|
* third-party rules
|
||||||
* presence router
|
* presence router
|
||||||
|
* password auth providers
|
||||||
|
|||||||
176
docs/modules/password_auth_provider_callbacks.md
Normal file
176
docs/modules/password_auth_provider_callbacks.md
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
# Password auth provider callbacks
|
||||||
|
|
||||||
|
Password auth providers offer a way for server administrators to integrate
|
||||||
|
their Synapse installation with an external authentication system. The callbacks can be
|
||||||
|
registered by using the Module API's `register_password_auth_provider_callbacks` method.
|
||||||
|
|
||||||
|
## Callbacks
|
||||||
|
|
||||||
|
### `auth_checkers`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.46.0_
|
||||||
|
|
||||||
|
```python
|
||||||
|
auth_checkers: Dict[Tuple[str, Tuple[str, ...]], Callable]
|
||||||
|
```
|
||||||
|
|
||||||
|
A dict mapping from tuples of a login type identifier (such as `m.login.password`) and a
|
||||||
|
tuple of field names (such as `("password", "secret_thing")`) to authentication checking
|
||||||
|
callbacks, which should be of the following form:
|
||||||
|
|
||||||
|
```python
|
||||||
|
async def check_auth(
|
||||||
|
user: str,
|
||||||
|
login_type: str,
|
||||||
|
login_dict: "synapse.module_api.JsonDict",
|
||||||
|
) -> Optional[
|
||||||
|
Tuple[
|
||||||
|
str,
|
||||||
|
Optional[Callable[["synapse.module_api.LoginResponse"], Awaitable[None]]]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
The login type and field names should be provided by the user in the
|
||||||
|
request to the `/login` API. [The Matrix specification](https://matrix.org/docs/spec/client_server/latest#authentication-types)
|
||||||
|
defines some types, however user defined ones are also allowed.
|
||||||
|
|
||||||
|
The callback is passed the `user` field provided by the client (which might not be in
|
||||||
|
`@username:server` form), the login type, and a dictionary of login secrets passed by
|
||||||
|
the client.
|
||||||
|
|
||||||
|
If the authentication is successful, the module must return the user's Matrix ID (e.g.
|
||||||
|
`@alice:example.com`) and optionally a callback to be called with the response to the
|
||||||
|
`/login` request. If the module doesn't wish to return a callback, it must return `None`
|
||||||
|
instead.
|
||||||
|
|
||||||
|
If the authentication is unsuccessful, the module must return `None`.
|
||||||
|
|
||||||
|
If multiple modules register an auth checker for the same login type but with different
|
||||||
|
fields, Synapse will refuse to start.
|
||||||
|
|
||||||
|
If multiple modules register an auth checker for the same login type with the same fields,
|
||||||
|
then the callbacks will be executed in order, until one returns a Matrix User ID (and
|
||||||
|
optionally a callback). In that case, the return value of that callback will be accepted
|
||||||
|
and subsequent callbacks will not be fired. If every callback returns `None`, then the
|
||||||
|
authentication fails.
|
||||||
|
|
||||||
|
### `check_3pid_auth`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.46.0_
|
||||||
|
|
||||||
|
```python
|
||||||
|
async def check_3pid_auth(
|
||||||
|
medium: str,
|
||||||
|
address: str,
|
||||||
|
password: str,
|
||||||
|
) -> Optional[
|
||||||
|
Tuple[
|
||||||
|
str,
|
||||||
|
Optional[Callable[["synapse.module_api.LoginResponse"], Awaitable[None]]]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
Called when a user attempts to register or log in with a third party identifier,
|
||||||
|
such as email. It is passed the medium (eg. `email`), an address (eg. `jdoe@example.com`)
|
||||||
|
and the user's password.
|
||||||
|
|
||||||
|
If the authentication is successful, the module must return the user's Matrix ID (e.g.
|
||||||
|
`@alice:example.com`) and optionally a callback to be called with the response to the `/login` request.
|
||||||
|
If the module doesn't wish to return a callback, it must return None instead.
|
||||||
|
|
||||||
|
If the authentication is unsuccessful, the module must return `None`.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `None`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `None` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback. If every callback return `None`,
|
||||||
|
the authentication is denied.
|
||||||
|
|
||||||
|
### `on_logged_out`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.46.0_
|
||||||
|
|
||||||
|
```python
|
||||||
|
async def on_logged_out(
|
||||||
|
user_id: str,
|
||||||
|
device_id: Optional[str],
|
||||||
|
access_token: str
|
||||||
|
) -> None
|
||||||
|
```
|
||||||
|
Called during a logout request for a user. It is passed the qualified user ID, the ID of the
|
||||||
|
deactivated device (if any: access tokens are occasionally created without an associated
|
||||||
|
device ID), and the (now deactivated) access token.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, Synapse runs them all in order.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
The example module below implements authentication checkers for two different login types:
|
||||||
|
- `my.login.type`
|
||||||
|
- Expects a `my_field` field to be sent to `/login`
|
||||||
|
- Is checked by the method: `self.check_my_login`
|
||||||
|
- `m.login.password` (defined in [the spec](https://matrix.org/docs/spec/client_server/latest#password-based))
|
||||||
|
- Expects a `password` field to be sent to `/login`
|
||||||
|
- Is checked by the method: `self.check_pass`
|
||||||
|
|
||||||
|
|
||||||
|
```python
|
||||||
|
from typing import Awaitable, Callable, Optional, Tuple
|
||||||
|
|
||||||
|
import synapse
|
||||||
|
from synapse import module_api
|
||||||
|
|
||||||
|
|
||||||
|
class MyAuthProvider:
|
||||||
|
def __init__(self, config: dict, api: module_api):
|
||||||
|
|
||||||
|
self.api = api
|
||||||
|
|
||||||
|
self.credentials = {
|
||||||
|
"bob": "building",
|
||||||
|
"@scoop:matrix.org": "digging",
|
||||||
|
}
|
||||||
|
|
||||||
|
api.register_password_auth_provider_callbacks(
|
||||||
|
auth_checkers={
|
||||||
|
("my.login_type", ("my_field",)): self.check_my_login,
|
||||||
|
("m.login.password", ("password",)): self.check_pass,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
async def check_my_login(
|
||||||
|
self,
|
||||||
|
username: str,
|
||||||
|
login_type: str,
|
||||||
|
login_dict: "synapse.module_api.JsonDict",
|
||||||
|
) -> Optional[
|
||||||
|
Tuple[
|
||||||
|
str,
|
||||||
|
Optional[Callable[["synapse.module_api.LoginResponse"], Awaitable[None]]],
|
||||||
|
]
|
||||||
|
]:
|
||||||
|
if login_type != "my.login_type":
|
||||||
|
return None
|
||||||
|
|
||||||
|
if self.credentials.get(username) == login_dict.get("my_field"):
|
||||||
|
return self.api.get_qualified_user_id(username)
|
||||||
|
|
||||||
|
async def check_pass(
|
||||||
|
self,
|
||||||
|
username: str,
|
||||||
|
login_type: str,
|
||||||
|
login_dict: "synapse.module_api.JsonDict",
|
||||||
|
) -> Optional[
|
||||||
|
Tuple[
|
||||||
|
str,
|
||||||
|
Optional[Callable[["synapse.module_api.LoginResponse"], Awaitable[None]]],
|
||||||
|
]
|
||||||
|
]:
|
||||||
|
if login_type != "m.login.password":
|
||||||
|
return None
|
||||||
|
|
||||||
|
if self.credentials.get(username) == login_dict.get("password"):
|
||||||
|
return self.api.get_qualified_user_id(username)
|
||||||
|
```
|
||||||
@@ -12,6 +12,9 @@ should register this resource in its `__init__` method using the `register_web_r
|
|||||||
method from the `ModuleApi` class (see [this section](writing_a_module.html#registering-a-web-resource) for
|
method from the `ModuleApi` class (see [this section](writing_a_module.html#registering-a-web-resource) for
|
||||||
more info).
|
more info).
|
||||||
|
|
||||||
|
There is no longer a `get_db_schema_files` callback provided for password auth provider modules. Any
|
||||||
|
changes to the database should now be made by the module using the module API class.
|
||||||
|
|
||||||
The module's author should also update any example in the module's configuration to only
|
The module's author should also update any example in the module's configuration to only
|
||||||
use the new `modules` section in Synapse's configuration file (see [this section](index.html#using-modules)
|
use the new `modules` section in Synapse's configuration file (see [this section](index.html#using-modules)
|
||||||
for more info).
|
for more info).
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ The available presence router callbacks are:
|
|||||||
|
|
||||||
### `get_users_for_states`
|
### `get_users_for_states`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.42.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def get_users_for_states(
|
async def get_users_for_states(
|
||||||
state_updates: Iterable["synapse.api.UserPresenceState"],
|
state_updates: Iterable["synapse.api.UserPresenceState"],
|
||||||
@@ -24,8 +26,14 @@ must return a dictionary that maps from Matrix user IDs (which can be local or r
|
|||||||
|
|
||||||
Synapse will then attempt to send the specified presence updates to each user when possible.
|
Synapse will then attempt to send the specified presence updates to each user when possible.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, Synapse merges all the dictionaries returned
|
||||||
|
by the callbacks. If multiple callbacks return a dictionary containing the same key,
|
||||||
|
Synapse concatenates the sets associated with this key from each dictionary.
|
||||||
|
|
||||||
### `get_interested_users`
|
### `get_interested_users`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.42.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def get_interested_users(
|
async def get_interested_users(
|
||||||
user_id: str
|
user_id: str
|
||||||
@@ -44,6 +52,12 @@ query. The returned users can be local or remote.
|
|||||||
Alternatively the callback can return `synapse.module_api.PRESENCE_ALL_USERS`
|
Alternatively the callback can return `synapse.module_api.PRESENCE_ALL_USERS`
|
||||||
to indicate that the user should receive updates from all known users.
|
to indicate that the user should receive updates from all known users.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. Synapse
|
||||||
|
calls each callback one by one, and use a concatenation of all the `set`s returned by the
|
||||||
|
callbacks. If one callback returns `synapse.module_api.PRESENCE_ALL_USERS`, Synapse uses
|
||||||
|
this value instead. If this happens, Synapse does not call any of the subsequent
|
||||||
|
implementations of this callback.
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
The example below is a module that implements both presence router callbacks, and ensures
|
The example below is a module that implements both presence router callbacks, and ensures
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ The available spam checker callbacks are:
|
|||||||
|
|
||||||
### `check_event_for_spam`
|
### `check_event_for_spam`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.37.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def check_event_for_spam(event: "synapse.events.EventBase") -> Union[bool, str]
|
async def check_event_for_spam(event: "synapse.events.EventBase") -> Union[bool, str]
|
||||||
```
|
```
|
||||||
@@ -19,8 +21,37 @@ either a `bool` to indicate whether the event must be rejected because of spam,
|
|||||||
to indicate the event must be rejected because of spam and to give a rejection reason to
|
to indicate the event must be rejected because of spam and to give a rejection reason to
|
||||||
forward to clients.
|
forward to clients.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `False`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `False` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
|
### `user_may_join_room`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.37.0_
|
||||||
|
|
||||||
|
```python
|
||||||
|
async def user_may_join_room(user: str, room: str, is_invited: bool) -> bool
|
||||||
|
```
|
||||||
|
|
||||||
|
Called when a user is trying to join a room. The module must return a `bool` to indicate
|
||||||
|
whether the user can join the room. The user is represented by their Matrix user ID (e.g.
|
||||||
|
`@alice:example.com`) and the room is represented by its Matrix ID (e.g.
|
||||||
|
`!room:example.com`). The module is also given a boolean to indicate whether the user
|
||||||
|
currently has a pending invite in the room.
|
||||||
|
|
||||||
|
This callback isn't called if the join is performed by a server administrator, or in the
|
||||||
|
context of a room creation.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `True`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `True` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
### `user_may_invite`
|
### `user_may_invite`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.37.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def user_may_invite(inviter: str, invitee: str, room_id: str) -> bool
|
async def user_may_invite(inviter: str, invitee: str, room_id: str) -> bool
|
||||||
```
|
```
|
||||||
@@ -29,8 +60,57 @@ Called when processing an invitation. The module must return a `bool` indicating
|
|||||||
the inviter can invite the invitee to the given room. Both inviter and invitee are
|
the inviter can invite the invitee to the given room. Both inviter and invitee are
|
||||||
represented by their Matrix user ID (e.g. `@alice:example.com`).
|
represented by their Matrix user ID (e.g. `@alice:example.com`).
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `True`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `True` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
|
### `user_may_send_3pid_invite`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.45.0_
|
||||||
|
|
||||||
|
```python
|
||||||
|
async def user_may_send_3pid_invite(
|
||||||
|
inviter: str,
|
||||||
|
medium: str,
|
||||||
|
address: str,
|
||||||
|
room_id: str,
|
||||||
|
) -> bool
|
||||||
|
```
|
||||||
|
|
||||||
|
Called when processing an invitation using a third-party identifier (also called a 3PID,
|
||||||
|
e.g. an email address or a phone number). The module must return a `bool` indicating
|
||||||
|
whether the inviter can invite the invitee to the given room.
|
||||||
|
|
||||||
|
The inviter is represented by their Matrix user ID (e.g. `@alice:example.com`), and the
|
||||||
|
invitee is represented by its medium (e.g. "email") and its address
|
||||||
|
(e.g. `alice@example.com`). See [the Matrix specification](https://matrix.org/docs/spec/appendices#pid-types)
|
||||||
|
for more information regarding third-party identifiers.
|
||||||
|
|
||||||
|
For example, a call to this callback to send an invitation to the email address
|
||||||
|
`alice@example.com` would look like this:
|
||||||
|
|
||||||
|
```python
|
||||||
|
await user_may_send_3pid_invite(
|
||||||
|
"@bob:example.com", # The inviter's user ID
|
||||||
|
"email", # The medium of the 3PID to invite
|
||||||
|
"alice@example.com", # The address of the 3PID to invite
|
||||||
|
"!some_room:example.com", # The ID of the room to send the invite into
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: If the third-party identifier is already associated with a matrix user ID,
|
||||||
|
[`user_may_invite`](#user_may_invite) will be used instead.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `True`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `True` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
### `user_may_create_room`
|
### `user_may_create_room`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.37.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def user_may_create_room(user: str) -> bool
|
async def user_may_create_room(user: str) -> bool
|
||||||
```
|
```
|
||||||
@@ -38,8 +118,15 @@ async def user_may_create_room(user: str) -> bool
|
|||||||
Called when processing a room creation request. The module must return a `bool` indicating
|
Called when processing a room creation request. The module must return a `bool` indicating
|
||||||
whether the given user (represented by their Matrix user ID) is allowed to create a room.
|
whether the given user (represented by their Matrix user ID) is allowed to create a room.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `True`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `True` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
### `user_may_create_room_alias`
|
### `user_may_create_room_alias`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.37.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def user_may_create_room_alias(user: str, room_alias: "synapse.types.RoomAlias") -> bool
|
async def user_may_create_room_alias(user: str, room_alias: "synapse.types.RoomAlias") -> bool
|
||||||
```
|
```
|
||||||
@@ -48,8 +135,15 @@ Called when trying to associate an alias with an existing room. The module must
|
|||||||
`bool` indicating whether the given user (represented by their Matrix user ID) is allowed
|
`bool` indicating whether the given user (represented by their Matrix user ID) is allowed
|
||||||
to set the given alias.
|
to set the given alias.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `True`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `True` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
### `user_may_publish_room`
|
### `user_may_publish_room`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.37.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def user_may_publish_room(user: str, room_id: str) -> bool
|
async def user_may_publish_room(user: str, room_id: str) -> bool
|
||||||
```
|
```
|
||||||
@@ -58,8 +152,15 @@ Called when trying to publish a room to the homeserver's public rooms directory.
|
|||||||
module must return a `bool` indicating whether the given user (represented by their
|
module must return a `bool` indicating whether the given user (represented by their
|
||||||
Matrix user ID) is allowed to publish the given room.
|
Matrix user ID) is allowed to publish the given room.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `True`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `True` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
### `check_username_for_spam`
|
### `check_username_for_spam`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.37.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def check_username_for_spam(user_profile: Dict[str, str]) -> bool
|
async def check_username_for_spam(user_profile: Dict[str, str]) -> bool
|
||||||
```
|
```
|
||||||
@@ -75,8 +176,15 @@ is represented as a dictionary with the following keys:
|
|||||||
The module is given a copy of the original dictionary, so modifying it from within the
|
The module is given a copy of the original dictionary, so modifying it from within the
|
||||||
module cannot modify a user's profile when included in user directory search results.
|
module cannot modify a user's profile when included in user directory search results.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `False`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `False` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
### `check_registration_for_spam`
|
### `check_registration_for_spam`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.37.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def check_registration_for_spam(
|
async def check_registration_for_spam(
|
||||||
email_threepid: Optional[dict],
|
email_threepid: Optional[dict],
|
||||||
@@ -100,8 +208,16 @@ The arguments passed to this callback are:
|
|||||||
used during the registration process.
|
used during the registration process.
|
||||||
* `auth_provider_id`: The identifier of the SSO authentication provider, if any.
|
* `auth_provider_id`: The identifier of the SSO authentication provider, if any.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `RegistrationBehaviour.ALLOW`, Synapse falls through to the next one.
|
||||||
|
The value of the first callback that does not return `RegistrationBehaviour.ALLOW` will
|
||||||
|
be used. If this happens, Synapse will not call any of the subsequent implementations of
|
||||||
|
this callback.
|
||||||
|
|
||||||
### `check_media_file_for_spam`
|
### `check_media_file_for_spam`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.37.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def check_media_file_for_spam(
|
async def check_media_file_for_spam(
|
||||||
file_wrapper: "synapse.rest.media.v1.media_storage.ReadableFileWrapper",
|
file_wrapper: "synapse.rest.media.v1.media_storage.ReadableFileWrapper",
|
||||||
@@ -112,6 +228,11 @@ async def check_media_file_for_spam(
|
|||||||
Called when storing a local or remote file. The module must return a boolean indicating
|
Called when storing a local or remote file. The module must return a boolean indicating
|
||||||
whether the given file can be stored in the homeserver's media store.
|
whether the given file can be stored in the homeserver's media store.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `False`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `False` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
The example below is a module that implements the spam checker callback
|
The example below is a module that implements the spam checker callback
|
||||||
@@ -136,9 +257,9 @@ class IsUserEvilResource(Resource):
|
|||||||
self.evil_users = config.get("evil_users") or []
|
self.evil_users = config.get("evil_users") or []
|
||||||
|
|
||||||
def render_GET(self, request: Request):
|
def render_GET(self, request: Request):
|
||||||
user = request.args.get(b"user")[0]
|
user = request.args.get(b"user")[0].decode()
|
||||||
request.setHeader(b"Content-Type", b"application/json")
|
request.setHeader(b"Content-Type", b"application/json")
|
||||||
return json.dumps({"evil": user in self.evil_users})
|
return json.dumps({"evil": user in self.evil_users}).encode()
|
||||||
|
|
||||||
|
|
||||||
class ListSpamChecker:
|
class ListSpamChecker:
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ The available third party rules callbacks are:
|
|||||||
|
|
||||||
### `check_event_allowed`
|
### `check_event_allowed`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.39.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def check_event_allowed(
|
async def check_event_allowed(
|
||||||
event: "synapse.events.EventBase",
|
event: "synapse.events.EventBase",
|
||||||
@@ -41,11 +43,26 @@ event with new data by returning the new event's data as a dictionary. In order
|
|||||||
that, it is recommended the module calls `event.get_dict()` to get the current event as a
|
that, it is recommended the module calls `event.get_dict()` to get the current event as a
|
||||||
dictionary, and modify the returned dictionary accordingly.
|
dictionary, and modify the returned dictionary accordingly.
|
||||||
|
|
||||||
|
If `check_event_allowed` raises an exception, the module is assumed to have failed.
|
||||||
|
The event will not be accepted but is not treated as explicitly rejected, either.
|
||||||
|
An HTTP request causing the module check will likely result in a 500 Internal
|
||||||
|
Server Error.
|
||||||
|
|
||||||
|
When the boolean returned by the module is `False`, the event is rejected.
|
||||||
|
(Module developers should not use exceptions for rejection.)
|
||||||
|
|
||||||
Note that replacing the event only works for events sent by local users, not for events
|
Note that replacing the event only works for events sent by local users, not for events
|
||||||
received over federation.
|
received over federation.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `True`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `True` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
### `on_create_room`
|
### `on_create_room`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.39.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def on_create_room(
|
async def on_create_room(
|
||||||
requester: "synapse.types.Requester",
|
requester: "synapse.types.Requester",
|
||||||
@@ -63,8 +80,16 @@ the request is a server admin.
|
|||||||
Modules can modify the `request_content` (by e.g. adding events to its `initial_state`),
|
Modules can modify the `request_content` (by e.g. adding events to its `initial_state`),
|
||||||
or deny the room's creation by raising a `module_api.errors.SynapseError`.
|
or deny the room's creation by raising a `module_api.errors.SynapseError`.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns without raising an exception, Synapse falls through to the next one. The
|
||||||
|
room creation will be forbidden as soon as one of the callbacks raises an exception. If
|
||||||
|
this happens, Synapse will not call any of the subsequent implementations of this
|
||||||
|
callback.
|
||||||
|
|
||||||
### `check_threepid_can_be_invited`
|
### `check_threepid_can_be_invited`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.39.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def check_threepid_can_be_invited(
|
async def check_threepid_can_be_invited(
|
||||||
medium: str,
|
medium: str,
|
||||||
@@ -76,8 +101,15 @@ async def check_threepid_can_be_invited(
|
|||||||
Called when processing an invite via a third-party identifier (i.e. email or phone number).
|
Called when processing an invite via a third-party identifier (i.e. email or phone number).
|
||||||
The module must return a boolean indicating whether the invite can go through.
|
The module must return a boolean indicating whether the invite can go through.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `True`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `True` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
### `check_visibility_can_be_modified`
|
### `check_visibility_can_be_modified`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.39.0_
|
||||||
|
|
||||||
```python
|
```python
|
||||||
async def check_visibility_can_be_modified(
|
async def check_visibility_can_be_modified(
|
||||||
room_id: str,
|
room_id: str,
|
||||||
@@ -90,6 +122,32 @@ Called when changing the visibility of a room in the local public room directory
|
|||||||
visibility is a string that's either "public" or "private". The module must return a
|
visibility is a string that's either "public" or "private". The module must return a
|
||||||
boolean indicating whether the change can go through.
|
boolean indicating whether the change can go through.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, they will be considered in order. If a
|
||||||
|
callback returns `True`, Synapse falls through to the next one. The value of the first
|
||||||
|
callback that does not return `True` will be used. If this happens, Synapse will not call
|
||||||
|
any of the subsequent implementations of this callback.
|
||||||
|
|
||||||
|
### `on_new_event`
|
||||||
|
|
||||||
|
_First introduced in Synapse v1.47.0_
|
||||||
|
|
||||||
|
```python
|
||||||
|
async def on_new_event(
|
||||||
|
event: "synapse.events.EventBase",
|
||||||
|
state_events: "synapse.types.StateMap",
|
||||||
|
) -> None:
|
||||||
|
```
|
||||||
|
|
||||||
|
Called after sending an event into a room. The module is passed the event, as well
|
||||||
|
as the state of the room _after_ the event. This means that if the event is a state event,
|
||||||
|
it will be included in this state.
|
||||||
|
|
||||||
|
Note that this callback is called when the event has already been processed and stored
|
||||||
|
into the room, which means this callback cannot be used to deny persisting the event. To
|
||||||
|
deny an incoming event, see [`check_event_for_spam`](spam_checker_callbacks.md#check_event_for_spam) instead.
|
||||||
|
|
||||||
|
If multiple modules implement this callback, Synapse runs them all in order.
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
The example below is a module that implements the third-party rules callback
|
The example below is a module that implements the third-party rules callback
|
||||||
|
|||||||
@@ -12,6 +12,21 @@ configuration associated with the module in Synapse's configuration file.
|
|||||||
See the documentation for the `ModuleApi` class
|
See the documentation for the `ModuleApi` class
|
||||||
[here](https://github.com/matrix-org/synapse/blob/master/synapse/module_api/__init__.py).
|
[here](https://github.com/matrix-org/synapse/blob/master/synapse/module_api/__init__.py).
|
||||||
|
|
||||||
|
## When Synapse runs with several modules configured
|
||||||
|
|
||||||
|
If Synapse is running with other modules configured, the order each module appears in
|
||||||
|
within the `modules` section of the Synapse configuration file might restrict what it can
|
||||||
|
or cannot register. See [this section](index.html#using-multiple-modules) for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
On top of the rules listed in the link above, if a callback returns a value that should
|
||||||
|
cause the current operation to fail (e.g. if a callback checking an event returns with a
|
||||||
|
value that should cause the event to be denied), Synapse will fail the operation and
|
||||||
|
ignore any subsequent callbacks that should have been run after this one.
|
||||||
|
|
||||||
|
The documentation for each callback mentions how Synapse behaves when
|
||||||
|
multiple modules implement it.
|
||||||
|
|
||||||
## Handling the module's configuration
|
## Handling the module's configuration
|
||||||
|
|
||||||
A module can implement the following static method:
|
A module can implement the following static method:
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ such as [Github][github-idp].
|
|||||||
|
|
||||||
[google-idp]: https://developers.google.com/identity/protocols/oauth2/openid-connect
|
[google-idp]: https://developers.google.com/identity/protocols/oauth2/openid-connect
|
||||||
[auth0]: https://auth0.com/
|
[auth0]: https://auth0.com/
|
||||||
|
[authentik]: https://goauthentik.io/
|
||||||
|
[lemonldap]: https://lemonldap-ng.org/
|
||||||
[okta]: https://www.okta.com/
|
[okta]: https://www.okta.com/
|
||||||
[dex-idp]: https://github.com/dexidp/dex
|
[dex-idp]: https://github.com/dexidp/dex
|
||||||
[keycloak-idp]: https://www.keycloak.org/docs/latest/server_admin/#sso-protocols
|
[keycloak-idp]: https://www.keycloak.org/docs/latest/server_admin/#sso-protocols
|
||||||
@@ -209,6 +211,76 @@ oidc_providers:
|
|||||||
display_name_template: "{{ user.name }}"
|
display_name_template: "{{ user.name }}"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Authentik
|
||||||
|
|
||||||
|
[Authentik][authentik] is an open-source IdP solution.
|
||||||
|
|
||||||
|
1. Create a provider in Authentik, with type OAuth2/OpenID.
|
||||||
|
2. The parameters are:
|
||||||
|
- Client Type: Confidential
|
||||||
|
- JWT Algorithm: RS256
|
||||||
|
- Scopes: OpenID, Email and Profile
|
||||||
|
- RSA Key: Select any available key
|
||||||
|
- Redirect URIs: `[synapse public baseurl]/_synapse/client/oidc/callback`
|
||||||
|
3. Create an application for synapse in Authentik and link it to the provider.
|
||||||
|
4. Note the slug of your application, Client ID and Client Secret.
|
||||||
|
|
||||||
|
Synapse config:
|
||||||
|
```yaml
|
||||||
|
oidc_providers:
|
||||||
|
- idp_id: authentik
|
||||||
|
idp_name: authentik
|
||||||
|
discover: true
|
||||||
|
issuer: "https://your.authentik.example.org/application/o/your-app-slug/" # TO BE FILLED: domain and slug
|
||||||
|
client_id: "your client id" # TO BE FILLED
|
||||||
|
client_secret: "your client secret" # TO BE FILLED
|
||||||
|
scopes:
|
||||||
|
- "openid"
|
||||||
|
- "profile"
|
||||||
|
- "email"
|
||||||
|
user_mapping_provider:
|
||||||
|
config:
|
||||||
|
localpart_template: "{{ user.preferred_username }}}"
|
||||||
|
display_name_template: "{{ user.preferred_username|capitalize }}" # TO BE FILLED: If your users have names in Authentik and you want those in Synapse, this should be replaced with user.name|capitalize.
|
||||||
|
```
|
||||||
|
|
||||||
|
### LemonLDAP
|
||||||
|
|
||||||
|
[LemonLDAP::NG][lemonldap] is an open-source IdP solution.
|
||||||
|
|
||||||
|
1. Create an OpenID Connect Relying Parties in LemonLDAP::NG
|
||||||
|
2. The parameters are:
|
||||||
|
- Client ID under the basic menu of the new Relying Parties (`Options > Basic >
|
||||||
|
Client ID`)
|
||||||
|
- Client secret (`Options > Basic > Client secret`)
|
||||||
|
- JWT Algorithm: RS256 within the security menu of the new Relying Parties
|
||||||
|
(`Options > Security > ID Token signature algorithm` and `Options > Security >
|
||||||
|
Access Token signature algorithm`)
|
||||||
|
- Scopes: OpenID, Email and Profile
|
||||||
|
- Allowed redirection addresses for login (`Options > Basic > Allowed
|
||||||
|
redirection addresses for login` ) :
|
||||||
|
`[synapse public baseurl]/_synapse/client/oidc/callback`
|
||||||
|
|
||||||
|
Synapse config:
|
||||||
|
```yaml
|
||||||
|
oidc_providers:
|
||||||
|
- idp_id: lemonldap
|
||||||
|
idp_name: lemonldap
|
||||||
|
discover: true
|
||||||
|
issuer: "https://auth.example.org/" # TO BE FILLED: replace with your domain
|
||||||
|
client_id: "your client id" # TO BE FILLED
|
||||||
|
client_secret: "your client secret" # TO BE FILLED
|
||||||
|
scopes:
|
||||||
|
- "openid"
|
||||||
|
- "profile"
|
||||||
|
- "email"
|
||||||
|
user_mapping_provider:
|
||||||
|
config:
|
||||||
|
localpart_template: "{{ user.preferred_username }}}"
|
||||||
|
# TO BE FILLED: If your users have names in LemonLDAP::NG and you want those in Synapse, this should be replaced with user.name|capitalize or any valid filter.
|
||||||
|
display_name_template: "{{ user.preferred_username|capitalize }}"
|
||||||
|
```
|
||||||
|
|
||||||
### GitHub
|
### GitHub
|
||||||
|
|
||||||
[GitHub][github-idp] is a bit special as it is not an OpenID Connect compliant provider, but
|
[GitHub][github-idp] is a bit special as it is not an OpenID Connect compliant provider, but
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
<h2 style="color:red">
|
||||||
|
This page of the Synapse documentation is now deprecated. For up to date
|
||||||
|
documentation on setting up or writing a password auth provider module, please see
|
||||||
|
<a href="modules.md">this page</a>.
|
||||||
|
</h2>
|
||||||
|
|
||||||
# Password auth provider modules
|
# Password auth provider modules
|
||||||
|
|
||||||
Password auth providers offer a way for server administrators to
|
Password auth providers offer a way for server administrators to
|
||||||
|
|||||||
@@ -29,16 +29,20 @@ connect to a postgres database.
|
|||||||
|
|
||||||
Assuming your PostgreSQL database user is called `postgres`, first authenticate as the database user with:
|
Assuming your PostgreSQL database user is called `postgres`, first authenticate as the database user with:
|
||||||
|
|
||||||
su - postgres
|
```sh
|
||||||
# Or, if your system uses sudo to get administrative rights
|
su - postgres
|
||||||
sudo -u postgres bash
|
# Or, if your system uses sudo to get administrative rights
|
||||||
|
sudo -u postgres bash
|
||||||
|
```
|
||||||
|
|
||||||
Then, create a postgres user and a database with:
|
Then, create a postgres user and a database with:
|
||||||
|
|
||||||
# this will prompt for a password for the new user
|
```sh
|
||||||
createuser --pwprompt synapse_user
|
# this will prompt for a password for the new user
|
||||||
|
createuser --pwprompt synapse_user
|
||||||
|
|
||||||
createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse
|
createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse
|
||||||
|
```
|
||||||
|
|
||||||
The above will create a user called `synapse_user`, and a database called
|
The above will create a user called `synapse_user`, and a database called
|
||||||
`synapse`.
|
`synapse`.
|
||||||
@@ -145,20 +149,26 @@ Firstly, shut down the currently running synapse server and copy its
|
|||||||
database file (typically `homeserver.db`) to another location. Once the
|
database file (typically `homeserver.db`) to another location. Once the
|
||||||
copy is complete, restart synapse. For instance:
|
copy is complete, restart synapse. For instance:
|
||||||
|
|
||||||
./synctl stop
|
```sh
|
||||||
cp homeserver.db homeserver.db.snapshot
|
./synctl stop
|
||||||
./synctl start
|
cp homeserver.db homeserver.db.snapshot
|
||||||
|
./synctl start
|
||||||
|
```
|
||||||
|
|
||||||
Copy the old config file into a new config file:
|
Copy the old config file into a new config file:
|
||||||
|
|
||||||
cp homeserver.yaml homeserver-postgres.yaml
|
```sh
|
||||||
|
cp homeserver.yaml homeserver-postgres.yaml
|
||||||
|
```
|
||||||
|
|
||||||
Edit the database section as described in the section *Synapse config*
|
Edit the database section as described in the section *Synapse config*
|
||||||
above and with the SQLite snapshot located at `homeserver.db.snapshot`
|
above and with the SQLite snapshot located at `homeserver.db.snapshot`
|
||||||
simply run:
|
simply run:
|
||||||
|
|
||||||
synapse_port_db --sqlite-database homeserver.db.snapshot \
|
```sh
|
||||||
--postgres-config homeserver-postgres.yaml
|
synapse_port_db --sqlite-database homeserver.db.snapshot \
|
||||||
|
--postgres-config homeserver-postgres.yaml
|
||||||
|
```
|
||||||
|
|
||||||
The flag `--curses` displays a coloured curses progress UI.
|
The flag `--curses` displays a coloured curses progress UI.
|
||||||
|
|
||||||
@@ -170,16 +180,20 @@ To complete the conversion shut down the synapse server and run the port
|
|||||||
script one last time, e.g. if the SQLite database is at `homeserver.db`
|
script one last time, e.g. if the SQLite database is at `homeserver.db`
|
||||||
run:
|
run:
|
||||||
|
|
||||||
synapse_port_db --sqlite-database homeserver.db \
|
```sh
|
||||||
--postgres-config homeserver-postgres.yaml
|
synapse_port_db --sqlite-database homeserver.db \
|
||||||
|
--postgres-config homeserver-postgres.yaml
|
||||||
|
```
|
||||||
|
|
||||||
Once that has completed, change the synapse config to point at the
|
Once that has completed, change the synapse config to point at the
|
||||||
PostgreSQL database configuration file `homeserver-postgres.yaml`:
|
PostgreSQL database configuration file `homeserver-postgres.yaml`:
|
||||||
|
|
||||||
./synctl stop
|
```sh
|
||||||
mv homeserver.yaml homeserver-old-sqlite.yaml
|
./synctl stop
|
||||||
mv homeserver-postgres.yaml homeserver.yaml
|
mv homeserver.yaml homeserver-old-sqlite.yaml
|
||||||
./synctl start
|
mv homeserver-postgres.yaml homeserver.yaml
|
||||||
|
./synctl start
|
||||||
|
```
|
||||||
|
|
||||||
Synapse should now be running against PostgreSQL.
|
Synapse should now be running against PostgreSQL.
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ to proxied traffic.)
|
|||||||
|
|
||||||
### nginx
|
### nginx
|
||||||
|
|
||||||
```
|
```nginx
|
||||||
server {
|
server {
|
||||||
listen 443 ssl http2;
|
listen 443 ssl http2;
|
||||||
listen [::]:443 ssl http2;
|
listen [::]:443 ssl http2;
|
||||||
@@ -141,7 +141,7 @@ matrix.example.com {
|
|||||||
|
|
||||||
### Apache
|
### Apache
|
||||||
|
|
||||||
```
|
```apache
|
||||||
<VirtualHost *:443>
|
<VirtualHost *:443>
|
||||||
SSLEngine on
|
SSLEngine on
|
||||||
ServerName matrix.example.com
|
ServerName matrix.example.com
|
||||||
@@ -170,7 +170,7 @@ matrix.example.com {
|
|||||||
|
|
||||||
**NOTE 2**: It appears that Synapse is currently incompatible with the ModSecurity module for Apache (`mod_security2`). If you need it enabled for other services on your web server, you can disable it for Synapse's two VirtualHosts by including the following lines before each of the two `</VirtualHost>` above:
|
**NOTE 2**: It appears that Synapse is currently incompatible with the ModSecurity module for Apache (`mod_security2`). If you need it enabled for other services on your web server, you can disable it for Synapse's two VirtualHosts by including the following lines before each of the two `</VirtualHost>` above:
|
||||||
|
|
||||||
```
|
```apache
|
||||||
<IfModule security2_module>
|
<IfModule security2_module>
|
||||||
SecRuleEngine off
|
SecRuleEngine off
|
||||||
</IfModule>
|
</IfModule>
|
||||||
@@ -188,7 +188,7 @@ frontend https
|
|||||||
http-request set-header X-Forwarded-For %[src]
|
http-request set-header X-Forwarded-For %[src]
|
||||||
|
|
||||||
# Matrix client traffic
|
# Matrix client traffic
|
||||||
acl matrix-host hdr(host) -i matrix.example.com
|
acl matrix-host hdr(host) -i matrix.example.com matrix.example.com:443
|
||||||
acl matrix-path path_beg /_matrix
|
acl matrix-path path_beg /_matrix
|
||||||
acl matrix-path path_beg /_synapse/client
|
acl matrix-path path_beg /_synapse/client
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user