mirror of
https://github.com/element-hq/synapse.git
synced 2025-12-07 01:20:16 +00:00
Compare commits
225 Commits
v1.44.0rc2
...
dmr/valida
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
551b28f307 | ||
|
|
263de78dff | ||
|
|
54cd97b012 | ||
|
|
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 | ||
|
|
19d5dc6931 | ||
|
|
8d46fac98e | ||
|
|
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 | ||
|
|
3aefc7b66d | ||
|
|
428174f902 | ||
|
|
a19aa8b162 | ||
|
|
176aa55fd5 | ||
|
|
94b620a5ed | ||
|
|
8cef1ab2ac | ||
|
|
5279b9161b | ||
|
|
2be0fde3d6 | ||
|
|
9fd057b8c5 | ||
|
|
0f007fe009 | ||
|
|
8aaa4b7b5d | ||
|
|
2622b28c5c | ||
|
|
eb2c7e51c4 | ||
|
|
c3ccad7785 |
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
|
||||||
58
.github/workflows/tests.yml
vendored
58
.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
|
||||||
@@ -244,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
|
||||||
@@ -256,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
|
||||||
|
|||||||
227
CHANGES.md
227
CHANGES.md
@@ -1,3 +1,230 @@
|
|||||||
|
Synapse 1.46.0rc1 (2021-10-27)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
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))
|
||||||
|
|
||||||
|
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)
|
Synapse 1.44.0rc2 (2021-09-30)
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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/10097.bugfix
Normal file
1
changelog.d/10097.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix a long-standing bug which allowed hidden devices to receive to-device messages, resulting in unnecessary database bloat.
|
||||||
1
changelog.d/10943.misc
Normal file
1
changelog.d/10943.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type annotations for the `log_function` decorator.
|
||||||
1
changelog.d/10969.bugfix
Normal file
1
changelog.d/10969.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix a long-standing bug where messages in the `device_inbox` table for deleted devices would persist indefinitely. Contributed by @dklimpel and @JohannesKleine.
|
||||||
1
changelog.d/11033.bugfix
Normal file
1
changelog.d/11033.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Do not accept events if a third-party rule module API callback raises an exception.
|
||||||
1
changelog.d/11097.feature
Normal file
1
changelog.d/11097.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Advertise support for Client-Server API r0.6.1.
|
||||||
1
changelog.d/11126.feature
Normal file
1
changelog.d/11126.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add an `on_new_event` third-party rules callback to allow Synapse modules to act after an event has been sent into a room.
|
||||||
1
changelog.d/11128.doc
Normal file
1
changelog.d/11128.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Improve example HAProxy config in the docs to properly handle host headers with port information. This is required for federation over port 443 to work correctly.
|
||||||
1
changelog.d/11129.bugfix
Normal file
1
changelog.d/11129.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix long-standing bug where verification requests could fail in certain cases if whitelist was in place but did not include your own homeserver.
|
||||||
1
changelog.d/11147.feature
Normal file
1
changelog.d/11147.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add a module API method to update a user's membership in a room.
|
||||||
1
changelog.d/11151.doc
Normal file
1
changelog.d/11151.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add documentation for using Authentik as an OpenID Connect Identity Provider. Contributed by @samip5.
|
||||||
1
changelog.d/11164.misc
Normal file
1
changelog.d/11164.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add type hints so that `synapse.http` passes `mypy` checks.
|
||||||
1
changelog.d/11166.misc
Normal file
1
changelog.d/11166.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Update scripts to pass Shellcheck lints.
|
||||||
1
changelog.d/11171.misc
Normal file
1
changelog.d/11171.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add knock information in admin export. Contributed by Rafael Gonçalves.
|
||||||
1
changelog.d/11178.feature
Normal file
1
changelog.d/11178.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add metrics for thread pool usage.
|
||||||
1
changelog.d/11179.misc
Normal file
1
changelog.d/11179.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
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.
|
||||||
1
changelog.d/11187.feature
Normal file
1
changelog.d/11187.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Support the stable room type field for [MSC3288](https://github.com/matrix-org/matrix-doc/pull/3288).
|
||||||
1
changelog.d/11191.bugfix
Normal file
1
changelog.d/11191.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix a bug introduced in Synapse 1.45.0 which prevented the `synapse_review_recent_signups` script from running. Contributed by @samuel-p.
|
||||||
1
changelog.d/11194.misc
Normal file
1
changelog.d/11194.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Refactor `Filter` to check different fields depending on the data type.
|
||||||
1
changelog.d/11198.doc
Normal file
1
changelog.d/11198.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Clarify lack of support for Windows.
|
||||||
1
changelog.d/11204.feature
Normal file
1
changelog.d/11204.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add a module API method to retrieve the current state of a room.
|
||||||
1
changelog.d/11205.misc
Normal file
1
changelog.d/11205.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Improve type hints for the relations datastore.
|
||||||
1
changelog.d/11206.removal
Normal file
1
changelog.d/11206.removal
Normal file
@@ -0,0 +1 @@
|
|||||||
|
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.
|
||||||
1
changelog.d/11209.docker
Normal file
1
changelog.d/11209.docker
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Avoid changing userid when started as a non-root user, and no explicit `UID` is set.
|
||||||
1
changelog.d/11211.feature
Normal file
1
changelog.d/11211.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add support for serving `/.well-known/matrix/server` files, to redirect federation traffic to port 443.
|
||||||
1
changelog.d/11212.bugfix
Normal file
1
changelog.d/11212.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix a long-standing bug where messages in the `device_inbox` table for deleted devices would persist indefinitely. Contributed by @dklimpel and @JohannesKleine.
|
||||||
1
changelog.d/11213.removal
Normal file
1
changelog.d/11213.removal
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Remove deprecated admin API to delete rooms (`POST /_synapse/admin/v1/rooms/<room_id>/delete`).
|
||||||
1
changelog.d/11221.doc
Normal file
1
changelog.d/11221.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Improve code formatting and fix a few typos in docs. Contributed by @sumnerevans at Beeper.
|
||||||
1
changelog.d/11226.misc
Normal file
1
changelog.d/11226.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix a bug in unit test `test_block_room_and_not_purge`.
|
||||||
1
changelog.d/11232.misc
Normal file
1
changelog.d/11232.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
TODO: write a proper changelog.
|
||||||
@@ -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
|
||||||
|
|||||||
10
debian/build_virtualenv
vendored
10
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
|
||||||
;;
|
;;
|
||||||
@@ -56,8 +56,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 +98,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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
52
debian/changelog
vendored
52
debian/changelog
vendored
@@ -1,3 +1,55 @@
|
|||||||
|
matrix-synapse-py3 (1.47.0+nmu1) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
* Update scripts to pass Shellcheck lints.
|
||||||
|
|
||||||
|
-- root <root@cae79a6e79d7> Fri, 22 Oct 2021 22:20:31 +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
|
matrix-synapse-py3 (1.44.0~rc2) stable; urgency=medium
|
||||||
|
|
||||||
* New synapse release 1.44.0~rc2.
|
* New synapse release 1.44.0~rc2.
|
||||||
|
|||||||
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"
|
||||||
|
|||||||
5
debian/test/provision.sh
vendored
5
debian/test/provision.sh
vendored
@@ -10,7 +10,7 @@ set -e
|
|||||||
apt-get update
|
apt-get update
|
||||||
apt-get install -y lsb-release
|
apt-get install -y lsb-release
|
||||||
|
|
||||||
deb=`ls /debs/matrix-synapse-py3_*+$(lsb_release -cs)*.deb | sort | tail -n1`
|
deb=$(find /debs -name "matrix-synapse-py3_*+$(lsb_release -cs)*.deb" | sort | tail -n1)
|
||||||
|
|
||||||
debconf-set-selections <<EOF
|
debconf-set-selections <<EOF
|
||||||
matrix-synapse matrix-synapse/report-stats boolean false
|
matrix-synapse matrix-synapse/report-stats boolean false
|
||||||
@@ -19,5 +19,6 @@ EOF
|
|||||||
|
|
||||||
dpkg -i "$deb"
|
dpkg -i "$deb"
|
||||||
|
|
||||||
sed -i -e '/port: 8...$/{s/8448/18448/; s/8008/18008/}' -e '$aregistration_shared_secret: secret' /etc/matrix-synapse/homeserver.yaml
|
sed -i -e 's/port: 8448$/port: 18448/; s/port: 8008$/port: 18008' /etc/matrix-synapse/homeserver.yaml
|
||||||
|
echo 'registration_shared_secret: secret' >> /etc/matrix-synapse/homeserver.yaml
|
||||||
systemctl restart matrix-synapse
|
systemctl restart matrix-synapse
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,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 +170,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 +208,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 +224,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": [
|
||||||
{
|
{
|
||||||
@@ -520,16 +520,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
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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], 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,37 +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.
|
||||||
|
|
||||||
### `user_may_create_room_with_invites`
|
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
|
||||||
```python
|
callback that does not return `True` will be used. If this happens, Synapse will not call
|
||||||
async def user_may_create_room_with_invites(
|
any of the subsequent implementations of this callback.
|
||||||
user: str,
|
|
||||||
invites: List[str],
|
|
||||||
threepid_invites: List[Dict[str, str]],
|
|
||||||
) -> bool
|
|
||||||
```
|
|
||||||
|
|
||||||
Called when processing a room creation request (right after `user_may_create_room`).
|
|
||||||
The module is given the Matrix user ID of the user trying to create a room, as well as a
|
|
||||||
list of Matrix users to invite and a list of third-party identifiers (3PID, e.g. email
|
|
||||||
addresses) to invite.
|
|
||||||
|
|
||||||
An invited Matrix user to invite is represented by their Matrix user IDs, and an invited
|
|
||||||
3PIDs is represented by a dict that includes the 3PID medium (e.g. "email") through its
|
|
||||||
`medium` key and its address (e.g. "alice@example.com") through its `address` key.
|
|
||||||
|
|
||||||
See [the Matrix specification](https://matrix.org/docs/spec/appendices#pid-types) for more
|
|
||||||
information regarding third-party identifiers.
|
|
||||||
|
|
||||||
If no invite and/or 3PID invite were specified in the room creation request, the
|
|
||||||
corresponding list(s) will be empty.
|
|
||||||
|
|
||||||
**Note**: This callback is not called when a room is cloned (e.g. during a room upgrade)
|
|
||||||
since no invites are sent when cloning a room. To cover this case, modules also need to
|
|
||||||
implement `user_may_create_room`.
|
|
||||||
|
|
||||||
### `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
|
||||||
```
|
```
|
||||||
@@ -77,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
|
||||||
```
|
```
|
||||||
@@ -87,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
|
||||||
```
|
```
|
||||||
@@ -104,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],
|
||||||
@@ -129,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",
|
||||||
@@ -141,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
|
||||||
|
|||||||
@@ -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,7 @@ 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/
|
||||||
[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 +210,39 @@ 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.
|
||||||
|
```
|
||||||
|
|
||||||
### 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
|
||||||
|
|
||||||
|
|||||||
@@ -93,6 +93,24 @@ pid_file: DATADIR/homeserver.pid
|
|||||||
#
|
#
|
||||||
#public_baseurl: https://example.com/
|
#public_baseurl: https://example.com/
|
||||||
|
|
||||||
|
# Uncomment the following to tell other servers to send federation traffic on
|
||||||
|
# port 443.
|
||||||
|
#
|
||||||
|
# By default, other servers will try to reach our server on port 8448, which can
|
||||||
|
# be inconvenient in some environments.
|
||||||
|
#
|
||||||
|
# Provided 'https://<server_name>/' on port 443 is routed to Synapse, this
|
||||||
|
# option configures Synapse to serve a file at
|
||||||
|
# 'https://<server_name>/.well-known/matrix/server'. This will tell other
|
||||||
|
# servers to send traffic to port 443 instead.
|
||||||
|
#
|
||||||
|
# See https://matrix-org.github.io/synapse/latest/delegate.html for more
|
||||||
|
# information.
|
||||||
|
#
|
||||||
|
# Defaults to 'false'.
|
||||||
|
#
|
||||||
|
#serve_server_wellknown: true
|
||||||
|
|
||||||
# Set the soft limit on the number of file descriptors synapse can use
|
# Set the soft limit on the number of file descriptors synapse can use
|
||||||
# Zero is used to indicate synapse should set the soft limit to the
|
# Zero is used to indicate synapse should set the soft limit to the
|
||||||
# hard limit.
|
# hard limit.
|
||||||
@@ -472,6 +490,48 @@ limit_remote_rooms:
|
|||||||
#
|
#
|
||||||
#user_ips_max_age: 14d
|
#user_ips_max_age: 14d
|
||||||
|
|
||||||
|
# Inhibits the /requestToken endpoints from returning an error that might leak
|
||||||
|
# information about whether an e-mail address is in use or not on this
|
||||||
|
# homeserver.
|
||||||
|
# Note that for some endpoints the error situation is the e-mail already being
|
||||||
|
# used, and for others the error is entering the e-mail being unused.
|
||||||
|
# If this option is enabled, instead of returning an error, these endpoints will
|
||||||
|
# act as if no error happened and return a fake session ID ('sid') to clients.
|
||||||
|
#
|
||||||
|
#request_token_inhibit_3pid_errors: true
|
||||||
|
|
||||||
|
# A list of domains that the domain portion of 'next_link' parameters
|
||||||
|
# must match.
|
||||||
|
#
|
||||||
|
# This parameter is optionally provided by clients while requesting
|
||||||
|
# validation of an email or phone number, and maps to a link that
|
||||||
|
# users will be automatically redirected to after validation
|
||||||
|
# succeeds. Clients can make use this parameter to aid the validation
|
||||||
|
# process.
|
||||||
|
#
|
||||||
|
# The whitelist is applied whether the homeserver or an
|
||||||
|
# identity server is handling validation.
|
||||||
|
#
|
||||||
|
# The default value is no whitelist functionality; all domains are
|
||||||
|
# allowed. Setting this value to an empty list will instead disallow
|
||||||
|
# all domains.
|
||||||
|
#
|
||||||
|
#next_link_domain_whitelist: ["matrix.org"]
|
||||||
|
|
||||||
|
# Templates to use when generating email or HTML page contents.
|
||||||
|
#
|
||||||
|
templates:
|
||||||
|
# Directory in which Synapse will try to find template files to use to generate
|
||||||
|
# email or HTML page contents.
|
||||||
|
# If not set, or a file is not found within the template directory, a default
|
||||||
|
# template from within the Synapse package will be used.
|
||||||
|
#
|
||||||
|
# See https://matrix-org.github.io/synapse/latest/templates.html for more
|
||||||
|
# information about using custom templates.
|
||||||
|
#
|
||||||
|
#custom_template_directory: /path/to/custom/templates/
|
||||||
|
|
||||||
|
|
||||||
# Message retention policy at the server level.
|
# Message retention policy at the server level.
|
||||||
#
|
#
|
||||||
# Room admins and mods can define a retention period for their rooms using the
|
# Room admins and mods can define a retention period for their rooms using the
|
||||||
@@ -541,47 +601,6 @@ retention:
|
|||||||
# - shortest_max_lifetime: 3d
|
# - shortest_max_lifetime: 3d
|
||||||
# interval: 1d
|
# interval: 1d
|
||||||
|
|
||||||
# Inhibits the /requestToken endpoints from returning an error that might leak
|
|
||||||
# information about whether an e-mail address is in use or not on this
|
|
||||||
# homeserver.
|
|
||||||
# Note that for some endpoints the error situation is the e-mail already being
|
|
||||||
# used, and for others the error is entering the e-mail being unused.
|
|
||||||
# If this option is enabled, instead of returning an error, these endpoints will
|
|
||||||
# act as if no error happened and return a fake session ID ('sid') to clients.
|
|
||||||
#
|
|
||||||
#request_token_inhibit_3pid_errors: true
|
|
||||||
|
|
||||||
# A list of domains that the domain portion of 'next_link' parameters
|
|
||||||
# must match.
|
|
||||||
#
|
|
||||||
# This parameter is optionally provided by clients while requesting
|
|
||||||
# validation of an email or phone number, and maps to a link that
|
|
||||||
# users will be automatically redirected to after validation
|
|
||||||
# succeeds. Clients can make use this parameter to aid the validation
|
|
||||||
# process.
|
|
||||||
#
|
|
||||||
# The whitelist is applied whether the homeserver or an
|
|
||||||
# identity server is handling validation.
|
|
||||||
#
|
|
||||||
# The default value is no whitelist functionality; all domains are
|
|
||||||
# allowed. Setting this value to an empty list will instead disallow
|
|
||||||
# all domains.
|
|
||||||
#
|
|
||||||
#next_link_domain_whitelist: ["matrix.org"]
|
|
||||||
|
|
||||||
# Templates to use when generating email or HTML page contents.
|
|
||||||
#
|
|
||||||
templates:
|
|
||||||
# Directory in which Synapse will try to find template files to use to generate
|
|
||||||
# email or HTML page contents.
|
|
||||||
# If not set, or a file is not found within the template directory, a default
|
|
||||||
# template from within the Synapse package will be used.
|
|
||||||
#
|
|
||||||
# See https://matrix-org.github.io/synapse/latest/templates.html for more
|
|
||||||
# information about using custom templates.
|
|
||||||
#
|
|
||||||
#custom_template_directory: /path/to/custom/templates/
|
|
||||||
|
|
||||||
|
|
||||||
## TLS ##
|
## TLS ##
|
||||||
|
|
||||||
@@ -2260,34 +2279,6 @@ email:
|
|||||||
#email_validation: "[%(server_name)s] Validate your email"
|
#email_validation: "[%(server_name)s] Validate your email"
|
||||||
|
|
||||||
|
|
||||||
# Password providers allow homeserver administrators to integrate
|
|
||||||
# their Synapse installation with existing authentication methods
|
|
||||||
# ex. LDAP, external tokens, etc.
|
|
||||||
#
|
|
||||||
# For more information and known implementations, please see
|
|
||||||
# https://matrix-org.github.io/synapse/latest/password_auth_providers.html
|
|
||||||
#
|
|
||||||
# Note: instances wishing to use SAML or CAS authentication should
|
|
||||||
# instead use the `saml2_config` or `cas_config` options,
|
|
||||||
# respectively.
|
|
||||||
#
|
|
||||||
password_providers:
|
|
||||||
# # Example config for an LDAP auth provider
|
|
||||||
# - module: "ldap_auth_provider.LdapAuthProvider"
|
|
||||||
# config:
|
|
||||||
# enabled: true
|
|
||||||
# uri: "ldap://ldap.example.com:389"
|
|
||||||
# start_tls: true
|
|
||||||
# base: "ou=users,dc=example,dc=com"
|
|
||||||
# attributes:
|
|
||||||
# uid: "cn"
|
|
||||||
# mail: "email"
|
|
||||||
# name: "givenName"
|
|
||||||
# #bind_dn:
|
|
||||||
# #bind_password:
|
|
||||||
# #filter: "(objectClass=posixAccount)"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Push ##
|
## Push ##
|
||||||
|
|
||||||
|
|||||||
@@ -356,12 +356,14 @@ make install
|
|||||||
|
|
||||||
##### Windows
|
##### Windows
|
||||||
|
|
||||||
If you wish to run or develop Synapse on Windows, the Windows Subsystem For
|
Running Synapse natively on Windows is not officially supported.
|
||||||
Linux provides a Linux environment on Windows 10 which is capable of using the
|
|
||||||
Debian, Fedora, or source installation methods. More information about WSL can
|
If you wish to run or develop Synapse on Windows, the Windows Subsystem for
|
||||||
be found at <https://docs.microsoft.com/en-us/windows/wsl/install-win10> for
|
Linux provides a Linux environment which is capable of using the Debian, Fedora,
|
||||||
Windows 10 and <https://docs.microsoft.com/en-us/windows/wsl/install-on-server>
|
or source installation methods. More information about WSL can be found at
|
||||||
for Windows Server.
|
<https://docs.microsoft.com/en-us/windows/wsl/install> for Windows 10/11 and
|
||||||
|
<https://docs.microsoft.com/en-us/windows/wsl/install-on-server> for
|
||||||
|
Windows Server.
|
||||||
|
|
||||||
## Setting up Synapse
|
## Setting up Synapse
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,9 @@ Finally, to actually run your worker-based synapse, you must pass synctl the `-a
|
|||||||
commandline option to tell it to operate on all the worker configurations found
|
commandline option to tell it to operate on all the worker configurations found
|
||||||
in the given directory, e.g.:
|
in the given directory, e.g.:
|
||||||
|
|
||||||
synctl -a $CONFIG/workers start
|
```sh
|
||||||
|
synctl -a $CONFIG/workers start
|
||||||
|
```
|
||||||
|
|
||||||
Currently one should always restart all workers when restarting or upgrading
|
Currently one should always restart all workers when restarting or upgrading
|
||||||
synapse, unless you explicitly know it's safe not to. For instance, restarting
|
synapse, unless you explicitly know it's safe not to. For instance, restarting
|
||||||
@@ -29,4 +31,6 @@ notifications.
|
|||||||
|
|
||||||
To manipulate a specific worker, you pass the -w option to synctl:
|
To manipulate a specific worker, you pass the -w option to synctl:
|
||||||
|
|
||||||
synctl -w $CONFIG/workers/worker1.yaml restart
|
```sh
|
||||||
|
synctl -w $CONFIG/workers/worker1.yaml restart
|
||||||
|
```
|
||||||
|
|||||||
@@ -40,7 +40,9 @@ This will install and start a systemd service called `coturn`.
|
|||||||
|
|
||||||
1. Configure it:
|
1. Configure it:
|
||||||
|
|
||||||
./configure
|
```sh
|
||||||
|
./configure
|
||||||
|
```
|
||||||
|
|
||||||
You may need to install `libevent2`: if so, you should do so in
|
You may need to install `libevent2`: if so, you should do so in
|
||||||
the way recommended by your operating system. You can ignore
|
the way recommended by your operating system. You can ignore
|
||||||
@@ -49,22 +51,28 @@ This will install and start a systemd service called `coturn`.
|
|||||||
|
|
||||||
1. Build and install it:
|
1. Build and install it:
|
||||||
|
|
||||||
make
|
```sh
|
||||||
make install
|
make
|
||||||
|
make install
|
||||||
|
```
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
1. Create or edit the config file in `/etc/turnserver.conf`. The relevant
|
1. Create or edit the config file in `/etc/turnserver.conf`. The relevant
|
||||||
lines, with example values, are:
|
lines, with example values, are:
|
||||||
|
|
||||||
use-auth-secret
|
```
|
||||||
static-auth-secret=[your secret key here]
|
use-auth-secret
|
||||||
realm=turn.myserver.org
|
static-auth-secret=[your secret key here]
|
||||||
|
realm=turn.myserver.org
|
||||||
|
```
|
||||||
|
|
||||||
See `turnserver.conf` for explanations of the options. One way to generate
|
See `turnserver.conf` for explanations of the options. One way to generate
|
||||||
the `static-auth-secret` is with `pwgen`:
|
the `static-auth-secret` is with `pwgen`:
|
||||||
|
|
||||||
pwgen -s 64 1
|
```sh
|
||||||
|
pwgen -s 64 1
|
||||||
|
```
|
||||||
|
|
||||||
A `realm` must be specified, but its value is somewhat arbitrary. (It is
|
A `realm` must be specified, but its value is somewhat arbitrary. (It is
|
||||||
sent to clients as part of the authentication flow.) It is conventional to
|
sent to clients as part of the authentication flow.) It is conventional to
|
||||||
@@ -73,7 +81,9 @@ This will install and start a systemd service called `coturn`.
|
|||||||
1. You will most likely want to configure coturn to write logs somewhere. The
|
1. You will most likely want to configure coturn to write logs somewhere. The
|
||||||
easiest way is normally to send them to the syslog:
|
easiest way is normally to send them to the syslog:
|
||||||
|
|
||||||
syslog
|
```sh
|
||||||
|
syslog
|
||||||
|
```
|
||||||
|
|
||||||
(in which case, the logs will be available via `journalctl -u coturn` on a
|
(in which case, the logs will be available via `journalctl -u coturn` on a
|
||||||
systemd system). Alternatively, coturn can be configured to write to a
|
systemd system). Alternatively, coturn can be configured to write to a
|
||||||
@@ -83,31 +93,35 @@ This will install and start a systemd service called `coturn`.
|
|||||||
connect to arbitrary IP addresses and ports. The following configuration is
|
connect to arbitrary IP addresses and ports. The following configuration is
|
||||||
suggested as a minimum starting point:
|
suggested as a minimum starting point:
|
||||||
|
|
||||||
# VoIP traffic is all UDP. There is no reason to let users connect to arbitrary TCP endpoints via the relay.
|
```
|
||||||
no-tcp-relay
|
# VoIP traffic is all UDP. There is no reason to let users connect to arbitrary TCP endpoints via the relay.
|
||||||
|
no-tcp-relay
|
||||||
|
|
||||||
# don't let the relay ever try to connect to private IP address ranges within your network (if any)
|
# don't let the relay ever try to connect to private IP address ranges within your network (if any)
|
||||||
# given the turn server is likely behind your firewall, remember to include any privileged public IPs too.
|
# given the turn server is likely behind your firewall, remember to include any privileged public IPs too.
|
||||||
denied-peer-ip=10.0.0.0-10.255.255.255
|
denied-peer-ip=10.0.0.0-10.255.255.255
|
||||||
denied-peer-ip=192.168.0.0-192.168.255.255
|
denied-peer-ip=192.168.0.0-192.168.255.255
|
||||||
denied-peer-ip=172.16.0.0-172.31.255.255
|
denied-peer-ip=172.16.0.0-172.31.255.255
|
||||||
|
|
||||||
# special case the turn server itself so that client->TURN->TURN->client flows work
|
# special case the turn server itself so that client->TURN->TURN->client flows work
|
||||||
allowed-peer-ip=10.0.0.1
|
allowed-peer-ip=10.0.0.1
|
||||||
|
|
||||||
# consider whether you want to limit the quota of relayed streams per user (or total) to avoid risk of DoS.
|
# consider whether you want to limit the quota of relayed streams per user (or total) to avoid risk of DoS.
|
||||||
user-quota=12 # 4 streams per video call, so 12 streams = 3 simultaneous relayed calls per user.
|
user-quota=12 # 4 streams per video call, so 12 streams = 3 simultaneous relayed calls per user.
|
||||||
total-quota=1200
|
total-quota=1200
|
||||||
|
```
|
||||||
|
|
||||||
1. Also consider supporting TLS/DTLS. To do this, add the following settings
|
1. Also consider supporting TLS/DTLS. To do this, add the following settings
|
||||||
to `turnserver.conf`:
|
to `turnserver.conf`:
|
||||||
|
|
||||||
# TLS certificates, including intermediate certs.
|
```
|
||||||
# For Let's Encrypt certificates, use `fullchain.pem` here.
|
# TLS certificates, including intermediate certs.
|
||||||
cert=/path/to/fullchain.pem
|
# For Let's Encrypt certificates, use `fullchain.pem` here.
|
||||||
|
cert=/path/to/fullchain.pem
|
||||||
|
|
||||||
# TLS private key file
|
# TLS private key file
|
||||||
pkey=/path/to/privkey.pem
|
pkey=/path/to/privkey.pem
|
||||||
|
```
|
||||||
|
|
||||||
In this case, replace the `turn:` schemes in the `turn_uri` settings below
|
In this case, replace the `turn:` schemes in the `turn_uri` settings below
|
||||||
with `turns:`.
|
with `turns:`.
|
||||||
@@ -126,7 +140,9 @@ This will install and start a systemd service called `coturn`.
|
|||||||
If you want to try it anyway, you will at least need to tell coturn its
|
If you want to try it anyway, you will at least need to tell coturn its
|
||||||
external IP address:
|
external IP address:
|
||||||
|
|
||||||
external-ip=192.88.99.1
|
```
|
||||||
|
external-ip=192.88.99.1
|
||||||
|
```
|
||||||
|
|
||||||
... and your NAT gateway must forward all of the relayed ports directly
|
... and your NAT gateway must forward all of the relayed ports directly
|
||||||
(eg, port 56789 on the external IP must be always be forwarded to port
|
(eg, port 56789 on the external IP must be always be forwarded to port
|
||||||
@@ -186,7 +202,7 @@ After updating the homeserver configuration, you must restart synapse:
|
|||||||
./synctl restart
|
./synctl restart
|
||||||
```
|
```
|
||||||
* If you use systemd:
|
* If you use systemd:
|
||||||
```
|
```sh
|
||||||
systemctl restart matrix-synapse.service
|
systemctl restart matrix-synapse.service
|
||||||
```
|
```
|
||||||
... and then reload any clients (or wait an hour for them to refresh their
|
... and then reload any clients (or wait an hour for them to refresh their
|
||||||
|
|||||||
198
docs/upgrade.md
198
docs/upgrade.md
@@ -85,6 +85,38 @@ process, for example:
|
|||||||
dpkg -i matrix-synapse-py3_1.3.0+stretch1_amd64.deb
|
dpkg -i matrix-synapse-py3_1.3.0+stretch1_amd64.deb
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Upgrading to v1.47.0
|
||||||
|
|
||||||
|
## Removal of old Room Admin API
|
||||||
|
|
||||||
|
The following admin APIs were deprecated in [Synapse 1.34](https://github.com/matrix-org/synapse/blob/v1.34.0/CHANGES.md#deprecations-and-removals)
|
||||||
|
(released on 2021-05-17) and have now been removed:
|
||||||
|
|
||||||
|
- `POST /_synapse/admin/v1/<room_id>/delete`
|
||||||
|
|
||||||
|
Any scripts still using the above APIs should be converted to use the
|
||||||
|
[Delete Room API](https://matrix-org.github.io/synapse/latest/admin_api/rooms.html#delete-room-api).
|
||||||
|
|
||||||
|
## Deprecation of the `user_may_create_room_with_invites` module callback
|
||||||
|
|
||||||
|
The `user_may_create_room_with_invites` is deprecated and will be removed in a future
|
||||||
|
version of Synapse. Modules implementing this callback can instead implement
|
||||||
|
[`user_may_invite`](https://matrix-org.github.io/synapse/latest/modules/spam_checker_callbacks.html#user_may_invite)
|
||||||
|
and use the [`get_room_state`](https://github.com/matrix-org/synapse/blob/872f23b95fa980a61b0866c1475e84491991fa20/synapse/module_api/__init__.py#L869-L876)
|
||||||
|
module API method to infer whether the invite is happening in the context of creating a
|
||||||
|
room.
|
||||||
|
|
||||||
|
We plan to remove this callback in January 2022.
|
||||||
|
|
||||||
|
# Upgrading to v1.45.0
|
||||||
|
|
||||||
|
## Changes required to media storage provider modules when reading from the Synapse configuration object
|
||||||
|
|
||||||
|
Media storage provider modules that read from the Synapse configuration object (i.e. that
|
||||||
|
read the value of `hs.config.[...]`) now need to specify the configuration section they're
|
||||||
|
reading from. This means that if a module reads the value of e.g. `hs.config.media_store_path`,
|
||||||
|
it needs to replace it with `hs.config.media.media_store_path`.
|
||||||
|
|
||||||
# Upgrading to v1.44.0
|
# Upgrading to v1.44.0
|
||||||
|
|
||||||
## The URL preview cache is no longer mirrored to storage providers
|
## The URL preview cache is no longer mirrored to storage providers
|
||||||
@@ -178,8 +210,8 @@ of this endpoint modifying the media store.
|
|||||||
|
|
||||||
The current third-party rules module interface is deprecated in favour of the new generic
|
The current third-party rules module interface is deprecated in favour of the new generic
|
||||||
modules system introduced in Synapse v1.37.0. Authors of third-party rules modules can refer
|
modules system introduced in Synapse v1.37.0. Authors of third-party rules modules can refer
|
||||||
to [this documentation](modules.md#porting-an-existing-module-that-uses-the-old-interface)
|
to [this documentation](modules/porting_legacy_module.md)
|
||||||
to update their modules. Synapse administrators can refer to [this documentation](modules.md#using-modules)
|
to update their modules. Synapse administrators can refer to [this documentation](modules/index.md)
|
||||||
to update their configuration once the modules they are using have been updated.
|
to update their configuration once the modules they are using have been updated.
|
||||||
|
|
||||||
We plan to remove support for the current third-party rules interface in September 2021.
|
We plan to remove support for the current third-party rules interface in September 2021.
|
||||||
@@ -228,9 +260,9 @@ SQLite databases are unaffected by this change.
|
|||||||
|
|
||||||
The current spam checker interface is deprecated in favour of a new generic modules system.
|
The current spam checker interface is deprecated in favour of a new generic modules system.
|
||||||
Authors of spam checker modules can refer to [this
|
Authors of spam checker modules can refer to [this
|
||||||
documentation](modules.md#porting-an-existing-module-that-uses-the-old-interface)
|
documentation](modules/porting_legacy_module.md
|
||||||
to update their modules. Synapse administrators can refer to [this
|
to update their modules. Synapse administrators can refer to [this
|
||||||
documentation](modules.md#using-modules)
|
documentation](modules/index.md)
|
||||||
to update their configuration once the modules they are using have been updated.
|
to update their configuration once the modules they are using have been updated.
|
||||||
|
|
||||||
We plan to remove support for the current spam checker interface in August 2021.
|
We plan to remove support for the current spam checker interface in August 2021.
|
||||||
@@ -339,24 +371,24 @@ Please ensure your Application Services are up to date.
|
|||||||
## Requirement for X-Forwarded-Proto header
|
## Requirement for X-Forwarded-Proto header
|
||||||
|
|
||||||
When using Synapse with a reverse proxy (in particular, when using the
|
When using Synapse with a reverse proxy (in particular, when using the
|
||||||
[x_forwarded]{.title-ref} option on an HTTP listener), Synapse now
|
`x_forwarded` option on an HTTP listener), Synapse now
|
||||||
expects to receive an [X-Forwarded-Proto]{.title-ref} header on incoming
|
expects to receive an `X-Forwarded-Proto` header on incoming
|
||||||
HTTP requests. If it is not set, Synapse will log a warning on each
|
HTTP requests. If it is not set, Synapse will log a warning on each
|
||||||
received request.
|
received request.
|
||||||
|
|
||||||
To avoid the warning, administrators using a reverse proxy should ensure
|
To avoid the warning, administrators using a reverse proxy should ensure
|
||||||
that the reverse proxy sets [X-Forwarded-Proto]{.title-ref} header to
|
that the reverse proxy sets `X-Forwarded-Proto` header to
|
||||||
[https]{.title-ref} or [http]{.title-ref} to indicate the protocol used
|
`https` or `http` to indicate the protocol used
|
||||||
by the client.
|
by the client.
|
||||||
|
|
||||||
Synapse also requires the [Host]{.title-ref} header to be preserved.
|
Synapse also requires the `Host` header to be preserved.
|
||||||
|
|
||||||
See the [reverse proxy documentation](reverse_proxy.md), where the
|
See the [reverse proxy documentation](reverse_proxy.md), where the
|
||||||
example configurations have been updated to show how to set these
|
example configurations have been updated to show how to set these
|
||||||
headers.
|
headers.
|
||||||
|
|
||||||
(Users of [Caddy](https://caddyserver.com/) are unaffected, since we
|
(Users of [Caddy](https://caddyserver.com/) are unaffected, since we
|
||||||
believe it sets [X-Forwarded-Proto]{.title-ref} by default.)
|
believe it sets `X-Forwarded-Proto` by default.)
|
||||||
|
|
||||||
# Upgrading to v1.27.0
|
# Upgrading to v1.27.0
|
||||||
|
|
||||||
@@ -520,13 +552,13 @@ mapping provider to specify different algorithms, instead of the
|
|||||||
way](<https://matrix.org/docs/spec/appendices#mapping-from-other-character-sets>).
|
way](<https://matrix.org/docs/spec/appendices#mapping-from-other-character-sets>).
|
||||||
|
|
||||||
If your Synapse configuration uses a custom mapping provider
|
If your Synapse configuration uses a custom mapping provider
|
||||||
([oidc_config.user_mapping_provider.module]{.title-ref} is specified and
|
(`oidc_config.user_mapping_provider.module` is specified and
|
||||||
not equal to
|
not equal to
|
||||||
[synapse.handlers.oidc_handler.JinjaOidcMappingProvider]{.title-ref})
|
`synapse.handlers.oidc_handler.JinjaOidcMappingProvider`)
|
||||||
then you *must* ensure that [map_user_attributes]{.title-ref} of the
|
then you *must* ensure that `map_user_attributes` of the
|
||||||
mapping provider performs some normalisation of the
|
mapping provider performs some normalisation of the
|
||||||
[localpart]{.title-ref} returned. To match previous behaviour you can
|
`localpart` returned. To match previous behaviour you can
|
||||||
use the [map_username_to_mxid_localpart]{.title-ref} function provided
|
use the `map_username_to_mxid_localpart` function provided
|
||||||
by Synapse. An example is shown below:
|
by Synapse. An example is shown below:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
@@ -555,7 +587,7 @@ v1.24.0. The Admin API is now only accessible under:
|
|||||||
|
|
||||||
- `/_synapse/admin/v1`
|
- `/_synapse/admin/v1`
|
||||||
|
|
||||||
The only exception is the [/admin/whois]{.title-ref} endpoint, which is
|
The only exception is the `/admin/whois` endpoint, which is
|
||||||
[also available via the client-server
|
[also available via the client-server
|
||||||
API](https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-admin-whois-userid).
|
API](https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-admin-whois-userid).
|
||||||
|
|
||||||
@@ -630,7 +662,7 @@ This page will appear to the user after clicking a password reset link
|
|||||||
that has been emailed to them.
|
that has been emailed to them.
|
||||||
|
|
||||||
To complete password reset, the page must include a way to make a
|
To complete password reset, the page must include a way to make a
|
||||||
[POST]{.title-ref} request to
|
`POST` request to
|
||||||
`/_synapse/client/password_reset/{medium}/submit_token` with the query
|
`/_synapse/client/password_reset/{medium}/submit_token` with the query
|
||||||
parameters from the original link, presented as a URL-encoded form. See
|
parameters from the original link, presented as a URL-encoded form. See
|
||||||
the file itself for more details.
|
the file itself for more details.
|
||||||
@@ -651,18 +683,18 @@ but the parameters are slightly different:
|
|||||||
|
|
||||||
# Upgrading to v1.18.0
|
# Upgrading to v1.18.0
|
||||||
|
|
||||||
## Docker [-py3]{.title-ref} suffix will be removed in future versions
|
## Docker `-py3` suffix will be removed in future versions
|
||||||
|
|
||||||
From 10th August 2020, we will no longer publish Docker images with the
|
From 10th August 2020, we will no longer publish Docker images with the
|
||||||
[-py3]{.title-ref} tag suffix. The images tagged with the
|
`-py3` tag suffix. The images tagged with the
|
||||||
[-py3]{.title-ref} suffix have been identical to the non-suffixed tags
|
`-py3` suffix have been identical to the non-suffixed tags
|
||||||
since release 0.99.0, and the suffix is obsolete.
|
since release 0.99.0, and the suffix is obsolete.
|
||||||
|
|
||||||
On 10th August, we will remove the [latest-py3]{.title-ref} tag.
|
On 10th August, we will remove the `latest-py3` tag.
|
||||||
Existing per-release tags (such as [v1.18.0-py3]{.title-ref}) will not
|
Existing per-release tags (such as `v1.18.0-py3` will not
|
||||||
be removed, but no new [-py3]{.title-ref} tags will be added.
|
be removed, but no new `-py3` tags will be added.
|
||||||
|
|
||||||
Scripts relying on the [-py3]{.title-ref} suffix will need to be
|
Scripts relying on the `-py3` suffix will need to be
|
||||||
updated.
|
updated.
|
||||||
|
|
||||||
## Redis replication is now recommended in lieu of TCP replication
|
## Redis replication is now recommended in lieu of TCP replication
|
||||||
@@ -696,8 +728,8 @@ This will *not* be a problem for Synapse installations which were:
|
|||||||
If completeness of the room directory is a concern, installations which
|
If completeness of the room directory is a concern, installations which
|
||||||
are affected can be repaired as follows:
|
are affected can be repaired as follows:
|
||||||
|
|
||||||
1. Run the following sql from a [psql]{.title-ref} or
|
1. Run the following sql from a `psql` or
|
||||||
[sqlite3]{.title-ref} console:
|
`sqlite3` console:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
INSERT INTO background_updates (update_name, progress_json, depends_on) VALUES
|
INSERT INTO background_updates (update_name, progress_json, depends_on) VALUES
|
||||||
@@ -761,8 +793,8 @@ participating in many rooms.
|
|||||||
of any problems.
|
of any problems.
|
||||||
|
|
||||||
1. As an initial check to see if you will be affected, you can try
|
1. As an initial check to see if you will be affected, you can try
|
||||||
running the following query from the [psql]{.title-ref} or
|
running the following query from the `psql` or
|
||||||
[sqlite3]{.title-ref} console. It is safe to run it while Synapse is
|
`sqlite3` console. It is safe to run it while Synapse is
|
||||||
still running.
|
still running.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
@@ -1154,16 +1186,20 @@ For more information on configuring TLS certificates see the
|
|||||||
For users who have installed Synapse into a virtualenv, we recommend
|
For users who have installed Synapse into a virtualenv, we recommend
|
||||||
doing this by creating a new virtualenv. For example:
|
doing this by creating a new virtualenv. For example:
|
||||||
|
|
||||||
virtualenv -p python3 ~/synapse/env3
|
```sh
|
||||||
source ~/synapse/env3/bin/activate
|
virtualenv -p python3 ~/synapse/env3
|
||||||
pip install matrix-synapse
|
source ~/synapse/env3/bin/activate
|
||||||
|
pip install matrix-synapse
|
||||||
|
```
|
||||||
|
|
||||||
You can then start synapse as normal, having activated the new
|
You can then start synapse as normal, having activated the new
|
||||||
virtualenv:
|
virtualenv:
|
||||||
|
|
||||||
cd ~/synapse
|
```sh
|
||||||
source env3/bin/activate
|
cd ~/synapse
|
||||||
synctl start
|
source env3/bin/activate
|
||||||
|
synctl start
|
||||||
|
```
|
||||||
|
|
||||||
Users who have installed from distribution packages should see the
|
Users who have installed from distribution packages should see the
|
||||||
relevant package documentation. See below for notes on Debian
|
relevant package documentation. See below for notes on Debian
|
||||||
@@ -1175,34 +1211,38 @@ For more information on configuring TLS certificates see the
|
|||||||
`<server>.log.config` file. For example, if your `log.config`
|
`<server>.log.config` file. For example, if your `log.config`
|
||||||
file contains:
|
file contains:
|
||||||
|
|
||||||
handlers:
|
```yaml
|
||||||
file:
|
handlers:
|
||||||
class: logging.handlers.RotatingFileHandler
|
file:
|
||||||
formatter: precise
|
class: logging.handlers.RotatingFileHandler
|
||||||
filename: homeserver.log
|
formatter: precise
|
||||||
maxBytes: 104857600
|
filename: homeserver.log
|
||||||
backupCount: 10
|
maxBytes: 104857600
|
||||||
filters: [context]
|
backupCount: 10
|
||||||
console:
|
filters: [context]
|
||||||
class: logging.StreamHandler
|
console:
|
||||||
formatter: precise
|
class: logging.StreamHandler
|
||||||
filters: [context]
|
formatter: precise
|
||||||
|
filters: [context]
|
||||||
|
```
|
||||||
|
|
||||||
Then you should update this to be:
|
Then you should update this to be:
|
||||||
|
|
||||||
handlers:
|
```yaml
|
||||||
file:
|
handlers:
|
||||||
class: logging.handlers.RotatingFileHandler
|
file:
|
||||||
formatter: precise
|
class: logging.handlers.RotatingFileHandler
|
||||||
filename: homeserver.log
|
formatter: precise
|
||||||
maxBytes: 104857600
|
filename: homeserver.log
|
||||||
backupCount: 10
|
maxBytes: 104857600
|
||||||
filters: [context]
|
backupCount: 10
|
||||||
encoding: utf8
|
filters: [context]
|
||||||
console:
|
encoding: utf8
|
||||||
class: logging.StreamHandler
|
console:
|
||||||
formatter: precise
|
class: logging.StreamHandler
|
||||||
filters: [context]
|
formatter: precise
|
||||||
|
filters: [context]
|
||||||
|
```
|
||||||
|
|
||||||
There is no need to revert this change if downgrading to
|
There is no need to revert this change if downgrading to
|
||||||
Python 2.
|
Python 2.
|
||||||
@@ -1288,24 +1328,28 @@ with the HS remotely has been removed.
|
|||||||
It has been replaced by specifying a list of application service
|
It has been replaced by specifying a list of application service
|
||||||
registrations in `homeserver.yaml`:
|
registrations in `homeserver.yaml`:
|
||||||
|
|
||||||
app_service_config_files: ["registration-01.yaml", "registration-02.yaml"]
|
```yaml
|
||||||
|
app_service_config_files: ["registration-01.yaml", "registration-02.yaml"]
|
||||||
|
```
|
||||||
|
|
||||||
Where `registration-01.yaml` looks like:
|
Where `registration-01.yaml` looks like:
|
||||||
|
|
||||||
url: <String> # e.g. "https://my.application.service.com"
|
```yaml
|
||||||
as_token: <String>
|
url: <String> # e.g. "https://my.application.service.com"
|
||||||
hs_token: <String>
|
as_token: <String>
|
||||||
sender_localpart: <String> # This is a new field which denotes the user_id localpart when using the AS token
|
hs_token: <String>
|
||||||
namespaces:
|
sender_localpart: <String> # This is a new field which denotes the user_id localpart when using the AS token
|
||||||
users:
|
namespaces:
|
||||||
- exclusive: <Boolean>
|
users:
|
||||||
regex: <String> # e.g. "@prefix_.*"
|
- exclusive: <Boolean>
|
||||||
aliases:
|
regex: <String> # e.g. "@prefix_.*"
|
||||||
- exclusive: <Boolean>
|
aliases:
|
||||||
regex: <String>
|
- exclusive: <Boolean>
|
||||||
rooms:
|
regex: <String>
|
||||||
- exclusive: <Boolean>
|
rooms:
|
||||||
regex: <String>
|
- exclusive: <Boolean>
|
||||||
|
regex: <String>
|
||||||
|
```
|
||||||
|
|
||||||
# Upgrading to v0.8.0
|
# Upgrading to v0.8.0
|
||||||
|
|
||||||
@@ -1344,9 +1388,9 @@ first need to upgrade the database by running:
|
|||||||
|
|
||||||
python scripts/upgrade_db_to_v0.6.0.py <db> <server_name> <signing_key>
|
python scripts/upgrade_db_to_v0.6.0.py <db> <server_name> <signing_key>
|
||||||
|
|
||||||
Where [<db>]{.title-ref} is the location of the database,
|
Where `<db>` is the location of the database,
|
||||||
[<server_name>]{.title-ref} is the server name as specified in the
|
`<server_name>` is the server name as specified in the
|
||||||
synapse configuration, and [<signing_key>]{.title-ref} is the location
|
synapse configuration, and `<signing_key>` is the location
|
||||||
of the signing key as specified in the synapse configuration.
|
of the signing key as specified in the synapse configuration.
|
||||||
|
|
||||||
This may take some time to complete. Failures of signatures and content
|
This may take some time to complete. Failures of signatures and content
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
# Registration Tokens
|
# Registration Tokens
|
||||||
|
|
||||||
This API allows you to manage tokens which can be used to authenticate
|
This API allows you to manage tokens which can be used to authenticate
|
||||||
registration requests, as proposed in [MSC3231](https://github.com/govynnus/matrix-doc/blob/token-registration/proposals/3231-token-authenticated-registration.md).
|
registration requests, as proposed in
|
||||||
|
[MSC3231](https://github.com/matrix-org/matrix-doc/blob/main/proposals/3231-token-authenticated-registration.md).
|
||||||
To use it, you will need to enable the `registration_requires_token` config
|
To use it, you will need to enable the `registration_requires_token` config
|
||||||
option, and authenticate by providing an `access_token` for a server admin:
|
option, and authenticate by providing an `access_token` for a server admin:
|
||||||
see [Admin API](../../usage/administration/admin_api).
|
see [Admin API](../../usage/administration/admin_api).
|
||||||
@@ -148,7 +149,7 @@ POST /_synapse/admin/v1/registration_tokens/new
|
|||||||
|
|
||||||
The request body must be a JSON object and can contain the following fields:
|
The request body must be a JSON object and can contain the following fields:
|
||||||
- `token`: The registration token. A string of no more than 64 characters that
|
- `token`: The registration token. A string of no more than 64 characters that
|
||||||
consists only of characters matched by the regex `[A-Za-z0-9-_]`.
|
consists only of characters matched by the regex `[A-Za-z0-9._~-]`.
|
||||||
Default: randomly generated.
|
Default: randomly generated.
|
||||||
- `uses_allowed`: The integer number of times the token can be used to complete
|
- `uses_allowed`: The integer number of times the token can be used to complete
|
||||||
a registration before it becomes invalid.
|
a registration before it becomes invalid.
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
Below is a sample logging configuration file. This file can be tweaked to control how your
|
Below is a sample logging configuration file. This file can be tweaked to control how your
|
||||||
homeserver will output logs. A restart of the server is generally required to apply any
|
homeserver will output logs. A restart of the server is generally required to apply any
|
||||||
changes made to this file.
|
changes made to this file. The value of the `log_config` option in your homeserver
|
||||||
|
config should be the path to this file.
|
||||||
|
|
||||||
Note that the contents below are *not* intended to be copied and used as the basis for
|
Note that a default logging configuration (shown below) is created automatically alongside
|
||||||
a real homeserver.yaml. Instead, if you are starting from scratch, please generate
|
the homeserver config when following the [installation instructions](../../setup/installation.md).
|
||||||
a fresh config using Synapse by following the instructions in
|
It should be named `<SERVERNAME>.log.config` by default.
|
||||||
[Installation](../../setup/installation.md).
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
{{#include ../../sample_log_config.yaml}}
|
{{#include ../../sample_log_config.yaml}}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,79 @@
|
|||||||
# Introduction
|
# Introduction
|
||||||
|
|
||||||
Welcome to the documentation repository for Synapse, the reference
|
Welcome to the documentation repository for Synapse, a
|
||||||
[Matrix](https://matrix.org) homeserver implementation.
|
[Matrix](https://matrix.org) homeserver implementation developed by the matrix.org core
|
||||||
|
team.
|
||||||
|
|
||||||
|
## Installing and using Synapse
|
||||||
|
|
||||||
|
This documentation covers topics for **installation**, **configuration** and
|
||||||
|
**maintainence** of your Synapse process:
|
||||||
|
|
||||||
|
* Learn how to [install](setup/installation.md) and
|
||||||
|
[configure](usage/configuration/index.html) your own instance, perhaps with [Single
|
||||||
|
Sign-On](usage/configuration/user_authentication/index.html).
|
||||||
|
|
||||||
|
* See how to [upgrade](upgrade.md) between Synapse versions.
|
||||||
|
|
||||||
|
* Administer your instance using the [Admin
|
||||||
|
API](usage/administration/admin_api/index.html), installing [pluggable
|
||||||
|
modules](modules/index.html), or by accessing the [manhole](manhole.md).
|
||||||
|
|
||||||
|
* Learn how to [read log lines](usage/administration/request_log.md), configure
|
||||||
|
[logging](usage/configuration/logging_sample_config.md) or set up [structured
|
||||||
|
logging](structured_logging.md).
|
||||||
|
|
||||||
|
* Scale Synapse through additional [worker processes](workers.md).
|
||||||
|
|
||||||
|
* Set up [monitoring and metrics](metrics-howto.md) to keep an eye on your
|
||||||
|
Synapse instance's performance.
|
||||||
|
|
||||||
|
## Developing on Synapse
|
||||||
|
|
||||||
|
Contributions are welcome! Synapse is primarily written in
|
||||||
|
[Python](https://python.org). As a developer, you may be interested in the
|
||||||
|
following documentation:
|
||||||
|
|
||||||
|
* Read the [Contributing Guide](development/contributing_guide.md). It is meant
|
||||||
|
to walk new contributors through the process of developing and submitting a
|
||||||
|
change to the Synapse codebase (which is [hosted on
|
||||||
|
GitHub](https://github.com/matrix-org/synapse)).
|
||||||
|
|
||||||
|
* Set up your [development
|
||||||
|
environment](development/contributing_guide.md#2-what-do-i-need), then learn
|
||||||
|
how to [lint](development/contributing_guide.md#run-the-linters) and
|
||||||
|
[test](development/contributing_guide.md#8-test-test-test) your code.
|
||||||
|
|
||||||
|
* Look at [the issue tracker](https://github.com/matrix-org/synapse/issues) for
|
||||||
|
bugs to fix or features to add. If you're new, it may be best to start with
|
||||||
|
those labeled [good first
|
||||||
|
issue](https://github.com/matrix-org/synapse/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
|
||||||
|
|
||||||
|
* Understand [how Synapse is
|
||||||
|
built](development/internal_documentation/index.html), how to [migrate
|
||||||
|
database schemas](development/database_schema.md), learn about
|
||||||
|
[federation](federate.md) and how to [set up a local
|
||||||
|
federation](federate.md#running-a-demo-federation-of-synapses) for development.
|
||||||
|
|
||||||
|
* We like to keep our `git` history clean. [Learn](development/git.md) how to
|
||||||
|
do so!
|
||||||
|
|
||||||
|
* And finally, contribute to this documentation! The source for which is
|
||||||
|
[located here](https://github.com/matrix-org/synapse/tree/develop/docs).
|
||||||
|
|
||||||
|
## Donating to Synapse development
|
||||||
|
|
||||||
|
Want to help keep Synapse going but don't know how to code? Synapse is a
|
||||||
|
[Matrix.org Foundation](https://matrix.org) project. Consider becoming a
|
||||||
|
supportor on [Liberapay](https://liberapay.com/matrixdotorg),
|
||||||
|
[Patreon](https://patreon.com/matrixdotorg) or through
|
||||||
|
[PayPal](https://paypal.me/matrixdotorg) via a one-time donation.
|
||||||
|
|
||||||
|
If you are an organisation or enterprise and would like to sponsor development,
|
||||||
|
reach out to us over email at: support (at) matrix.org
|
||||||
|
|
||||||
|
## Reporting a security vulnerability
|
||||||
|
|
||||||
|
If you've found a security issue in Synapse or any other Matrix.org Foundation
|
||||||
|
project, please report it to us in accordance with our [Security Disclosure
|
||||||
|
Policy](https://www.matrix.org/security-disclosure-policy/). Thank you!
|
||||||
|
|||||||
@@ -443,19 +443,19 @@ In the `media_repository` worker configuration file, configure the http listener
|
|||||||
expose the `media` resource. For example:
|
expose the `media` resource. For example:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
worker_listeners:
|
worker_listeners:
|
||||||
- type: http
|
- type: http
|
||||||
port: 8085
|
port: 8085
|
||||||
resources:
|
resources:
|
||||||
- names:
|
- names:
|
||||||
- media
|
- media
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that if running multiple media repositories they must be on the same server
|
Note that if running multiple media repositories they must be on the same server
|
||||||
and you must configure a single instance to run the background tasks, e.g.:
|
and you must configure a single instance to run the background tasks, e.g.:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
media_instance_running_background_jobs: "media-repository-1"
|
media_instance_running_background_jobs: "media-repository-1"
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that if a reverse proxy is used , then `/_matrix/media/` must be routed for both inbound client and federation requests (if they are handled separately).
|
Note that if a reverse proxy is used , then `/_matrix/media/` must be routed for both inbound client and federation requests (if they are handled separately).
|
||||||
@@ -492,7 +492,9 @@ must therefore be configured with the location of the main instance, via
|
|||||||
the `worker_main_http_uri` setting in the `frontend_proxy` worker configuration
|
the `worker_main_http_uri` setting in the `frontend_proxy` worker configuration
|
||||||
file. For example:
|
file. For example:
|
||||||
|
|
||||||
worker_main_http_uri: http://127.0.0.1:8008
|
```yaml
|
||||||
|
worker_main_http_uri: http://127.0.0.1:8008
|
||||||
|
```
|
||||||
|
|
||||||
### Historical apps
|
### Historical apps
|
||||||
|
|
||||||
|
|||||||
210
mypy.ini
210
mypy.ini
@@ -16,28 +16,23 @@ no_implicit_optional = True
|
|||||||
|
|
||||||
files =
|
files =
|
||||||
scripts-dev/sign_json,
|
scripts-dev/sign_json,
|
||||||
|
synapse/__init__.py,
|
||||||
synapse/api,
|
synapse/api,
|
||||||
synapse/appservice,
|
synapse/appservice,
|
||||||
synapse/config,
|
synapse/config,
|
||||||
synapse/crypto,
|
synapse/crypto,
|
||||||
synapse/event_auth.py,
|
synapse/event_auth.py,
|
||||||
synapse/events/builder.py,
|
synapse/events/builder.py,
|
||||||
|
synapse/events/presence_router.py,
|
||||||
|
synapse/events/snapshot.py,
|
||||||
synapse/events/spamcheck.py,
|
synapse/events/spamcheck.py,
|
||||||
synapse/events/third_party_rules.py,
|
synapse/events/third_party_rules.py,
|
||||||
|
synapse/events/utils.py,
|
||||||
synapse/events/validator.py,
|
synapse/events/validator.py,
|
||||||
synapse/federation,
|
synapse/federation,
|
||||||
synapse/groups,
|
synapse/groups,
|
||||||
synapse/handlers,
|
synapse/handlers,
|
||||||
synapse/http/additional_resource.py,
|
synapse/http,
|
||||||
synapse/http/client.py,
|
|
||||||
synapse/http/federation/matrix_federation_agent.py,
|
|
||||||
synapse/http/federation/srv_resolver.py,
|
|
||||||
synapse/http/federation/well_known_resolver.py,
|
|
||||||
synapse/http/matrixfederationclient.py,
|
|
||||||
synapse/http/proxyagent.py,
|
|
||||||
synapse/http/servlet.py,
|
|
||||||
synapse/http/server.py,
|
|
||||||
synapse/http/site.py,
|
|
||||||
synapse/logging,
|
synapse/logging,
|
||||||
synapse/metrics,
|
synapse/metrics,
|
||||||
synapse/module_api,
|
synapse/module_api,
|
||||||
@@ -53,10 +48,12 @@ files =
|
|||||||
synapse/storage/_base.py,
|
synapse/storage/_base.py,
|
||||||
synapse/storage/background_updates.py,
|
synapse/storage/background_updates.py,
|
||||||
synapse/storage/databases/main/appservice.py,
|
synapse/storage/databases/main/appservice.py,
|
||||||
|
synapse/storage/databases/main/client_ips.py,
|
||||||
synapse/storage/databases/main/events.py,
|
synapse/storage/databases/main/events.py,
|
||||||
synapse/storage/databases/main/keys.py,
|
synapse/storage/databases/main/keys.py,
|
||||||
synapse/storage/databases/main/pusher.py,
|
synapse/storage/databases/main/pusher.py,
|
||||||
synapse/storage/databases/main/registration.py,
|
synapse/storage/databases/main/registration.py,
|
||||||
|
synapse/storage/databases/main/relations.py,
|
||||||
synapse/storage/databases/main/session.py,
|
synapse/storage/databases/main/session.py,
|
||||||
synapse/storage/databases/main/stream.py,
|
synapse/storage/databases/main/stream.py,
|
||||||
synapse/storage/databases/main/ui_auth.py,
|
synapse/storage/databases/main/ui_auth.py,
|
||||||
@@ -88,23 +85,71 @@ files =
|
|||||||
tests/handlers/test_user_directory.py,
|
tests/handlers/test_user_directory.py,
|
||||||
tests/rest/client/test_login.py,
|
tests/rest/client/test_login.py,
|
||||||
tests/rest/client/test_auth.py,
|
tests/rest/client/test_auth.py,
|
||||||
|
tests/rest/client/test_relations.py,
|
||||||
|
tests/rest/media/v1/test_filepath.py,
|
||||||
|
tests/rest/media/v1/test_oembed.py,
|
||||||
tests/storage/test_state.py,
|
tests/storage/test_state.py,
|
||||||
tests/storage/test_user_directory.py,
|
tests/storage/test_user_directory.py,
|
||||||
tests/util/test_itertools.py,
|
tests/util/test_itertools.py,
|
||||||
tests/util/test_stream_change_cache.py
|
tests/util/test_stream_change_cache.py
|
||||||
|
|
||||||
|
[mypy-synapse.api.*]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.crypto.*]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.events.*]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
[mypy-synapse.handlers.*]
|
[mypy-synapse.handlers.*]
|
||||||
disallow_untyped_defs = True
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.push.*]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
[mypy-synapse.rest.*]
|
[mypy-synapse.rest.*]
|
||||||
disallow_untyped_defs = True
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.server_notices.*]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.state.*]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.storage.databases.main.client_ips]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.storage.util.*]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.streams.*]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
[mypy-synapse.util.batching_queue]
|
[mypy-synapse.util.batching_queue]
|
||||||
disallow_untyped_defs = True
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.util.caches.cached_call]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
[mypy-synapse.util.caches.dictionary_cache]
|
[mypy-synapse.util.caches.dictionary_cache]
|
||||||
disallow_untyped_defs = True
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.util.caches.lrucache]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.util.caches.response_cache]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.util.caches.stream_change_cache]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.util.caches.ttl_cache]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.util.daemonize]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
[mypy-synapse.util.file_consumer]
|
[mypy-synapse.util.file_consumer]
|
||||||
disallow_untyped_defs = True
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
@@ -141,6 +186,9 @@ disallow_untyped_defs = True
|
|||||||
[mypy-synapse.util.msisdn]
|
[mypy-synapse.util.msisdn]
|
||||||
disallow_untyped_defs = True
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-synapse.util.patch_inline_callbacks]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
[mypy-synapse.util.ratelimitutils]
|
[mypy-synapse.util.ratelimitutils]
|
||||||
disallow_untyped_defs = True
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
@@ -162,98 +210,106 @@ disallow_untyped_defs = True
|
|||||||
[mypy-synapse.util.wheel_timer]
|
[mypy-synapse.util.wheel_timer]
|
||||||
disallow_untyped_defs = True
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
[mypy-pymacaroons.*]
|
[mypy-synapse.util.versionstring]
|
||||||
ignore_missing_imports = True
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
[mypy-zope]
|
[mypy-tests.handlers.test_user_directory]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
[mypy-tests.storage.test_user_directory]
|
||||||
|
disallow_untyped_defs = True
|
||||||
|
|
||||||
|
;; Dependencies without annotations
|
||||||
|
;; Before ignoring a module, check to see if type stubs are available.
|
||||||
|
;; The `typeshed` project maintains stubs here:
|
||||||
|
;; https://github.com/python/typeshed/tree/master/stubs
|
||||||
|
;; and for each package `foo` there's a corresponding `types-foo` package on PyPI,
|
||||||
|
;; which we can pull in as a dev dependency by adding to `setup.py`'s
|
||||||
|
;; `CONDITIONAL_REQUIREMENTS["mypy"]` list.
|
||||||
|
|
||||||
|
[mypy-authlib.*]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-bcrypt]
|
[mypy-bcrypt]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-constantly]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-twisted.*]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-treq.*]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-hyperlink]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-h11]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-msgpack]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-opentracing]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-OpenSSL.*]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-netaddr]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-saml2.*]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-canonicaljson]
|
[mypy-canonicaljson]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-jaeger_client.*]
|
[mypy-constantly]
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-jsonschema]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-signedjson.*]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-prometheus_client.*]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-service_identity.*]
|
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-daemonize]
|
[mypy-daemonize]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-sentry_sdk]
|
[mypy-h11]
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-PIL.*]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-lxml]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-jwt.*]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-authlib.*]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-rust_python_jaeger_reporter.*]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-nacl.*]
|
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-hiredis]
|
[mypy-hiredis]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-hyperlink]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-ijson.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-jaeger_client.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-josepy.*]
|
[mypy-josepy.*]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-pympler.*]
|
[mypy-jwt.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-lxml]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-msgpack]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-nacl.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-netaddr]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-opentracing]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-phonenumbers.*]
|
[mypy-phonenumbers.*]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-ijson.*]
|
[mypy-prometheus_client.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-pymacaroons.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-pympler.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-rust_python_jaeger_reporter.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-saml2.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-sentry_sdk]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-service_identity.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-signedjson.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-treq.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-twisted.*]
|
||||||
|
ignore_missing_imports = True
|
||||||
|
|
||||||
|
[mypy-zope]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ DISTS = (
|
|||||||
"ubuntu:bionic", # 18.04 LTS (our EOL forced by Py36 on 2021-12-23)
|
"ubuntu:bionic", # 18.04 LTS (our EOL forced by Py36 on 2021-12-23)
|
||||||
"ubuntu:focal", # 20.04 LTS (our EOL forced by Py38 on 2024-10-14)
|
"ubuntu:focal", # 20.04 LTS (our EOL forced by Py38 on 2024-10-14)
|
||||||
"ubuntu:hirsute", # 21.04 (EOL 2022-01-05)
|
"ubuntu:hirsute", # 21.04 (EOL 2022-01-05)
|
||||||
|
"ubuntu:impish", # 21.10 (EOL 2022-07)
|
||||||
)
|
)
|
||||||
|
|
||||||
DESC = """\
|
DESC = """\
|
||||||
|
|||||||
@@ -42,10 +42,10 @@ echo "--------------------------"
|
|||||||
echo
|
echo
|
||||||
|
|
||||||
matched=0
|
matched=0
|
||||||
for f in `git diff --name-only FETCH_HEAD... -- changelog.d`; do
|
for f in $(git diff --name-only FETCH_HEAD... -- changelog.d); do
|
||||||
# check that any modified newsfiles on this branch end with a full stop.
|
# check that any modified newsfiles on this branch end with a full stop.
|
||||||
lastchar=`tr -d '\n' < $f | tail -c 1`
|
lastchar=$(tr -d '\n' < "$f" | tail -c 1)
|
||||||
if [ $lastchar != '.' -a $lastchar != '!' ]; then
|
if [ "$lastchar" != '.' ] && [ "$lastchar" != '!' ]; then
|
||||||
echo -e "\e[31mERROR: newsfragment $f does not end with a '.' or '!'\e[39m" >&2
|
echo -e "\e[31mERROR: newsfragment $f does not end with a '.' or '!'\e[39m" >&2
|
||||||
echo -e "$CONTRIBUTING_GUIDE_TEXT" >&2
|
echo -e "$CONTRIBUTING_GUIDE_TEXT" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
# terminators are found, 0 otherwise.
|
# terminators are found, 0 otherwise.
|
||||||
|
|
||||||
# cd to the root of the repository
|
# cd to the root of the repository
|
||||||
cd `dirname $0`/..
|
cd "$(dirname "$0")/.." || exit
|
||||||
|
|
||||||
# Find and print files with non-unix line terminators
|
# Find and print files with non-unix line terminators
|
||||||
if find . -path './.git/*' -prune -o -type f -print0 | xargs -0 grep -I -l $'\r$'; then
|
if find . -path './.git/*' -prune -o -type f -print0 | xargs -0 grep -I -l $'\r$'; then
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Change to the repository root
|
# Change to the repository root
|
||||||
cd "$(dirname $0)/.."
|
cd "$(dirname "$0")/.."
|
||||||
|
|
||||||
# Check for a user-specified Complement checkout
|
# Check for a user-specified Complement checkout
|
||||||
if [[ -z "$COMPLEMENT_DIR" ]]; then
|
if [[ -z "$COMPLEMENT_DIR" ]]; then
|
||||||
@@ -61,8 +61,8 @@ cd "$COMPLEMENT_DIR"
|
|||||||
EXTRA_COMPLEMENT_ARGS=""
|
EXTRA_COMPLEMENT_ARGS=""
|
||||||
if [[ -n "$1" ]]; then
|
if [[ -n "$1" ]]; then
|
||||||
# A test name regex has been set, supply it to Complement
|
# A test name regex has been set, supply it to Complement
|
||||||
EXTRA_COMPLEMENT_ARGS+="-run $1 "
|
EXTRA_COMPLEMENT_ARGS=(-run "$1")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Run the tests!
|
# Run the tests!
|
||||||
go test -v -tags synapse_blacklist,msc2946,msc3083,msc2403,msc2716 -count=1 $EXTRA_COMPLEMENT_ARGS ./tests/...
|
go test -v -tags synapse_blacklist,msc2946,msc3083,msc2403,msc2716 -count=1 "${EXTRA_COMPLEMENT_ARGS[@]}" ./tests/...
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
# Exits with 0 if there are no problems, or another code otherwise.
|
# Exits with 0 if there are no problems, or another code otherwise.
|
||||||
|
|
||||||
# cd to the root of the repository
|
# cd to the root of the repository
|
||||||
cd `dirname $0`/..
|
cd "$(dirname "$0")/.." || exit
|
||||||
|
|
||||||
# Restore backup of sample config upon script exit
|
# Restore backup of sample config upon script exit
|
||||||
trap "mv docs/sample_config.yaml.bak docs/sample_config.yaml" EXIT
|
trap "mv docs/sample_config.yaml.bak docs/sample_config.yaml" EXIT
|
||||||
|
|||||||
@@ -60,5 +60,5 @@ DEBIAN_FRONTEND=noninteractive apt-get install -y devscripts
|
|||||||
|
|
||||||
# Update the Debian changelog.
|
# Update the Debian changelog.
|
||||||
ver=${1}
|
ver=${1}
|
||||||
dch -M -v $(sed -Ee 's/(rc|a|b|c)/~\1/' <<<$ver) "New synapse release $ver."
|
dch -M -v "$(sed -Ee 's/(rc|a|b|c)/~\1/' <<<"$ver")" "New synapse release $ver."
|
||||||
dch -M -r -D stable ""
|
dch -M -r -D stable ""
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
cd `dirname $0`/..
|
cd "$(dirname "$0")/.."
|
||||||
|
|
||||||
SAMPLE_CONFIG="docs/sample_config.yaml"
|
SAMPLE_CONFIG="docs/sample_config.yaml"
|
||||||
SAMPLE_LOG_CONFIG="docs/sample_log_config.yaml"
|
SAMPLE_LOG_CONFIG="docs/sample_log_config.yaml"
|
||||||
|
|||||||
@@ -90,10 +90,10 @@ else
|
|||||||
"scripts/hash_password"
|
"scripts/hash_password"
|
||||||
"scripts/register_new_matrix_user"
|
"scripts/register_new_matrix_user"
|
||||||
"scripts/synapse_port_db"
|
"scripts/synapse_port_db"
|
||||||
|
"scripts/update_synapse_database"
|
||||||
"scripts-dev"
|
"scripts-dev"
|
||||||
"scripts-dev/build_debian_packages"
|
"scripts-dev/build_debian_packages"
|
||||||
"scripts-dev/sign_json"
|
"scripts-dev/sign_json"
|
||||||
"scripts-dev/update_database"
|
|
||||||
"contrib" "synctl" "setup.py" "synmark" "stubs" ".ci"
|
"contrib" "synctl" "setup.py" "synmark" "stubs" ".ci"
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ python -m synapse.app.homeserver --generate-keys -c "$SQLITE_CONFIG"
|
|||||||
|
|
||||||
# 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.
|
||||||
echo "Running db background jobs..."
|
echo "Running db background jobs..."
|
||||||
scripts-dev/update_database --database-config "$SQLITE_CONFIG"
|
scripts/update_synapse_database --database-config --run-background-updates "$SQLITE_CONFIG"
|
||||||
|
|
||||||
# Create the PostgreSQL database.
|
# Create the PostgreSQL database.
|
||||||
echo "Creating postgres database..."
|
echo "Creating postgres database..."
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ set -e
|
|||||||
|
|
||||||
# Fetch the current GitHub issue number, add one to it -- presto! The likely
|
# Fetch the current GitHub issue number, add one to it -- presto! The likely
|
||||||
# next PR number.
|
# next PR number.
|
||||||
CURRENT_NUMBER=`curl -s "https://api.github.com/repos/matrix-org/synapse/issues?state=all&per_page=1" | jq -r ".[0].number"`
|
CURRENT_NUMBER=$(curl -s "https://api.github.com/repos/matrix-org/synapse/issues?state=all&per_page=1" | jq -r ".[0].number")
|
||||||
CURRENT_NUMBER=$((CURRENT_NUMBER+1))
|
CURRENT_NUMBER=$((CURRENT_NUMBER+1))
|
||||||
echo $CURRENT_NUMBER
|
echo $CURRENT_NUMBER
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user