mirror of
https://github.com/element-hq/synapse.git
synced 2025-12-17 02:10:27 +00:00
Compare commits
859 Commits
v1.15.1
...
erikj/rele
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0eaa6dd30e | ||
|
|
7a0fd6f98d | ||
|
|
f27a789697 | ||
|
|
b176f1036a | ||
|
|
aef8514193 | ||
|
|
b4289795ea | ||
|
|
1b831f2bec | ||
|
|
90c900a8ff | ||
|
|
b37aa1643b | ||
|
|
8f1aefa694 | ||
|
|
cbc82aa09f | ||
|
|
fd7c743445 | ||
|
|
46f4be94b4 | ||
|
|
4504151546 | ||
|
|
ef2d627015 | ||
|
|
70269fbd18 | ||
|
|
8b42a4eefd | ||
|
|
f21e24ffc2 | ||
|
|
22eeb6bc54 | ||
|
|
0073fe914a | ||
|
|
56f0ee78a9 | ||
|
|
00b24aa545 | ||
|
|
9a7e0d2ea6 | ||
|
|
c97da1e45d | ||
|
|
e80eb69887 | ||
|
|
b6ca69e4f1 | ||
|
|
31d721fbf6 | ||
|
|
2239813278 | ||
|
|
29ce6d43b5 | ||
|
|
a6ea1a957e | ||
|
|
aff1eb7c67 | ||
|
|
e90fad5cba | ||
|
|
88e1d0c52b | ||
|
|
f49c2093b5 | ||
|
|
a699c044b6 | ||
|
|
4215a3acd4 | ||
|
|
0c7f9cb81f | ||
|
|
9b7c28283a | ||
|
|
24229fac05 | ||
|
|
fedfdfd750 | ||
|
|
2e380f0f18 | ||
|
|
10f45d85bb | ||
|
|
66e6801c3e | ||
|
|
6c9ab61df5 | ||
|
|
49d72dea2a | ||
|
|
f6a3859a73 | ||
|
|
4ac3a8c5dc | ||
|
|
cf9a17a2b3 | ||
|
|
191f2e5d5d | ||
|
|
f40a4ba08e | ||
|
|
7a3adbd7af | ||
|
|
ff7f0e8a14 | ||
|
|
9e0f5a0ac4 | ||
|
|
e8dbbcb64c | ||
|
|
73d8209694 | ||
|
|
913f8a06e4 | ||
|
|
7b13780c54 | ||
|
|
5eda018561 | ||
|
|
437a99fb99 | ||
|
|
2b7c180879 | ||
|
|
34a5696f93 | ||
|
|
c850dd9a8e | ||
|
|
db9ef792f0 | ||
|
|
f28756bb40 | ||
|
|
4fb7a68a65 | ||
|
|
054a6b9538 | ||
|
|
514a240aed | ||
|
|
5065048110 | ||
|
|
88b8b8403c | ||
|
|
b19b63e6b4 | ||
|
|
a622e1ed9f | ||
|
|
ec0e9c4695 | ||
|
|
a9f90fa73a | ||
|
|
2ac908f377 | ||
|
|
b28aaeb3a5 | ||
|
|
15d5553d9e | ||
|
|
c13820bcee | ||
|
|
2b3af01791 | ||
|
|
9146a8a691 | ||
|
|
6d3905c7c7 | ||
|
|
1f4269700c | ||
|
|
7b71695388 | ||
|
|
70259d8c8c | ||
|
|
20a67aa70d | ||
|
|
654cc9470e | ||
|
|
de5cafe980 | ||
|
|
9e0f22874f | ||
|
|
84c0e46cce | ||
|
|
74f29284aa | ||
|
|
a312e890f5 | ||
|
|
626b8f0846 | ||
|
|
96e7d3c4a0 | ||
|
|
34c20493b9 | ||
|
|
21bb50ca3f | ||
|
|
8f27b7fde1 | ||
|
|
903d11c43a | ||
|
|
c356b4bf42 | ||
|
|
85c56445fb | ||
|
|
1fcdbeb3ab | ||
|
|
97647b33c2 | ||
|
|
79c1f973ce | ||
|
|
0afd83584b | ||
|
|
d6094176d1 | ||
|
|
1b70662be9 | ||
|
|
c8e9dc4cf4 | ||
|
|
6d7b22041d | ||
|
|
995cc615a0 | ||
|
|
402213bf41 | ||
|
|
0ec0bc3886 | ||
|
|
3ee17585cd | ||
|
|
da0090fdff | ||
|
|
5649669c3c | ||
|
|
6b5a115c0a | ||
|
|
c276bd9969 | ||
|
|
654e239b25 | ||
|
|
74976a8e43 | ||
|
|
9b8a53c7b9 | ||
|
|
a7d4985a6b | ||
|
|
f30f12a839 | ||
|
|
f49708dee3 | ||
|
|
9991aaa49c | ||
|
|
3a337f6d27 | ||
|
|
20fa83f374 | ||
|
|
8075504a60 | ||
|
|
0a08cd1065 | ||
|
|
1f39155071 | ||
|
|
4433d01519 | ||
|
|
27cfd712b3 | ||
|
|
470dedd266 | ||
|
|
4182bb812f | ||
|
|
9f87da0a84 | ||
|
|
7eff59ec91 | ||
|
|
19b15d63e8 | ||
|
|
618d405a32 | ||
|
|
1cf4a68108 | ||
|
|
9e66f3761c | ||
|
|
1264c8ac89 | ||
|
|
921a3f8a59 | ||
|
|
3ee97a2748 | ||
|
|
ec606ea9e3 | ||
|
|
d9dc6185d3 | ||
|
|
a34b17e492 | ||
|
|
091e9482af | ||
|
|
898196f1cc | ||
|
|
617e8a4653 | ||
|
|
d9d86c2996 | ||
|
|
123711ed19 | ||
|
|
d59378d86b | ||
|
|
629a951b49 | ||
|
|
b2486f6656 | ||
|
|
a9a8f29729 | ||
|
|
58e583eac1 | ||
|
|
b76f53bb79 | ||
|
|
a06b7a5d94 | ||
|
|
bc203c962f | ||
|
|
cd0f65d2c7 | ||
|
|
4aa027ea70 | ||
|
|
8de3703d21 | ||
|
|
f76194a021 | ||
|
|
6905f5751a | ||
|
|
d35a451399 | ||
|
|
9789b1fba5 | ||
|
|
ca2db5dd0c | ||
|
|
1781bbe319 | ||
|
|
66ac4b1e34 | ||
|
|
5009ffcaa4 | ||
|
|
fe0f4a3591 | ||
|
|
c9c0ad5e20 | ||
|
|
a93f3121f8 | ||
|
|
a97cec18bb | ||
|
|
7859c4d079 | ||
|
|
b9c253a724 | ||
|
|
31fe46e0a3 | ||
|
|
719474cae0 | ||
|
|
b28bfd905d | ||
|
|
1baa895310 | ||
|
|
fa8934b175 | ||
|
|
e4f72ddc44 | ||
|
|
8dbf62fada | ||
|
|
ae5b2a72c0 | ||
|
|
52a50e8686 | ||
|
|
b460a088c6 | ||
|
|
9ca6341969 | ||
|
|
d9b55bd830 | ||
|
|
d373ec2f72 | ||
|
|
4cb44a1585 | ||
|
|
43c622885c | ||
|
|
4f0637346a | ||
|
|
01f82bfe32 | ||
|
|
903fcd2d35 | ||
|
|
3cd78bbe9e | ||
|
|
a024461130 | ||
|
|
9c0b168cff | ||
|
|
3e58ce72b4 | ||
|
|
785437dc0d | ||
|
|
4cd1448d0e | ||
|
|
103f72929a | ||
|
|
e775b5bb5b | ||
|
|
fd0282201e | ||
|
|
2ee302d016 | ||
|
|
b520a1bf5a | ||
|
|
da11cc22be | ||
|
|
0991a2da93 | ||
|
|
f31f8e6319 | ||
|
|
f64c6aae68 | ||
|
|
c5251c6fbd | ||
|
|
e3debf9682 | ||
|
|
ec10bdd32b | ||
|
|
62894673e6 | ||
|
|
462e681c79 | ||
|
|
9de6e9e249 | ||
|
|
8672642225 | ||
|
|
6a8fd03acb | ||
|
|
f6c526ce67 | ||
|
|
73d93039ff | ||
|
|
3bd2a2cbb1 | ||
|
|
695240d34a | ||
|
|
34ff8da83b | ||
|
|
3bd3707cb9 | ||
|
|
6c5d5e507e | ||
|
|
05ee048f2c | ||
|
|
61aaf36a1c | ||
|
|
0b68577ed6 | ||
|
|
2eb947e0ee | ||
|
|
b1f4e6e4fc | ||
|
|
50e5174e86 | ||
|
|
c501c80e46 | ||
|
|
cc40a59b4a | ||
|
|
4ff0201e62 | ||
|
|
c1ef579b63 | ||
|
|
7941372ec8 | ||
|
|
a0a1ba6973 | ||
|
|
8b40843392 | ||
|
|
32acab3fa2 | ||
|
|
20e7c4de26 | ||
|
|
6d2d42f8fb | ||
|
|
1c8ca2c543 | ||
|
|
ceafb5a1c6 | ||
|
|
c429dfc300 | ||
|
|
ea70f1c362 | ||
|
|
8238b55e08 | ||
|
|
d4274dd17e | ||
|
|
057f04fa9f | ||
|
|
8412c08a87 | ||
|
|
ba700074c6 | ||
|
|
937393abd8 | ||
|
|
c2bdf040aa | ||
|
|
e154f7ccb5 | ||
|
|
b1433bf231 | ||
|
|
2649d545a5 | ||
|
|
f43c66d23b | ||
|
|
12f0d18611 | ||
|
|
8676d8ab2e | ||
|
|
1c6b8752b8 | ||
|
|
866c84da8d | ||
|
|
1c262431f9 | ||
|
|
fe443acaee | ||
|
|
d4605d1f16 | ||
|
|
bd380d942f | ||
|
|
5e3ca12b15 | ||
|
|
bd715e1278 | ||
|
|
450ec48445 | ||
|
|
4b3a1faa08 | ||
|
|
31acc5c309 | ||
|
|
fec6f9ac17 | ||
|
|
abd04b6af0 | ||
|
|
3e87d79e1c | ||
|
|
c77c4a2fcd | ||
|
|
f112cfe5bb | ||
|
|
ab903e7337 | ||
|
|
271086ebda | ||
|
|
5ce5a9f144 | ||
|
|
920dd1083e | ||
|
|
f3e5c2e702 | ||
|
|
3f4a2a7064 | ||
|
|
11c9e17738 | ||
|
|
6fdf577593 | ||
|
|
ac11fcbbb8 | ||
|
|
13099ae431 | ||
|
|
2983049a77 | ||
|
|
91c60f3042 | ||
|
|
302dc89f6a | ||
|
|
cbabb312e0 | ||
|
|
916bb9d0d1 | ||
|
|
4bb203ea4f | ||
|
|
bbde4038df | ||
|
|
a4e63e5a47 | ||
|
|
48336eeb85 | ||
|
|
4325be1a52 | ||
|
|
8998217540 | ||
|
|
4da01f9c61 | ||
|
|
b29a9bdaa9 | ||
|
|
d191dbdaa6 | ||
|
|
012736ff07 | ||
|
|
55bb5fda33 | ||
|
|
37ca5924bd | ||
|
|
4f3096d866 | ||
|
|
babc027543 | ||
|
|
00db7786de | ||
|
|
c7e060bfee | ||
|
|
c4e8b18c72 | ||
|
|
d5f7182ba1 | ||
|
|
88e67d1adb | ||
|
|
d688b4bafc | ||
|
|
5b70acb44c | ||
|
|
36efbcaf51 | ||
|
|
8a4a4186de | ||
|
|
68c7a6936f | ||
|
|
27c1abc7b8 | ||
|
|
43f2b67e4d | ||
|
|
7c407efdc8 | ||
|
|
9db4c1b175 | ||
|
|
5e42e61609 | ||
|
|
14b5b48a22 | ||
|
|
efb6b6629c | ||
|
|
ad055ea4cc | ||
|
|
837293c314 | ||
|
|
c3c9732c53 | ||
|
|
53284c425e | ||
|
|
a3f124b821 | ||
|
|
44dec6cbc4 | ||
|
|
7141057e85 | ||
|
|
ab165994db | ||
|
|
7c43643037 | ||
|
|
5ffd68dca1 | ||
|
|
5dd051acae | ||
|
|
9c8ef134fe | ||
|
|
f1c9ded738 | ||
|
|
97659b7489 | ||
|
|
c570f24acc | ||
|
|
576bc37d31 | ||
|
|
aec294ee0d | ||
|
|
d2a3eb04a4 | ||
|
|
b82d68c0bd | ||
|
|
6605470bfb | ||
|
|
04cc249b43 | ||
|
|
a9dbe98ef9 | ||
|
|
08837bb58c | ||
|
|
2832ef5bb7 | ||
|
|
fe8ed1b46f | ||
|
|
b86764662b | ||
|
|
c312ee3cde | ||
|
|
95d869c357 | ||
|
|
5d3e306d9f | ||
|
|
192e98111d | ||
|
|
a3a90ee031 | ||
|
|
e44e9ee518 | ||
|
|
b312769c0e | ||
|
|
2ea1c68249 | ||
|
|
536f4a2482 | ||
|
|
c9dbee50ae | ||
|
|
dc9dcdbd59 | ||
|
|
e7fd336a53 | ||
|
|
453dfe210b | ||
|
|
a5370072b5 | ||
|
|
e45b834119 | ||
|
|
1553adc831 | ||
|
|
560f3b8609 | ||
|
|
63c0e9e195 | ||
|
|
094896a69d | ||
|
|
d4daff9b59 | ||
|
|
0f545e6b96 | ||
|
|
703e2b8a96 | ||
|
|
deedb91732 | ||
|
|
cca03dbec8 | ||
|
|
6d01eb0c74 | ||
|
|
bbe2e6b38b | ||
|
|
525efab612 | ||
|
|
72bec36d50 | ||
|
|
cef00211c8 | ||
|
|
68cdb3708e | ||
|
|
ad28030c12 | ||
|
|
8d6f97f932 | ||
|
|
d8762cc116 | ||
|
|
77794ebc77 | ||
|
|
ef2804d27c | ||
|
|
a55e2707d7 | ||
|
|
0dae7d80bf | ||
|
|
96312536f2 | ||
|
|
7586fdf1e8 | ||
|
|
5b452df23b | ||
|
|
765437df54 | ||
|
|
77b4711bc2 | ||
|
|
7513006b09 | ||
|
|
17fa4c7ca7 | ||
|
|
f25af1f9c7 | ||
|
|
041ee971c9 | ||
|
|
db7de4d182 | ||
|
|
58f61f10f7 | ||
|
|
e351298444 | ||
|
|
c619253db8 | ||
|
|
9f8abdcc38 | ||
|
|
be16ee59a8 | ||
|
|
4535e849d7 | ||
|
|
f97f9485ee | ||
|
|
208e1d3eb3 | ||
|
|
15c35c250c | ||
|
|
2aa127c207 | ||
|
|
5bfc79486d | ||
|
|
6f6f371a87 | ||
|
|
c8758cb72f | ||
|
|
912e024913 | ||
|
|
112266eafd | ||
|
|
5a1dd297c3 | ||
|
|
0d4f614fda | ||
|
|
82c1ee1c22 | ||
|
|
b257c788c0 | ||
|
|
9356656e67 | ||
|
|
d250521cf5 | ||
|
|
abeab964d5 | ||
|
|
b939251c37 | ||
|
|
b5133dd97f | ||
|
|
37db6252b7 | ||
|
|
7d103a594e | ||
|
|
5615eb5cb4 | ||
|
|
54f8d73c00 | ||
|
|
5bf8e5f55b | ||
|
|
da77520cd1 | ||
|
|
bbb3c8641c | ||
|
|
318245eaa6 | ||
|
|
aa07c37cf0 | ||
|
|
45e8f7726f | ||
|
|
8027166dd5 | ||
|
|
d2ac767de2 | ||
|
|
b4826d6eb1 | ||
|
|
3b4556cf87 | ||
|
|
d58fda99ff | ||
|
|
22b926c284 | ||
|
|
aec7085179 | ||
|
|
b055dc9322 | ||
|
|
5c03134d0f | ||
|
|
d5e73cb6aa | ||
|
|
2c2e649be2 | ||
|
|
e00816ad98 | ||
|
|
b49a5b9307 | ||
|
|
b71d4a094c | ||
|
|
9b7ac03af3 | ||
|
|
c9fa696ea2 | ||
|
|
5649b7f3d0 | ||
|
|
30426c7063 | ||
|
|
4a739c73b4 | ||
|
|
a466b67972 | ||
|
|
9cfc120233 | ||
|
|
eadfda3ebc | ||
|
|
cf2f6c3d22 | ||
|
|
b8f20e4276 | ||
|
|
6fe12c9512 | ||
|
|
e0d6244beb | ||
|
|
ed18f32e1b | ||
|
|
98125bba7a | ||
|
|
88b9807ba4 | ||
|
|
2e6c90ff84 | ||
|
|
e3c91a3c55 | ||
|
|
4c6c56dc58 | ||
|
|
56efa9ec71 | ||
|
|
eba98fb024 | ||
|
|
5099bd68da | ||
|
|
6e1c64a668 | ||
|
|
0a4e541dc5 | ||
|
|
b79d69796c | ||
|
|
2231dffee6 | ||
|
|
74bf8d4d06 | ||
|
|
79ac619403 | ||
|
|
97962ad17b | ||
|
|
5758dcf30c | ||
|
|
cbd8d83da7 | ||
|
|
420484a334 | ||
|
|
64e8a4697a | ||
|
|
3f8f96be00 | ||
|
|
393a811a41 | ||
|
|
2df82ae451 | ||
|
|
3f49f74610 | ||
|
|
cbbf9126cb | ||
|
|
09fd0eda81 | ||
|
|
3f91638da6 | ||
|
|
e259d63f73 | ||
|
|
318f4e738e | ||
|
|
592cdf73be | ||
|
|
dbc630a628 | ||
|
|
5eac0b7e76 | ||
|
|
731dfff347 | ||
|
|
76c43f086a | ||
|
|
12aebdfa5a | ||
|
|
c9c544cda5 | ||
|
|
f594e434c3 | ||
|
|
cfeb37f039 | ||
|
|
eebf52be06 | ||
|
|
d89692ea84 | ||
|
|
d294f0e7e1 | ||
|
|
76d21d14a0 | ||
|
|
f40645e60b | ||
|
|
acfb7c3b5d | ||
|
|
3c01724b33 | ||
|
|
5cf7c12995 | ||
|
|
408aef8276 | ||
|
|
2f4d60a5ba | ||
|
|
25e55d2598 | ||
|
|
8b6c176aee | ||
|
|
050e20e7ca | ||
|
|
e04e465b4d | ||
|
|
8390e00c7f | ||
|
|
3234d5c305 | ||
|
|
ea4e4d2f0b | ||
|
|
ad6190c925 | ||
|
|
ac77cdb64e | ||
|
|
b069b78bb4 | ||
|
|
e8861957d9 | ||
|
|
dc22090a67 | ||
|
|
6b7ce1d332 | ||
|
|
894dae74fe | ||
|
|
7bdf9828d5 | ||
|
|
bfd79c2988 | ||
|
|
93848f3c89 | ||
|
|
4550b77312 | ||
|
|
a69ba6f457 | ||
|
|
091ca3910d | ||
|
|
53834bb9c4 | ||
|
|
ff0e894656 | ||
|
|
dd8f28bd3f | ||
|
|
fbe930dad2 | ||
|
|
5ecc8b5825 | ||
|
|
5dd73d029e | ||
|
|
d68e10f308 | ||
|
|
a3a59bab7b | ||
|
|
9d1e4942ab | ||
|
|
6ba621d786 | ||
|
|
04faa0bfa9 | ||
|
|
a0acdfa9e9 | ||
|
|
fdb46b5442 | ||
|
|
c066928915 | ||
|
|
61d8ff0d44 | ||
|
|
3c796e4159 | ||
|
|
a1e9bb9eae | ||
|
|
8a3dac3c19 | ||
|
|
e1af09dccb | ||
|
|
0304ad0c3d | ||
|
|
a0f574f3c2 | ||
|
|
db131b6b22 | ||
|
|
64e5bb0dc8 | ||
|
|
0f1afbe8dc | ||
|
|
0cb169900e | ||
|
|
aa827b6ad7 | ||
|
|
39c3f68758 | ||
|
|
fcbab08cbd | ||
|
|
cdbb8e6d6e | ||
|
|
5c43c43240 | ||
|
|
1a3aabcf3f | ||
|
|
cee6c6012e | ||
|
|
7f837959ea | ||
|
|
f3fe6961b2 | ||
|
|
1048ed2afa | ||
|
|
de6f892065 | ||
|
|
2f9fd5ab00 | ||
|
|
4e874ed593 | ||
|
|
7620912d84 | ||
|
|
4dd27e6d11 | ||
|
|
367e9e6e9e | ||
|
|
bf33d5c457 | ||
|
|
2ffd6783c7 | ||
|
|
fe6cfc80ec | ||
|
|
d4a7829b12 | ||
|
|
c36228c403 | ||
|
|
66f24449dd | ||
|
|
118a9eafb3 | ||
|
|
dd11f575a2 | ||
|
|
079bc3c8e3 | ||
|
|
a7bdf98d01 | ||
|
|
0a86850ba3 | ||
|
|
8b786db323 | ||
|
|
7cac9006d6 | ||
|
|
8ff2deda72 | ||
|
|
88a3ff12f0 | ||
|
|
e19de43eb5 | ||
|
|
916cf2d439 | ||
|
|
481f76c7aa | ||
|
|
5d92a1428c | ||
|
|
6812509807 | ||
|
|
2a89ce8cd4 | ||
|
|
b6c6fb7950 | ||
|
|
3b415e23a5 | ||
|
|
db5970ac6d | ||
|
|
e2f1cccc8a | ||
|
|
1678057b56 | ||
|
|
d1008fe949 | ||
|
|
394be6a0e6 | ||
|
|
faba873d4b | ||
|
|
9b3ab57acd | ||
|
|
18de00adb4 | ||
|
|
cf42d0a60c | ||
|
|
79d991eff0 | ||
|
|
713d70d6c6 | ||
|
|
e2a4ba6f9b | ||
|
|
60328ce9fb | ||
|
|
69158e554f | ||
|
|
8b04c4cd70 | ||
|
|
6d4b790021 | ||
|
|
0a7fb24716 | ||
|
|
606805bf06 | ||
|
|
3aa36b782c | ||
|
|
c978f6c451 | ||
|
|
4cce8ef74e | ||
|
|
b3a97d6dac | ||
|
|
320ef98852 | ||
|
|
3950ae51ef | ||
|
|
fc0ef72d9c | ||
|
|
a9631b7b4b | ||
|
|
2c1b9d6763 | ||
|
|
a53e0160a2 | ||
|
|
d90087cffa | ||
|
|
3a00bd1378 | ||
|
|
f23c77389d | ||
|
|
8dff4a1242 | ||
|
|
2184f61fae | ||
|
|
3345c166a4 | ||
|
|
e866e3b896 | ||
|
|
9725c59247 | ||
|
|
8a25332d94 | ||
|
|
2c1e1b153d | ||
|
|
8078dec3be | ||
|
|
3857de2194 | ||
|
|
349119a340 | ||
|
|
7000a215e6 | ||
|
|
a8f7ed28c6 | ||
|
|
aaf9ce72a0 | ||
|
|
c4ce0da6fe | ||
|
|
68626ff8e9 | ||
|
|
f57b99af22 | ||
|
|
8553f46498 | ||
|
|
5f65e62681 | ||
|
|
8144bc26a7 | ||
|
|
7c2e2c2077 | ||
|
|
f88c48f3b8 | ||
|
|
1ef9efc1e0 | ||
|
|
84d099ae11 | ||
|
|
d8a9cd8d3e | ||
|
|
c4268e3da6 | ||
|
|
3fc8fdd150 | ||
|
|
b975fa2e99 | ||
|
|
e739b20588 | ||
|
|
53f7b49f5b | ||
|
|
5ea29d7f85 | ||
|
|
6a080ea184 | ||
|
|
1ec688bf21 | ||
|
|
fefe9943ef | ||
|
|
83434df381 | ||
|
|
7078866969 | ||
|
|
4876af06dd | ||
|
|
ff22672fd6 | ||
|
|
68cd935826 | ||
|
|
13d77464c9 | ||
|
|
cc9bb3dc3f | ||
|
|
a4cf94a3c2 | ||
|
|
55f2617f8c | ||
|
|
923c995023 | ||
|
|
b74919c72e | ||
|
|
931b026844 | ||
|
|
05060e0223 | ||
|
|
15997618e2 | ||
|
|
2ccd48e921 | ||
|
|
de119063f2 | ||
|
|
759481af6d | ||
|
|
b7ddece2a6 | ||
|
|
5662e2b0f3 | ||
|
|
64d2280299 | ||
|
|
a7b06a81f0 | ||
|
|
5ecf98f59e | ||
|
|
438020732e | ||
|
|
f2af3e4fc5 | ||
|
|
d1d5fa66e4 | ||
|
|
1ec2961b3b | ||
|
|
a5545cf86d | ||
|
|
2d2acc1cf2 | ||
|
|
a3ad045286 | ||
|
|
852930add7 | ||
|
|
4642fd66df | ||
|
|
6b3ac3b8cd | ||
|
|
00e57b755c | ||
|
|
6fca1b3506 | ||
|
|
fff483ea96 | ||
|
|
f460da6031 | ||
|
|
b0f031f92a | ||
|
|
e5300063ed | ||
|
|
346476df21 | ||
|
|
f2e38ca867 | ||
|
|
649a7ead5c | ||
|
|
a827838706 | ||
|
|
a973bcb8a4 | ||
|
|
16368c8a34 | ||
|
|
c445bc0cad | ||
|
|
3c36ae17a5 | ||
|
|
42509b8fb6 | ||
|
|
90b0cdda42 | ||
|
|
12528dc42f | ||
|
|
35450519de | ||
|
|
a57df9b827 | ||
|
|
97e1159ac1 | ||
|
|
8c7d0f163d | ||
|
|
9006e125af | ||
|
|
62352c3a1b | ||
|
|
3032b54ac9 | ||
|
|
3a3a618460 | ||
|
|
f13061d515 | ||
|
|
b11450dedc | ||
|
|
111e70d75c | ||
|
|
1d9dca02f9 | ||
|
|
8d0097bef1 | ||
|
|
85223106f3 | ||
|
|
491f0dab1b | ||
|
|
77d2c05410 | ||
|
|
4db1509516 | ||
|
|
93c8b077ed | ||
|
|
f886a69916 | ||
|
|
457096e6df | ||
|
|
504c8f3483 | ||
|
|
fa361c8f65 | ||
|
|
59e64b6d5b | ||
|
|
29df3d0e9f | ||
|
|
66a4af8d96 | ||
|
|
d9e47af617 | ||
|
|
1bca21e1da | ||
|
|
6cef918a4b | ||
|
|
8ccb7f08d9 | ||
|
|
f299441cc6 | ||
|
|
f1245dc3c0 | ||
|
|
e29c44340b | ||
|
|
e66e38bbd7 | ||
|
|
b1beb3ff59 | ||
|
|
e6fbb0c121 | ||
|
|
c9f7c683ae | ||
|
|
cbabcec05c | ||
|
|
43726783e4 | ||
|
|
38e1fac886 | ||
|
|
53ee214f2f | ||
|
|
8ca39bd2c3 | ||
|
|
08c5181a8d | ||
|
|
8fa7fdd4cb | ||
|
|
2ab0b021f1 | ||
|
|
67593b1728 | ||
|
|
ef5ed5292b | ||
|
|
e7efd8f827 | ||
|
|
ff0680f69d | ||
|
|
e0c0129693 | ||
|
|
59ddcd790b | ||
|
|
e7f880ce7e | ||
|
|
98894341e7 | ||
|
|
96bb01d8ec | ||
|
|
76dbd7b8d6 | ||
|
|
67d7756fcf | ||
|
|
d378c3da78 | ||
|
|
2a266f4511 | ||
|
|
6d687ebba1 | ||
|
|
57feeab364 | ||
|
|
4e118742ca | ||
|
|
62b1ce8539 | ||
|
|
5cdca53aa0 | ||
|
|
21a212f8e5 | ||
|
|
8097659f6e | ||
|
|
f3e0f16240 | ||
|
|
6f238a7074 | ||
|
|
1a76cdf8d4 | ||
|
|
1319e53251 | ||
|
|
f2bcc6ecbf | ||
|
|
4d978d7db4 | ||
|
|
fedb632d0a | ||
|
|
244649b7d5 | ||
|
|
5ae0a4cf76 | ||
|
|
1d61a24f42 | ||
|
|
e8c36e527d | ||
|
|
96e9afe625 | ||
|
|
ea26e9a98b | ||
|
|
e5808c4cfb | ||
|
|
e866512367 | ||
|
|
f01e2ca039 | ||
|
|
a6eae69ffe | ||
|
|
1e03513f9a | ||
|
|
244dbb04f7 | ||
|
|
8718021469 | ||
|
|
70e506f0aa | ||
|
|
dc80a0762d | ||
|
|
74d3e177f0 | ||
|
|
71cccf1593 | ||
|
|
a99658074d | ||
|
|
2f6afdd8b4 | ||
|
|
831b31e563 | ||
|
|
177b2d0c19 | ||
|
|
b099ef07d6 | ||
|
|
0e0a2817a2 | ||
|
|
6920e58136 | ||
|
|
8bbe87f42d | ||
|
|
24110255cd | ||
|
|
95e41f368b | ||
|
|
e060bf4462 | ||
|
|
91e886d615 | ||
|
|
1b1489ff18 | ||
|
|
7d2824395f | ||
|
|
e35d44c01d | ||
|
|
3630825612 | ||
|
|
96bc110a68 | ||
|
|
5a5cf6460e | ||
|
|
6418b0379f | ||
|
|
e07a8caf58 | ||
|
|
b44bdd7f7b | ||
|
|
434716e1d3 | ||
|
|
890c0c041d | ||
|
|
46613aaf79 | ||
|
|
e452973fd2 | ||
|
|
f6f7511a4c | ||
|
|
231252516c | ||
|
|
5c5516f80e | ||
|
|
ac51bd581a | ||
|
|
a3f11567d9 | ||
|
|
98c4e35e3c | ||
|
|
03619324fc | ||
|
|
789606577a | ||
|
|
cc32fa7358 | ||
|
|
2b2344652b | ||
|
|
b8ee03caff | ||
|
|
4241a10673 | ||
|
|
6efb2b0ad4 | ||
|
|
c2b4621630 | ||
|
|
7d2532be36 | ||
|
|
bd6dc17221 | ||
|
|
fed493c5fd | ||
|
|
2d11ea385c | ||
|
|
d0a43d431e | ||
|
|
e186c660b1 | ||
|
|
e47e5a2dcd | ||
|
|
1e5a50302f | ||
|
|
9549d557ea | ||
|
|
cf92fbb8aa | ||
|
|
7e80c84902 | ||
|
|
6b1fa3293d | ||
|
|
63d9a00bf1 | ||
|
|
2a07c5ded6 | ||
|
|
3cc7f43e8d | ||
|
|
a3fbc23c39 | ||
|
|
cb6d4d07b1 | ||
|
|
803291728c | ||
|
|
34fd1f7ab5 | ||
|
|
d0f095625c | ||
|
|
ce74a6685d | ||
|
|
ea8f6e611b | ||
|
|
1ad06ee6eb | ||
|
|
b9df7f70bb | ||
|
|
c746889bb0 | ||
|
|
9dbd006607 | ||
|
|
243f0ba6ce | ||
|
|
df3323a7cf | ||
|
|
0df618f813 | ||
|
|
aad40e38e1 | ||
|
|
476a89707a | ||
|
|
c7b99a1180 | ||
|
|
fcd6961441 | ||
|
|
ef345c5a7b | ||
|
|
191dc98f80 | ||
|
|
6f6a4bfc07 | ||
|
|
ec0a7b9034 | ||
|
|
dd8e24f42e | ||
|
|
2292dc35fc |
Binary file not shown.
@@ -1,41 +1,10 @@
|
|||||||
# This file serves as a blacklist for SyTest tests that we expect will fail in
|
# This file serves as a blacklist for SyTest tests that we expect will fail in
|
||||||
# Synapse when run under worker mode. For more details, see sytest-blacklist.
|
# Synapse when run under worker mode. For more details, see sytest-blacklist.
|
||||||
|
|
||||||
Message history can be paginated
|
|
||||||
|
|
||||||
Can re-join room if re-invited
|
Can re-join room if re-invited
|
||||||
|
|
||||||
The only membership state included in an initial sync is for all the senders in the timeline
|
|
||||||
|
|
||||||
Local device key changes get to remote servers
|
|
||||||
|
|
||||||
If remote user leaves room we no longer receive device updates
|
|
||||||
|
|
||||||
Forgotten room messages cannot be paginated
|
|
||||||
|
|
||||||
Inbound federation can get public room list
|
|
||||||
|
|
||||||
Members from the gap are included in gappy incr LL sync
|
|
||||||
|
|
||||||
Leaves are present in non-gapped incremental syncs
|
|
||||||
|
|
||||||
Old leaves are present in gapped incremental syncs
|
|
||||||
|
|
||||||
User sees updates to presence from other users in the incremental sync.
|
|
||||||
|
|
||||||
Gapped incremental syncs include all state changes
|
|
||||||
|
|
||||||
Old members are included in gappy incr LL sync if they start speaking
|
|
||||||
|
|
||||||
# new failures as of https://github.com/matrix-org/sytest/pull/732
|
# new failures as of https://github.com/matrix-org/sytest/pull/732
|
||||||
Device list doesn't change if remote server is down
|
Device list doesn't change if remote server is down
|
||||||
Remote servers cannot set power levels in rooms without existing powerlevels
|
|
||||||
Remote servers should reject attempts by non-creators to set the power levels
|
|
||||||
|
|
||||||
# https://buildkite.com/matrix-dot-org/synapse/builds/6134#6f67bf47-e234-474d-80e8-c6e1868b15c5
|
# https://buildkite.com/matrix-dot-org/synapse/builds/6134#6f67bf47-e234-474d-80e8-c6e1868b15c5
|
||||||
Server correctly handles incoming m.device_list_update
|
Server correctly handles incoming m.device_list_update
|
||||||
|
|
||||||
# this fails reliably with a torture level of 100 due to https://github.com/matrix-org/synapse/issues/6536
|
|
||||||
Outbound federation requests missing prev_events and then asks for /state_ids and resolves the state
|
|
||||||
|
|
||||||
Can get rooms/{roomId}/members at a given point
|
|
||||||
|
|||||||
@@ -1,24 +1,36 @@
|
|||||||
version: 2
|
version: 2.1
|
||||||
jobs:
|
jobs:
|
||||||
dockerhubuploadrelease:
|
dockerhubuploadrelease:
|
||||||
machine: true
|
docker:
|
||||||
|
- image: docker:git
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- run: docker build -f docker/Dockerfile --label gitsha1=${CIRCLE_SHA1} -t matrixdotorg/synapse:${CIRCLE_TAG} -t matrixdotorg/synapse:${CIRCLE_TAG}-py3 .
|
- setup_remote_docker
|
||||||
|
- docker_prepare
|
||||||
- run: docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
|
- run: docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
|
||||||
- run: docker push matrixdotorg/synapse:${CIRCLE_TAG}
|
- docker_build:
|
||||||
- run: docker push matrixdotorg/synapse:${CIRCLE_TAG}-py3
|
tag: -t matrixdotorg/synapse:${CIRCLE_TAG}
|
||||||
|
platforms: linux/amd64
|
||||||
|
- docker_build:
|
||||||
|
tag: -t matrixdotorg/synapse:${CIRCLE_TAG}
|
||||||
|
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||||
|
|
||||||
dockerhubuploadlatest:
|
dockerhubuploadlatest:
|
||||||
machine: true
|
docker:
|
||||||
|
- image: docker:git
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- run: docker build -f docker/Dockerfile --label gitsha1=${CIRCLE_SHA1} -t matrixdotorg/synapse:latest -t matrixdotorg/synapse:latest-py3 .
|
- setup_remote_docker
|
||||||
|
- docker_prepare
|
||||||
- run: docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
|
- run: docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
|
||||||
- run: docker push matrixdotorg/synapse:latest
|
- docker_build:
|
||||||
- run: docker push matrixdotorg/synapse:latest-py3
|
tag: -t matrixdotorg/synapse:latest
|
||||||
|
platforms: linux/amd64
|
||||||
|
- docker_build:
|
||||||
|
tag: -t matrixdotorg/synapse:latest
|
||||||
|
platforms: linux/amd64,linux/arm/v7,linux/arm64
|
||||||
|
|
||||||
workflows:
|
workflows:
|
||||||
version: 2
|
|
||||||
build:
|
build:
|
||||||
jobs:
|
jobs:
|
||||||
- dockerhubuploadrelease:
|
- dockerhubuploadrelease:
|
||||||
@@ -31,3 +43,33 @@ workflows:
|
|||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
only: master
|
only: master
|
||||||
|
|
||||||
|
commands:
|
||||||
|
docker_prepare:
|
||||||
|
description: Downloads the buildx cli plugin and enables multiarch images
|
||||||
|
parameters:
|
||||||
|
buildx_version:
|
||||||
|
type: string
|
||||||
|
default: "v0.4.1"
|
||||||
|
steps:
|
||||||
|
- run: apk add --no-cache curl
|
||||||
|
- run: mkdir -vp ~/.docker/cli-plugins/ ~/dockercache
|
||||||
|
- run: curl --silent -L "https://github.com/docker/buildx/releases/download/<< parameters.buildx_version >>/buildx-<< parameters.buildx_version >>.linux-amd64" > ~/.docker/cli-plugins/docker-buildx
|
||||||
|
- run: chmod a+x ~/.docker/cli-plugins/docker-buildx
|
||||||
|
# install qemu links in /proc/sys/fs/binfmt_misc on the docker instance running the circleci job
|
||||||
|
- run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||||
|
# create a context named `builder` for the builds
|
||||||
|
- run: docker context create builder
|
||||||
|
# create a buildx builder using the new context, and set it as the default
|
||||||
|
- run: docker buildx create builder --use
|
||||||
|
|
||||||
|
docker_build:
|
||||||
|
description: Builds and pushed images to dockerhub using buildx
|
||||||
|
parameters:
|
||||||
|
platforms:
|
||||||
|
type: string
|
||||||
|
default: linux/amd64
|
||||||
|
tag:
|
||||||
|
type: string
|
||||||
|
steps:
|
||||||
|
- run: docker buildx build -f docker/Dockerfile --push --platform << parameters.platforms >> --label gitsha1=${CIRCLE_SHA1} << parameters.tag >> --progress=plain .
|
||||||
|
|||||||
4
.github/ISSUE_TEMPLATE/BUG_REPORT.md
vendored
4
.github/ISSUE_TEMPLATE/BUG_REPORT.md
vendored
@@ -4,12 +4,12 @@ about: Create a report to help us improve
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
**THIS IS NOT A SUPPORT CHANNEL!**
|
**THIS IS NOT A SUPPORT CHANNEL!**
|
||||||
**IF YOU HAVE SUPPORT QUESTIONS ABOUT RUNNING OR CONFIGURING YOUR OWN HOME SERVER**,
|
**IF YOU HAVE SUPPORT QUESTIONS ABOUT RUNNING OR CONFIGURING YOUR OWN HOME SERVER**,
|
||||||
please ask in **#synapse:matrix.org** (using a matrix.org account if necessary)
|
please ask in **#synapse:matrix.org** (using a matrix.org account if necessary)
|
||||||
|
|
||||||
<!--
|
|
||||||
|
|
||||||
If you want to report a security issue, please see https://matrix.org/security-disclosure-policy/
|
If you want to report a security issue, please see https://matrix.org/security-disclosure-policy/
|
||||||
|
|
||||||
This is a bug report template. By following the instructions below and
|
This is a bug report template. By following the instructions below and
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -21,6 +21,7 @@ _trial_temp*/
|
|||||||
/.python-version
|
/.python-version
|
||||||
/*.signing.key
|
/*.signing.key
|
||||||
/env/
|
/env/
|
||||||
|
/.venv*/
|
||||||
/homeserver*.yaml
|
/homeserver*.yaml
|
||||||
/logs
|
/logs
|
||||||
/media_store/
|
/media_store/
|
||||||
|
|||||||
889
CHANGES.md
889
CHANGES.md
@@ -1,3 +1,892 @@
|
|||||||
|
Synapse 1.22.1 (2020-10-30)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a bug where an appservice may not be forwarded events for a room it was recently invited to. Broke in v1.22.0. ([\#8676](https://github.com/matrix-org/synapse/issues/8676))
|
||||||
|
- Fix `Object of type frozendict is not JSON serializable` exceptions when using third-party event rules. Broke in v1.22.0. ([\#8678](https://github.com/matrix-org/synapse/issues/8678))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.22.0 (2020-10-27)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
No significant changes.
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.22.0rc2 (2020-10-26)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix bugs where ephemeral events were not sent to appservices. Broke in v1.22.0rc1. ([\#8648](https://github.com/matrix-org/synapse/issues/8648), [\#8656](https://github.com/matrix-org/synapse/issues/8656))
|
||||||
|
- Fix `user_daily_visits` table to not have duplicate rows per user/device due to multiple user agents. Broke in v1.22.0rc1. ([\#8654](https://github.com/matrix-org/synapse/issues/8654))
|
||||||
|
|
||||||
|
Synapse 1.22.0rc1 (2020-10-22)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Add a configuration option for always using the "userinfo endpoint" for OpenID Connect. This fixes support for some identity providers, e.g. GitLab. Contributed by Benjamin Koch. ([\#7658](https://github.com/matrix-org/synapse/issues/7658))
|
||||||
|
- Add ability for `ThirdPartyEventRules` modules to query and manipulate whether a room is in the public rooms directory. ([\#8292](https://github.com/matrix-org/synapse/issues/8292), [\#8467](https://github.com/matrix-org/synapse/issues/8467))
|
||||||
|
- Add support for olm fallback keys ([MSC2732](https://github.com/matrix-org/matrix-doc/pull/2732)). ([\#8312](https://github.com/matrix-org/synapse/issues/8312), [\#8501](https://github.com/matrix-org/synapse/issues/8501))
|
||||||
|
- Add support for running background tasks in a separate worker process. ([\#8369](https://github.com/matrix-org/synapse/issues/8369), [\#8458](https://github.com/matrix-org/synapse/issues/8458), [\#8489](https://github.com/matrix-org/synapse/issues/8489), [\#8513](https://github.com/matrix-org/synapse/issues/8513), [\#8544](https://github.com/matrix-org/synapse/issues/8544), [\#8599](https://github.com/matrix-org/synapse/issues/8599))
|
||||||
|
- Add support for device dehydration ([MSC2697](https://github.com/matrix-org/matrix-doc/pull/2697)). ([\#8380](https://github.com/matrix-org/synapse/issues/8380))
|
||||||
|
- Add support for [MSC2409](https://github.com/matrix-org/matrix-doc/pull/2409), which allows sending typing, read receipts, and presence events to appservices. ([\#8437](https://github.com/matrix-org/synapse/issues/8437), [\#8590](https://github.com/matrix-org/synapse/issues/8590))
|
||||||
|
- Change default room version to "6", per [MSC2788](https://github.com/matrix-org/matrix-doc/pull/2788). ([\#8461](https://github.com/matrix-org/synapse/issues/8461))
|
||||||
|
- Add the ability to send non-membership events into a room via the `ModuleApi`. ([\#8479](https://github.com/matrix-org/synapse/issues/8479))
|
||||||
|
- Increase default upload size limit from 10M to 50M. Contributed by @Akkowicz. ([\#8502](https://github.com/matrix-org/synapse/issues/8502))
|
||||||
|
- Add support for modifying event content in `ThirdPartyRules` modules. ([\#8535](https://github.com/matrix-org/synapse/issues/8535), [\#8564](https://github.com/matrix-org/synapse/issues/8564))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a longstanding bug where invalid ignored users in account data could break clients. ([\#8454](https://github.com/matrix-org/synapse/issues/8454))
|
||||||
|
- Fix a bug where backfilling a room with an event that was missing the `redacts` field would break. ([\#8457](https://github.com/matrix-org/synapse/issues/8457))
|
||||||
|
- Don't attempt to respond to some requests if the client has already disconnected. ([\#8465](https://github.com/matrix-org/synapse/issues/8465))
|
||||||
|
- Fix message duplication if something goes wrong after persisting the event. ([\#8476](https://github.com/matrix-org/synapse/issues/8476))
|
||||||
|
- Fix incremental sync returning an incorrect `prev_batch` token in timeline section, which when used to paginate returned events that were included in the incremental sync. Broken since v0.16.0. ([\#8486](https://github.com/matrix-org/synapse/issues/8486))
|
||||||
|
- Expose the `uk.half-shot.msc2778.login.application_service` to clients from the login API. This feature was added in v1.21.0, but was not exposed as a potential login flow. ([\#8504](https://github.com/matrix-org/synapse/issues/8504))
|
||||||
|
- Fix error code for `/profile/{userId}/displayname` to be `M_BAD_JSON`. ([\#8517](https://github.com/matrix-org/synapse/issues/8517))
|
||||||
|
- Fix a bug introduced in v1.7.0 that could cause Synapse to insert values from non-state `m.room.retention` events into the `room_retention` database table. ([\#8527](https://github.com/matrix-org/synapse/issues/8527))
|
||||||
|
- Fix not sending events over federation when using sharded event writers. ([\#8536](https://github.com/matrix-org/synapse/issues/8536))
|
||||||
|
- Fix a long standing bug where email notifications for encrypted messages were blank. ([\#8545](https://github.com/matrix-org/synapse/issues/8545))
|
||||||
|
- Fix increase in the number of `There was no active span...` errors logged when using OpenTracing. ([\#8567](https://github.com/matrix-org/synapse/issues/8567))
|
||||||
|
- Fix a bug that prevented errors encountered during execution of the `synapse_port_db` from being correctly printed. ([\#8585](https://github.com/matrix-org/synapse/issues/8585))
|
||||||
|
- Fix appservice transactions to only include a maximum of 100 persistent and 100 ephemeral events. ([\#8606](https://github.com/matrix-org/synapse/issues/8606))
|
||||||
|
|
||||||
|
|
||||||
|
Updates to the Docker image
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
- Added multi-arch support (arm64,arm/v7) for the docker images. Contributed by @maquis196. ([\#7921](https://github.com/matrix-org/synapse/issues/7921))
|
||||||
|
- Add support for passing commandline args to the synapse process. Contributed by @samuel-p. ([\#8390](https://github.com/matrix-org/synapse/issues/8390))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Update the directions for using the manhole with coroutines. ([\#8462](https://github.com/matrix-org/synapse/issues/8462))
|
||||||
|
- Improve readme by adding new shield.io badges. ([\#8493](https://github.com/matrix-org/synapse/issues/8493))
|
||||||
|
- Added note about docker in manhole.md regarding which ip address to bind to. Contributed by @Maquis196. ([\#8526](https://github.com/matrix-org/synapse/issues/8526))
|
||||||
|
- Document the new behaviour of the `allowed_lifetime_min` and `allowed_lifetime_max` settings in the room retention configuration. ([\#8529](https://github.com/matrix-org/synapse/issues/8529))
|
||||||
|
|
||||||
|
|
||||||
|
Deprecations and Removals
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
- Drop unused `device_max_stream_id` table. ([\#8589](https://github.com/matrix-org/synapse/issues/8589))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Check for unreachable code with mypy. ([\#8432](https://github.com/matrix-org/synapse/issues/8432))
|
||||||
|
- Add unit test for event persister sharding. ([\#8433](https://github.com/matrix-org/synapse/issues/8433))
|
||||||
|
- Allow events to be sent to clients sooner when using sharded event persisters. ([\#8439](https://github.com/matrix-org/synapse/issues/8439), [\#8488](https://github.com/matrix-org/synapse/issues/8488), [\#8496](https://github.com/matrix-org/synapse/issues/8496), [\#8499](https://github.com/matrix-org/synapse/issues/8499))
|
||||||
|
- Configure `public_baseurl` when using demo scripts. ([\#8443](https://github.com/matrix-org/synapse/issues/8443))
|
||||||
|
- Add SQL logging on queries that happen during startup. ([\#8448](https://github.com/matrix-org/synapse/issues/8448))
|
||||||
|
- Speed up unit tests when using PostgreSQL. ([\#8450](https://github.com/matrix-org/synapse/issues/8450))
|
||||||
|
- Remove redundant database loads of stream_ordering for events we already have. ([\#8452](https://github.com/matrix-org/synapse/issues/8452))
|
||||||
|
- Reduce inconsistencies between codepaths for membership and non-membership events. ([\#8463](https://github.com/matrix-org/synapse/issues/8463))
|
||||||
|
- Combine `SpamCheckerApi` with the more generic `ModuleApi`. ([\#8464](https://github.com/matrix-org/synapse/issues/8464))
|
||||||
|
- Additional testing for `ThirdPartyEventRules`. ([\#8468](https://github.com/matrix-org/synapse/issues/8468))
|
||||||
|
- Add `-d` option to `./scripts-dev/lint.sh` to lint files that have changed since the last git commit. ([\#8472](https://github.com/matrix-org/synapse/issues/8472))
|
||||||
|
- Unblacklist some sytests. ([\#8474](https://github.com/matrix-org/synapse/issues/8474))
|
||||||
|
- Include the log level in the phone home stats. ([\#8477](https://github.com/matrix-org/synapse/issues/8477))
|
||||||
|
- Remove outdated sphinx documentation, scripts and configuration. ([\#8480](https://github.com/matrix-org/synapse/issues/8480))
|
||||||
|
- Clarify error message when plugin config parsers raise an error. ([\#8492](https://github.com/matrix-org/synapse/issues/8492))
|
||||||
|
- Remove the deprecated `Handlers` object. ([\#8494](https://github.com/matrix-org/synapse/issues/8494))
|
||||||
|
- Fix a threadsafety bug in unit tests. ([\#8497](https://github.com/matrix-org/synapse/issues/8497))
|
||||||
|
- Add user agent to user_daily_visits table. ([\#8503](https://github.com/matrix-org/synapse/issues/8503))
|
||||||
|
- Add type hints to various parts of the code base. ([\#8407](https://github.com/matrix-org/synapse/issues/8407), [\#8505](https://github.com/matrix-org/synapse/issues/8505), [\#8507](https://github.com/matrix-org/synapse/issues/8507), [\#8547](https://github.com/matrix-org/synapse/issues/8547), [\#8562](https://github.com/matrix-org/synapse/issues/8562), [\#8609](https://github.com/matrix-org/synapse/issues/8609))
|
||||||
|
- Remove unused code from the test framework. ([\#8514](https://github.com/matrix-org/synapse/issues/8514))
|
||||||
|
- Apply some internal fixes to the `HomeServer` class to make its code more idiomatic and statically-verifiable. ([\#8515](https://github.com/matrix-org/synapse/issues/8515))
|
||||||
|
- Factor out common code between `RoomMemberHandler._locally_reject_invite` and `EventCreationHandler.create_event`. ([\#8537](https://github.com/matrix-org/synapse/issues/8537))
|
||||||
|
- Improve database performance by executing more queries without starting transactions. ([\#8542](https://github.com/matrix-org/synapse/issues/8542))
|
||||||
|
- Rename `Cache` to `DeferredCache`, to better reflect its purpose. ([\#8548](https://github.com/matrix-org/synapse/issues/8548))
|
||||||
|
- Move metric registration code down into `LruCache`. ([\#8561](https://github.com/matrix-org/synapse/issues/8561), [\#8591](https://github.com/matrix-org/synapse/issues/8591))
|
||||||
|
- Replace `DeferredCache` with the lighter-weight `LruCache` where possible. ([\#8563](https://github.com/matrix-org/synapse/issues/8563))
|
||||||
|
- Add virtualenv-generated folders to `.gitignore`. ([\#8566](https://github.com/matrix-org/synapse/issues/8566))
|
||||||
|
- Add `get_immediate` method to `DeferredCache`. ([\#8568](https://github.com/matrix-org/synapse/issues/8568))
|
||||||
|
- Fix mypy not properly checking across the codebase, additionally, fix a typing assertion error in `handlers/auth.py`. ([\#8569](https://github.com/matrix-org/synapse/issues/8569))
|
||||||
|
- Fix `synmark` benchmark runner. ([\#8571](https://github.com/matrix-org/synapse/issues/8571))
|
||||||
|
- Modify `DeferredCache.get()` to return `Deferred`s instead of `ObservableDeferred`s. ([\#8572](https://github.com/matrix-org/synapse/issues/8572))
|
||||||
|
- Adjust a protocol-type definition to fit `sqlite3` assertions. ([\#8577](https://github.com/matrix-org/synapse/issues/8577))
|
||||||
|
- Support macOS on the `synmark` benchmark runner. ([\#8578](https://github.com/matrix-org/synapse/issues/8578))
|
||||||
|
- Update `mypy` static type checker to 0.790. ([\#8583](https://github.com/matrix-org/synapse/issues/8583), [\#8600](https://github.com/matrix-org/synapse/issues/8600))
|
||||||
|
- Re-organize the structured logging code to separate the TCP transport handling from the JSON formatting. ([\#8587](https://github.com/matrix-org/synapse/issues/8587))
|
||||||
|
- Remove extraneous unittest logging decorators from unit tests. ([\#8592](https://github.com/matrix-org/synapse/issues/8592))
|
||||||
|
- Minor optimisations in caching code. ([\#8593](https://github.com/matrix-org/synapse/issues/8593), [\#8594](https://github.com/matrix-org/synapse/issues/8594))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.21.2 (2020-10-15)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Debian packages and Docker images have been rebuilt using the latest versions of dependency libraries, including authlib 0.15.1. Please see bugfixes below.
|
||||||
|
|
||||||
|
Security advisory
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* HTML pages served via Synapse were vulnerable to cross-site scripting (XSS)
|
||||||
|
attacks. All server administrators are encouraged to upgrade.
|
||||||
|
([\#8444](https://github.com/matrix-org/synapse/pull/8444))
|
||||||
|
([CVE-2020-26891](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26891))
|
||||||
|
|
||||||
|
This fix was originally included in v1.21.0 but was missing a security advisory.
|
||||||
|
|
||||||
|
This was reported by [Denis Kasak](https://github.com/dkasak).
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix rare bug where sending an event would fail due to a racey assertion. ([\#8530](https://github.com/matrix-org/synapse/issues/8530))
|
||||||
|
- An updated version of the authlib dependency is included in the Docker and Debian images to fix an issue using OpenID Connect. See [\#8534](https://github.com/matrix-org/synapse/issues/8534) for details.
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.21.1 (2020-10-13)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
This release fixes a regression in v1.21.0 that prevented debian packages from being built.
|
||||||
|
It is otherwise identical to v1.21.0.
|
||||||
|
|
||||||
|
Synapse 1.21.0 (2020-10-12)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
No significant changes since v1.21.0rc3.
|
||||||
|
|
||||||
|
As [noted in
|
||||||
|
v1.20.0](https://github.com/matrix-org/synapse/blob/release-v1.21.0/CHANGES.md#synapse-1200-2020-09-22),
|
||||||
|
a future release will drop support for accessing Synapse's
|
||||||
|
[Admin API](https://github.com/matrix-org/synapse/tree/master/docs/admin_api) under the
|
||||||
|
`/_matrix/client/*` endpoint prefixes. At that point, the Admin API will only
|
||||||
|
be accessible under `/_synapse/admin`.
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.21.0rc3 (2020-10-08)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix duplication of events on high traffic servers, caused by PostgreSQL `could not serialize access due to concurrent update` errors. ([\#8456](https://github.com/matrix-org/synapse/issues/8456))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Add Groovy Gorilla to the list of distributions we build `.deb`s for. ([\#8475](https://github.com/matrix-org/synapse/issues/8475))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.21.0rc2 (2020-10-02)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Convert additional templates from inline HTML to Jinja2 templates. ([\#8444](https://github.com/matrix-org/synapse/issues/8444))
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a regression in v1.21.0rc1 which broke thumbnails of remote media. ([\#8438](https://github.com/matrix-org/synapse/issues/8438))
|
||||||
|
- Do not expose the experimental `uk.half-shot.msc2778.login.application_service` flow in the login API, which caused a compatibility problem with Element iOS. ([\#8440](https://github.com/matrix-org/synapse/issues/8440))
|
||||||
|
- Fix malformed log line in new federation "catch up" logic. ([\#8442](https://github.com/matrix-org/synapse/issues/8442))
|
||||||
|
- Fix DB query on startup for negative streams which caused long start up times. Introduced in [\#8374](https://github.com/matrix-org/synapse/issues/8374). ([\#8447](https://github.com/matrix-org/synapse/issues/8447))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.21.0rc1 (2020-10-01)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Require the user to confirm that their password should be reset after clicking the email confirmation link. ([\#8004](https://github.com/matrix-org/synapse/issues/8004))
|
||||||
|
- Add an admin API `GET /_synapse/admin/v1/event_reports` to read entries of table `event_reports`. Contributed by @dklimpel. ([\#8217](https://github.com/matrix-org/synapse/issues/8217))
|
||||||
|
- Consolidate the SSO error template across all configuration. ([\#8248](https://github.com/matrix-org/synapse/issues/8248), [\#8405](https://github.com/matrix-org/synapse/issues/8405))
|
||||||
|
- Add a configuration option to specify a whitelist of domains that a user can be redirected to after validating their email or phone number. ([\#8275](https://github.com/matrix-org/synapse/issues/8275), [\#8417](https://github.com/matrix-org/synapse/issues/8417))
|
||||||
|
- Add experimental support for sharding event persister. ([\#8294](https://github.com/matrix-org/synapse/issues/8294), [\#8387](https://github.com/matrix-org/synapse/issues/8387), [\#8396](https://github.com/matrix-org/synapse/issues/8396), [\#8419](https://github.com/matrix-org/synapse/issues/8419))
|
||||||
|
- Add the room topic and avatar to the room details admin API. ([\#8305](https://github.com/matrix-org/synapse/issues/8305))
|
||||||
|
- Add an admin API for querying rooms where a user is a member. Contributed by @dklimpel. ([\#8306](https://github.com/matrix-org/synapse/issues/8306))
|
||||||
|
- Add `uk.half-shot.msc2778.login.application_service` login type to allow appservices to login. ([\#8320](https://github.com/matrix-org/synapse/issues/8320))
|
||||||
|
- Add a configuration option that allows existing users to log in with OpenID Connect. Contributed by @BBBSnowball and @OmmyZhang. ([\#8345](https://github.com/matrix-org/synapse/issues/8345))
|
||||||
|
- Add prometheus metrics for replication requests. ([\#8406](https://github.com/matrix-org/synapse/issues/8406))
|
||||||
|
- Support passing additional single sign-on parameters to the client. ([\#8413](https://github.com/matrix-org/synapse/issues/8413))
|
||||||
|
- Add experimental reporting of metrics on expensive rooms for state-resolution. ([\#8420](https://github.com/matrix-org/synapse/issues/8420))
|
||||||
|
- Add experimental prometheus metric to track numbers of "large" rooms for state resolutiom. ([\#8425](https://github.com/matrix-org/synapse/issues/8425))
|
||||||
|
- Add prometheus metrics to track federation delays. ([\#8430](https://github.com/matrix-org/synapse/issues/8430))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a bug in the media repository where remote thumbnails with the same size but different crop methods would overwrite each other. Contributed by @deepbluev7. ([\#7124](https://github.com/matrix-org/synapse/issues/7124))
|
||||||
|
- Fix inconsistent handling of non-existent push rules, and stop tracking the `enabled` state of removed push rules. ([\#7796](https://github.com/matrix-org/synapse/issues/7796))
|
||||||
|
- Fix a longstanding bug when storing a media file with an empty `upload_name`. ([\#7905](https://github.com/matrix-org/synapse/issues/7905))
|
||||||
|
- Fix messages not being sent over federation until an event is sent into the same room. ([\#8230](https://github.com/matrix-org/synapse/issues/8230), [\#8247](https://github.com/matrix-org/synapse/issues/8247), [\#8258](https://github.com/matrix-org/synapse/issues/8258), [\#8272](https://github.com/matrix-org/synapse/issues/8272), [\#8322](https://github.com/matrix-org/synapse/issues/8322))
|
||||||
|
- Fix a longstanding bug where files that could not be thumbnailed would result in an Internal Server Error. ([\#8236](https://github.com/matrix-org/synapse/issues/8236), [\#8435](https://github.com/matrix-org/synapse/issues/8435))
|
||||||
|
- Upgrade minimum version of `canonicaljson` to version 1.4.0, to fix an unicode encoding issue. ([\#8262](https://github.com/matrix-org/synapse/issues/8262))
|
||||||
|
- Fix longstanding bug which could lead to incomplete database upgrades on SQLite. ([\#8265](https://github.com/matrix-org/synapse/issues/8265))
|
||||||
|
- Fix stack overflow when stderr is redirected to the logging system, and the logging system encounters an error. ([\#8268](https://github.com/matrix-org/synapse/issues/8268))
|
||||||
|
- Fix a bug which cause the logging system to report errors, if `DEBUG` was enabled and no `context` filter was applied. ([\#8278](https://github.com/matrix-org/synapse/issues/8278))
|
||||||
|
- Fix edge case where push could get delayed for a user until a later event was pushed. ([\#8287](https://github.com/matrix-org/synapse/issues/8287))
|
||||||
|
- Fix fetching malformed events from remote servers. ([\#8324](https://github.com/matrix-org/synapse/issues/8324))
|
||||||
|
- Fix `UnboundLocalError` from occuring when appservices send a malformed register request. ([\#8329](https://github.com/matrix-org/synapse/issues/8329))
|
||||||
|
- Don't send push notifications to expired user accounts. ([\#8353](https://github.com/matrix-org/synapse/issues/8353))
|
||||||
|
- Fix a regression in v1.19.0 with reactivating users through the admin API. ([\#8362](https://github.com/matrix-org/synapse/issues/8362))
|
||||||
|
- Fix a bug where during device registration the length of the device name wasn't limited. ([\#8364](https://github.com/matrix-org/synapse/issues/8364))
|
||||||
|
- Include `guest_access` in the fields that are checked for null bytes when updating `room_stats_state`. Broke in v1.7.2. ([\#8373](https://github.com/matrix-org/synapse/issues/8373))
|
||||||
|
- Fix theoretical race condition where events are not sent down `/sync` if the synchrotron worker is restarted without restarting other workers. ([\#8374](https://github.com/matrix-org/synapse/issues/8374))
|
||||||
|
- Fix a bug which could cause errors in rooms with malformed membership events, on servers using sqlite. ([\#8385](https://github.com/matrix-org/synapse/issues/8385))
|
||||||
|
- Fix "Re-starting finished log context" warning when receiving an event we already had over federation. ([\#8398](https://github.com/matrix-org/synapse/issues/8398))
|
||||||
|
- Fix incorrect handling of timeouts on outgoing HTTP requests. ([\#8400](https://github.com/matrix-org/synapse/issues/8400))
|
||||||
|
- Fix a regression in v1.20.0 in the `synapse_port_db` script regarding the `ui_auth_sessions_ips` table. ([\#8410](https://github.com/matrix-org/synapse/issues/8410))
|
||||||
|
- Remove unnecessary 3PID registration check when resetting password via an email address. Bug introduced in v0.34.0rc2. ([\#8414](https://github.com/matrix-org/synapse/issues/8414))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Add `/_synapse/client` to the reverse proxy documentation. ([\#8227](https://github.com/matrix-org/synapse/issues/8227))
|
||||||
|
- Add note to the reverse proxy settings documentation about disabling Apache's mod_security2. Contributed by Julian Fietkau (@jfietkau). ([\#8375](https://github.com/matrix-org/synapse/issues/8375))
|
||||||
|
- Improve description of `server_name` config option in `homserver.yaml`. ([\#8415](https://github.com/matrix-org/synapse/issues/8415))
|
||||||
|
|
||||||
|
|
||||||
|
Deprecations and Removals
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
- Drop support for `prometheus_client` older than 0.4.0. ([\#8426](https://github.com/matrix-org/synapse/issues/8426))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Fix tests on distros which disable TLSv1.0. Contributed by @danc86. ([\#8208](https://github.com/matrix-org/synapse/issues/8208))
|
||||||
|
- Simplify the distributor code to avoid unnecessary work. ([\#8216](https://github.com/matrix-org/synapse/issues/8216))
|
||||||
|
- Remove the `populate_stats_process_rooms_2` background job and restore functionality to `populate_stats_process_rooms`. ([\#8243](https://github.com/matrix-org/synapse/issues/8243))
|
||||||
|
- Clean up type hints for `PaginationConfig`. ([\#8250](https://github.com/matrix-org/synapse/issues/8250), [\#8282](https://github.com/matrix-org/synapse/issues/8282))
|
||||||
|
- Track the latest event for every destination and room for catch-up after federation outage. ([\#8256](https://github.com/matrix-org/synapse/issues/8256))
|
||||||
|
- Fix non-user visible bug in implementation of `MultiWriterIdGenerator.get_current_token_for_writer`. ([\#8257](https://github.com/matrix-org/synapse/issues/8257))
|
||||||
|
- Switch to the JSON implementation from the standard library. ([\#8259](https://github.com/matrix-org/synapse/issues/8259))
|
||||||
|
- Add type hints to `synapse.util.async_helpers`. ([\#8260](https://github.com/matrix-org/synapse/issues/8260))
|
||||||
|
- Simplify tests that mock asynchronous functions. ([\#8261](https://github.com/matrix-org/synapse/issues/8261))
|
||||||
|
- Add type hints to `StreamToken` and `RoomStreamToken` classes. ([\#8279](https://github.com/matrix-org/synapse/issues/8279))
|
||||||
|
- Change `StreamToken.room_key` to be a `RoomStreamToken` instance. ([\#8281](https://github.com/matrix-org/synapse/issues/8281))
|
||||||
|
- Refactor notifier code to correctly use the max event stream position. ([\#8288](https://github.com/matrix-org/synapse/issues/8288))
|
||||||
|
- Use slotted classes where possible. ([\#8296](https://github.com/matrix-org/synapse/issues/8296))
|
||||||
|
- Support testing the local Synapse checkout against the [Complement homeserver test suite](https://github.com/matrix-org/complement/). ([\#8317](https://github.com/matrix-org/synapse/issues/8317))
|
||||||
|
- Update outdated usages of `metaclass` to python 3 syntax. ([\#8326](https://github.com/matrix-org/synapse/issues/8326))
|
||||||
|
- Move lint-related dependencies to package-extra field, update CONTRIBUTING.md to utilise this. ([\#8330](https://github.com/matrix-org/synapse/issues/8330), [\#8377](https://github.com/matrix-org/synapse/issues/8377))
|
||||||
|
- Use the `admin_patterns` helper in additional locations. ([\#8331](https://github.com/matrix-org/synapse/issues/8331))
|
||||||
|
- Fix test logging to allow braces in log output. ([\#8335](https://github.com/matrix-org/synapse/issues/8335))
|
||||||
|
- Remove `__future__` imports related to Python 2 compatibility. ([\#8337](https://github.com/matrix-org/synapse/issues/8337))
|
||||||
|
- Simplify `super()` calls to Python 3 syntax. ([\#8344](https://github.com/matrix-org/synapse/issues/8344))
|
||||||
|
- Fix bad merge from `release-v1.20.0` branch to `develop`. ([\#8354](https://github.com/matrix-org/synapse/issues/8354))
|
||||||
|
- Factor out a `_send_dummy_event_for_room` method. ([\#8370](https://github.com/matrix-org/synapse/issues/8370))
|
||||||
|
- Improve logging of state resolution. ([\#8371](https://github.com/matrix-org/synapse/issues/8371))
|
||||||
|
- Add type annotations to `SimpleHttpClient`. ([\#8372](https://github.com/matrix-org/synapse/issues/8372))
|
||||||
|
- Refactor ID generators to use `async with` syntax. ([\#8383](https://github.com/matrix-org/synapse/issues/8383))
|
||||||
|
- Add `EventStreamPosition` type. ([\#8388](https://github.com/matrix-org/synapse/issues/8388))
|
||||||
|
- Create a mechanism for marking tests "logcontext clean". ([\#8399](https://github.com/matrix-org/synapse/issues/8399))
|
||||||
|
- A pair of tiny cleanups in the federation request code. ([\#8401](https://github.com/matrix-org/synapse/issues/8401))
|
||||||
|
- Add checks on startup that PostgreSQL sequences are consistent with their associated tables. ([\#8402](https://github.com/matrix-org/synapse/issues/8402))
|
||||||
|
- Do not include appservice users when calculating the total MAU for a server. ([\#8404](https://github.com/matrix-org/synapse/issues/8404))
|
||||||
|
- Typing fixes for `synapse.handlers.federation`. ([\#8422](https://github.com/matrix-org/synapse/issues/8422))
|
||||||
|
- Various refactors to simplify stream token handling. ([\#8423](https://github.com/matrix-org/synapse/issues/8423))
|
||||||
|
- Make stream token serializing/deserializing async. ([\#8427](https://github.com/matrix-org/synapse/issues/8427))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.20.1 (2020-09-24)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a bug introduced in v1.20.0 which caused the `synapse_port_db` script to fail. ([\#8386](https://github.com/matrix-org/synapse/issues/8386))
|
||||||
|
- Fix a bug introduced in v1.20.0 which caused variables to be incorrectly escaped in Jinja2 templates. ([\#8394](https://github.com/matrix-org/synapse/issues/8394))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.20.0 (2020-09-22)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
No significant changes since v1.20.0rc5.
|
||||||
|
|
||||||
|
Removal warning
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Historically, the [Synapse Admin
|
||||||
|
API](https://github.com/matrix-org/synapse/tree/master/docs) has been
|
||||||
|
accessible under the `/_matrix/client/api/v1/admin`,
|
||||||
|
`/_matrix/client/unstable/admin`, `/_matrix/client/r0/admin` and
|
||||||
|
`/_synapse/admin` prefixes. In a future release, we will be dropping support
|
||||||
|
for accessing Synapse's Admin API using the `/_matrix/client/*` prefixes.
|
||||||
|
|
||||||
|
From that point, the Admin API will only be accessible under `/_synapse/admin`.
|
||||||
|
This makes it easier for homeserver admins to lock down external access to the
|
||||||
|
Admin API endpoints.
|
||||||
|
|
||||||
|
Synapse 1.20.0rc5 (2020-09-18)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
In addition to the below, Synapse 1.20.0rc5 also includes the bug fix that was included in 1.19.3.
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Add flags to the `/versions` endpoint for whether new rooms default to using E2EE. ([\#8343](https://github.com/matrix-org/synapse/issues/8343))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix rate limiting of federation `/send` requests. ([\#8342](https://github.com/matrix-org/synapse/issues/8342))
|
||||||
|
- Fix a longstanding bug where back pagination over federation could get stuck if it failed to handle a received event. ([\#8349](https://github.com/matrix-org/synapse/issues/8349))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Blacklist [MSC2753](https://github.com/matrix-org/matrix-doc/pull/2753) SyTests until it is implemented. ([\#8285](https://github.com/matrix-org/synapse/issues/8285))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.19.3 (2020-09-18)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Partially mitigate bug where newly joined servers couldn't get past events in a room when there is a malformed event. ([\#8350](https://github.com/matrix-org/synapse/issues/8350))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.20.0rc4 (2020-09-16)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Synapse 1.20.0rc4 is identical to 1.20.0rc3, with the addition of the security fix that was included in 1.19.2.
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.19.2 (2020-09-16)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Due to the issue below server admins are encouraged to upgrade as soon as possible.
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix joining rooms over federation that include malformed events. ([\#8324](https://github.com/matrix-org/synapse/issues/8324))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.20.0rc3 (2020-09-11)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a bug introduced in v1.20.0rc1 where the wrong exception was raised when invalid JSON data is encountered. ([\#8291](https://github.com/matrix-org/synapse/issues/8291))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.20.0rc2 (2020-09-09)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a bug introduced in v1.20.0rc1 causing some features related to notifications to misbehave following the implementation of unread counts. ([\#8280](https://github.com/matrix-org/synapse/issues/8280))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.20.0rc1 (2020-09-08)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Removal warning
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Some older clients used a [disallowed character](https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-register-email-requesttoken) (`:`) in the `client_secret` parameter of various endpoints. The incorrect behaviour was allowed for backwards compatibility, but is now being removed from Synapse as most users have updated their client. Further context can be found at [\#6766](https://github.com/matrix-org/synapse/issues/6766).
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Add an endpoint to query your shared rooms with another user as an implementation of [MSC2666](https://github.com/matrix-org/matrix-doc/pull/2666). ([\#7785](https://github.com/matrix-org/synapse/issues/7785))
|
||||||
|
- Iteratively encode JSON to avoid blocking the reactor. ([\#8013](https://github.com/matrix-org/synapse/issues/8013), [\#8116](https://github.com/matrix-org/synapse/issues/8116))
|
||||||
|
- Add support for shadow-banning users (ignoring any message send requests). ([\#8034](https://github.com/matrix-org/synapse/issues/8034), [\#8092](https://github.com/matrix-org/synapse/issues/8092), [\#8095](https://github.com/matrix-org/synapse/issues/8095), [\#8142](https://github.com/matrix-org/synapse/issues/8142), [\#8152](https://github.com/matrix-org/synapse/issues/8152), [\#8157](https://github.com/matrix-org/synapse/issues/8157), [\#8158](https://github.com/matrix-org/synapse/issues/8158), [\#8176](https://github.com/matrix-org/synapse/issues/8176))
|
||||||
|
- Use the default template file when its equivalent is not found in a custom template directory. ([\#8037](https://github.com/matrix-org/synapse/issues/8037), [\#8107](https://github.com/matrix-org/synapse/issues/8107), [\#8252](https://github.com/matrix-org/synapse/issues/8252))
|
||||||
|
- Add unread messages count to sync responses, as specified in [MSC2654](https://github.com/matrix-org/matrix-doc/pull/2654). ([\#8059](https://github.com/matrix-org/synapse/issues/8059), [\#8254](https://github.com/matrix-org/synapse/issues/8254), [\#8270](https://github.com/matrix-org/synapse/issues/8270), [\#8274](https://github.com/matrix-org/synapse/issues/8274))
|
||||||
|
- Optimise `/federation/v1/user/devices/` API by only returning devices with encryption keys. ([\#8198](https://github.com/matrix-org/synapse/issues/8198))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a memory leak by limiting the length of time that messages will be queued for a remote server that has been unreachable. ([\#7864](https://github.com/matrix-org/synapse/issues/7864))
|
||||||
|
- Fix `Re-starting finished log context PUT-nnnn` warning when event persistence failed. ([\#8081](https://github.com/matrix-org/synapse/issues/8081))
|
||||||
|
- Synapse now correctly enforces the valid characters in the `client_secret` parameter used in various endpoints. ([\#8101](https://github.com/matrix-org/synapse/issues/8101))
|
||||||
|
- Fix a bug introduced in v1.7.2 impacting message retention policies that would allow federated homeservers to dictate a retention period that's lower than the configured minimum allowed duration in the configuration file. ([\#8104](https://github.com/matrix-org/synapse/issues/8104))
|
||||||
|
- Fix a long-standing bug where invalid JSON would be accepted by Synapse. ([\#8106](https://github.com/matrix-org/synapse/issues/8106))
|
||||||
|
- Fix a bug introduced in Synapse v1.12.0 which could cause `/sync` requests to fail with a 404 if you had a very old outstanding room invite. ([\#8110](https://github.com/matrix-org/synapse/issues/8110))
|
||||||
|
- Return a proper error code when the rooms of an invalid group are requested. ([\#8129](https://github.com/matrix-org/synapse/issues/8129))
|
||||||
|
- Fix a bug which could cause a leaked postgres connection if synapse was set to daemonize. ([\#8131](https://github.com/matrix-org/synapse/issues/8131))
|
||||||
|
- Clarify the error code if a user tries to register with a numeric ID. This bug was introduced in v1.15.0. ([\#8135](https://github.com/matrix-org/synapse/issues/8135))
|
||||||
|
- Fix a bug where appservices with ratelimiting disabled would still be ratelimited when joining rooms. This bug was introduced in v1.19.0. ([\#8139](https://github.com/matrix-org/synapse/issues/8139))
|
||||||
|
- Fix logging in via OpenID Connect with a provider that uses integer user IDs. ([\#8190](https://github.com/matrix-org/synapse/issues/8190))
|
||||||
|
- Fix a longstanding bug where user directory updates could break when unexpected profile data was included in events. ([\#8223](https://github.com/matrix-org/synapse/issues/8223))
|
||||||
|
- Fix a longstanding bug where stats updates could break when unexpected profile data was included in events. ([\#8226](https://github.com/matrix-org/synapse/issues/8226))
|
||||||
|
- Fix slow start times for large servers by removing a table scan of the `users` table from startup code. ([\#8271](https://github.com/matrix-org/synapse/issues/8271))
|
||||||
|
|
||||||
|
|
||||||
|
Updates to the Docker image
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
- Fix builds of the Docker image on non-x86 platforms. ([\#8144](https://github.com/matrix-org/synapse/issues/8144))
|
||||||
|
- Added curl for healthcheck support and readme updates for the change. Contributed by @maquis196. ([\#8147](https://github.com/matrix-org/synapse/issues/8147))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Link to matrix-synapse-rest-password-provider in the password provider documentation. ([\#8111](https://github.com/matrix-org/synapse/issues/8111))
|
||||||
|
- Updated documentation to note that Synapse does not follow `HTTP 308` redirects due to an upstream library not supporting them. Contributed by Ryan Cole. ([\#8120](https://github.com/matrix-org/synapse/issues/8120))
|
||||||
|
- Explain better what GDPR-erased means when deactivating a user. ([\#8189](https://github.com/matrix-org/synapse/issues/8189))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Add filter `name` to the `/users` admin API, which filters by user ID or displayname. Contributed by Awesome Technologies Innovationslabor GmbH. ([\#7377](https://github.com/matrix-org/synapse/issues/7377), [\#8163](https://github.com/matrix-org/synapse/issues/8163))
|
||||||
|
- Reduce run times of some unit tests by advancing the reactor a fewer number of times. ([\#7757](https://github.com/matrix-org/synapse/issues/7757))
|
||||||
|
- Don't fail `/submit_token` requests on incorrect session ID if `request_token_inhibit_3pid_errors` is turned on. ([\#7991](https://github.com/matrix-org/synapse/issues/7991))
|
||||||
|
- Convert various parts of the codebase to async/await. ([\#8071](https://github.com/matrix-org/synapse/issues/8071), [\#8072](https://github.com/matrix-org/synapse/issues/8072), [\#8074](https://github.com/matrix-org/synapse/issues/8074), [\#8075](https://github.com/matrix-org/synapse/issues/8075), [\#8076](https://github.com/matrix-org/synapse/issues/8076), [\#8087](https://github.com/matrix-org/synapse/issues/8087), [\#8100](https://github.com/matrix-org/synapse/issues/8100), [\#8119](https://github.com/matrix-org/synapse/issues/8119), [\#8121](https://github.com/matrix-org/synapse/issues/8121), [\#8133](https://github.com/matrix-org/synapse/issues/8133), [\#8156](https://github.com/matrix-org/synapse/issues/8156), [\#8162](https://github.com/matrix-org/synapse/issues/8162), [\#8166](https://github.com/matrix-org/synapse/issues/8166), [\#8168](https://github.com/matrix-org/synapse/issues/8168), [\#8173](https://github.com/matrix-org/synapse/issues/8173), [\#8191](https://github.com/matrix-org/synapse/issues/8191), [\#8192](https://github.com/matrix-org/synapse/issues/8192), [\#8193](https://github.com/matrix-org/synapse/issues/8193), [\#8194](https://github.com/matrix-org/synapse/issues/8194), [\#8195](https://github.com/matrix-org/synapse/issues/8195), [\#8197](https://github.com/matrix-org/synapse/issues/8197), [\#8199](https://github.com/matrix-org/synapse/issues/8199), [\#8200](https://github.com/matrix-org/synapse/issues/8200), [\#8201](https://github.com/matrix-org/synapse/issues/8201), [\#8202](https://github.com/matrix-org/synapse/issues/8202), [\#8207](https://github.com/matrix-org/synapse/issues/8207), [\#8213](https://github.com/matrix-org/synapse/issues/8213), [\#8214](https://github.com/matrix-org/synapse/issues/8214))
|
||||||
|
- Remove some unused database functions. ([\#8085](https://github.com/matrix-org/synapse/issues/8085))
|
||||||
|
- Add type hints to various parts of the codebase. ([\#8090](https://github.com/matrix-org/synapse/issues/8090), [\#8127](https://github.com/matrix-org/synapse/issues/8127), [\#8187](https://github.com/matrix-org/synapse/issues/8187), [\#8241](https://github.com/matrix-org/synapse/issues/8241), [\#8140](https://github.com/matrix-org/synapse/issues/8140), [\#8183](https://github.com/matrix-org/synapse/issues/8183), [\#8232](https://github.com/matrix-org/synapse/issues/8232), [\#8235](https://github.com/matrix-org/synapse/issues/8235), [\#8237](https://github.com/matrix-org/synapse/issues/8237), [\#8244](https://github.com/matrix-org/synapse/issues/8244))
|
||||||
|
- Return the previous stream token if a non-member event is a duplicate. ([\#8093](https://github.com/matrix-org/synapse/issues/8093), [\#8112](https://github.com/matrix-org/synapse/issues/8112))
|
||||||
|
- Separate `get_current_token` into two since there are two different use cases for it. ([\#8113](https://github.com/matrix-org/synapse/issues/8113))
|
||||||
|
- Remove `ChainedIdGenerator`. ([\#8123](https://github.com/matrix-org/synapse/issues/8123))
|
||||||
|
- Reduce the amount of whitespace in JSON stored and sent in responses. ([\#8124](https://github.com/matrix-org/synapse/issues/8124))
|
||||||
|
- Update the test federation client to handle streaming responses. ([\#8130](https://github.com/matrix-org/synapse/issues/8130))
|
||||||
|
- Micro-optimisations to `get_auth_chain_ids`. ([\#8132](https://github.com/matrix-org/synapse/issues/8132))
|
||||||
|
- Refactor `StreamIdGenerator` and `MultiWriterIdGenerator` to have the same interface. ([\#8161](https://github.com/matrix-org/synapse/issues/8161))
|
||||||
|
- Add functions to `MultiWriterIdGen` used by events stream. ([\#8164](https://github.com/matrix-org/synapse/issues/8164), [\#8179](https://github.com/matrix-org/synapse/issues/8179))
|
||||||
|
- Fix tests that were broken due to the merge of 1.19.1. ([\#8167](https://github.com/matrix-org/synapse/issues/8167))
|
||||||
|
- Make `SlavedIdTracker.advance` have the same interface as `MultiWriterIDGenerator`. ([\#8171](https://github.com/matrix-org/synapse/issues/8171))
|
||||||
|
- Remove unused `is_guest` parameter from, and add safeguard to, `MessageHandler.get_room_data`. ([\#8174](https://github.com/matrix-org/synapse/issues/8174), [\#8181](https://github.com/matrix-org/synapse/issues/8181))
|
||||||
|
- Standardize the mypy configuration. ([\#8175](https://github.com/matrix-org/synapse/issues/8175))
|
||||||
|
- Refactor some of `LoginRestServlet`'s helper methods, and move them to `AuthHandler` for easier reuse. ([\#8182](https://github.com/matrix-org/synapse/issues/8182))
|
||||||
|
- Fix `wait_for_stream_position` to allow multiple waiters on same stream ID. ([\#8196](https://github.com/matrix-org/synapse/issues/8196))
|
||||||
|
- Make `MultiWriterIDGenerator` work for streams that use negative values. ([\#8203](https://github.com/matrix-org/synapse/issues/8203))
|
||||||
|
- Refactor queries for device keys and cross-signatures. ([\#8204](https://github.com/matrix-org/synapse/issues/8204), [\#8205](https://github.com/matrix-org/synapse/issues/8205), [\#8222](https://github.com/matrix-org/synapse/issues/8222), [\#8224](https://github.com/matrix-org/synapse/issues/8224), [\#8225](https://github.com/matrix-org/synapse/issues/8225), [\#8231](https://github.com/matrix-org/synapse/issues/8231), [\#8233](https://github.com/matrix-org/synapse/issues/8233), [\#8234](https://github.com/matrix-org/synapse/issues/8234))
|
||||||
|
- Fix type hints for functions decorated with `@cached`. ([\#8240](https://github.com/matrix-org/synapse/issues/8240))
|
||||||
|
- Remove obsolete `order` field from federation send queues. ([\#8245](https://github.com/matrix-org/synapse/issues/8245))
|
||||||
|
- Stop sub-classing from object. ([\#8249](https://github.com/matrix-org/synapse/issues/8249))
|
||||||
|
- Add more logging to debug slow startup. ([\#8264](https://github.com/matrix-org/synapse/issues/8264))
|
||||||
|
- Do not attempt to upgrade database schema on worker processes. ([\#8266](https://github.com/matrix-org/synapse/issues/8266), [\#8276](https://github.com/matrix-org/synapse/issues/8276))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.19.1 (2020-08-27)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
No significant changes.
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.19.1rc1 (2020-08-25)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a bug introduced in v1.19.0 where appservices with ratelimiting disabled would still be ratelimited when joining rooms. ([\#8139](https://github.com/matrix-org/synapse/issues/8139))
|
||||||
|
- Fix a bug introduced in v1.19.0 that would cause e.g. profile updates to fail due to incorrect application of rate limits on join requests. ([\#8153](https://github.com/matrix-org/synapse/issues/8153))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.19.0 (2020-08-17)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
No significant changes since 1.19.0rc1.
|
||||||
|
|
||||||
|
Removal warning
|
||||||
|
---------------
|
||||||
|
|
||||||
|
As outlined in the [previous release](https://github.com/matrix-org/synapse/releases/tag/v1.18.0), we are no longer publishing Docker images with the `-py3` tag suffix. On top of that, we have also removed the `latest-py3` tag. Please see [the announcement in the upgrade notes for 1.18.0](https://github.com/matrix-org/synapse/blob/develop/UPGRADE.rst#upgrading-to-v1180).
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.19.0rc1 (2020-08-13)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Add option to allow server admins to join rooms which fail complexity checks. Contributed by @lugino-emeritus. ([\#7902](https://github.com/matrix-org/synapse/issues/7902))
|
||||||
|
- Add an option to purge room or not with delete room admin endpoint (`POST /_synapse/admin/v1/rooms/<room_id>/delete`). Contributed by @dklimpel. ([\#7964](https://github.com/matrix-org/synapse/issues/7964))
|
||||||
|
- Add rate limiting to users joining rooms. ([\#8008](https://github.com/matrix-org/synapse/issues/8008))
|
||||||
|
- Add a `/health` endpoint to every configured HTTP listener that can be used as a health check endpoint by load balancers. ([\#8048](https://github.com/matrix-org/synapse/issues/8048))
|
||||||
|
- Allow login to be blocked based on the values of SAML attributes. ([\#8052](https://github.com/matrix-org/synapse/issues/8052))
|
||||||
|
- Allow guest access to the `GET /_matrix/client/r0/rooms/{room_id}/members` endpoint, according to MSC2689. Contributed by Awesome Technologies Innovationslabor GmbH. ([\#7314](https://github.com/matrix-org/synapse/issues/7314))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix a bug introduced in Synapse v1.7.2 which caused inaccurate membership counts in the room directory. ([\#7977](https://github.com/matrix-org/synapse/issues/7977))
|
||||||
|
- Fix a long standing bug: 'Duplicate key value violates unique constraint "event_relations_id"' when message retention is configured. ([\#7978](https://github.com/matrix-org/synapse/issues/7978))
|
||||||
|
- Fix "no create event in auth events" when trying to reject invitation after inviter leaves. Bug introduced in Synapse v1.10.0. ([\#7980](https://github.com/matrix-org/synapse/issues/7980))
|
||||||
|
- Fix various comments and minor discrepencies in server notices code. ([\#7996](https://github.com/matrix-org/synapse/issues/7996))
|
||||||
|
- Fix a long standing bug where HTTP HEAD requests resulted in a 400 error. ([\#7999](https://github.com/matrix-org/synapse/issues/7999))
|
||||||
|
- Fix a long-standing bug which caused two copies of some log lines to be written when synctl was used along with a MemoryHandler logger. ([\#8011](https://github.com/matrix-org/synapse/issues/8011), [\#8012](https://github.com/matrix-org/synapse/issues/8012))
|
||||||
|
|
||||||
|
|
||||||
|
Updates to the Docker image
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
- We no longer publish Docker images with the `-py3` tag suffix, as [announced in the upgrade notes](https://github.com/matrix-org/synapse/blob/develop/UPGRADE.rst#upgrading-to-v1180). ([\#8056](https://github.com/matrix-org/synapse/issues/8056))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Document how to set up a client .well-known file and fix several pieces of outdated documentation. ([\#7899](https://github.com/matrix-org/synapse/issues/7899))
|
||||||
|
- Improve workers docs. ([\#7990](https://github.com/matrix-org/synapse/issues/7990), [\#8000](https://github.com/matrix-org/synapse/issues/8000))
|
||||||
|
- Fix typo in `docs/workers.md`. ([\#7992](https://github.com/matrix-org/synapse/issues/7992))
|
||||||
|
- Add documentation for how to undo a room shutdown. ([\#7998](https://github.com/matrix-org/synapse/issues/7998), [\#8010](https://github.com/matrix-org/synapse/issues/8010))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Reduce the amount of whitespace in JSON stored and sent in responses. Contributed by David Vo. ([\#7372](https://github.com/matrix-org/synapse/issues/7372))
|
||||||
|
- Switch to the JSON implementation from the standard library and bump the minimum version of the canonicaljson library to 1.2.0. ([\#7936](https://github.com/matrix-org/synapse/issues/7936), [\#7979](https://github.com/matrix-org/synapse/issues/7979))
|
||||||
|
- Convert various parts of the codebase to async/await. ([\#7947](https://github.com/matrix-org/synapse/issues/7947), [\#7948](https://github.com/matrix-org/synapse/issues/7948), [\#7949](https://github.com/matrix-org/synapse/issues/7949), [\#7951](https://github.com/matrix-org/synapse/issues/7951), [\#7963](https://github.com/matrix-org/synapse/issues/7963), [\#7973](https://github.com/matrix-org/synapse/issues/7973), [\#7975](https://github.com/matrix-org/synapse/issues/7975), [\#7976](https://github.com/matrix-org/synapse/issues/7976), [\#7981](https://github.com/matrix-org/synapse/issues/7981), [\#7987](https://github.com/matrix-org/synapse/issues/7987), [\#7989](https://github.com/matrix-org/synapse/issues/7989), [\#8003](https://github.com/matrix-org/synapse/issues/8003), [\#8014](https://github.com/matrix-org/synapse/issues/8014), [\#8016](https://github.com/matrix-org/synapse/issues/8016), [\#8027](https://github.com/matrix-org/synapse/issues/8027), [\#8031](https://github.com/matrix-org/synapse/issues/8031), [\#8032](https://github.com/matrix-org/synapse/issues/8032), [\#8035](https://github.com/matrix-org/synapse/issues/8035), [\#8042](https://github.com/matrix-org/synapse/issues/8042), [\#8044](https://github.com/matrix-org/synapse/issues/8044), [\#8045](https://github.com/matrix-org/synapse/issues/8045), [\#8061](https://github.com/matrix-org/synapse/issues/8061), [\#8062](https://github.com/matrix-org/synapse/issues/8062), [\#8063](https://github.com/matrix-org/synapse/issues/8063), [\#8066](https://github.com/matrix-org/synapse/issues/8066), [\#8069](https://github.com/matrix-org/synapse/issues/8069), [\#8070](https://github.com/matrix-org/synapse/issues/8070))
|
||||||
|
- Move some database-related log lines from the default logger to the database/transaction loggers. ([\#7952](https://github.com/matrix-org/synapse/issues/7952))
|
||||||
|
- Add a script to detect source code files using non-unix line terminators. ([\#7965](https://github.com/matrix-org/synapse/issues/7965), [\#7970](https://github.com/matrix-org/synapse/issues/7970))
|
||||||
|
- Log the SAML session ID during creation. ([\#7971](https://github.com/matrix-org/synapse/issues/7971))
|
||||||
|
- Implement new experimental push rules for some users. ([\#7997](https://github.com/matrix-org/synapse/issues/7997))
|
||||||
|
- Remove redundant and unreliable signature check for v1 Identity Service lookup responses. ([\#8001](https://github.com/matrix-org/synapse/issues/8001))
|
||||||
|
- Improve the performance of the register endpoint. ([\#8009](https://github.com/matrix-org/synapse/issues/8009))
|
||||||
|
- Reduce less useful output in the newsfragment CI step. Add a link to the changelog section of the contributing guide on error. ([\#8024](https://github.com/matrix-org/synapse/issues/8024))
|
||||||
|
- Rename storage layer objects to be more sensible. ([\#8033](https://github.com/matrix-org/synapse/issues/8033))
|
||||||
|
- Change the default log config to reduce disk I/O and storage for new servers. ([\#8040](https://github.com/matrix-org/synapse/issues/8040))
|
||||||
|
- Add an assertion on `prev_events` in `create_new_client_event`. ([\#8041](https://github.com/matrix-org/synapse/issues/8041))
|
||||||
|
- Add a comment to `ServerContextFactory` about the use of `SSLv23_METHOD`. ([\#8043](https://github.com/matrix-org/synapse/issues/8043))
|
||||||
|
- Log `OPTIONS` requests at `DEBUG` rather than `INFO` level to reduce amount logged at `INFO`. ([\#8049](https://github.com/matrix-org/synapse/issues/8049))
|
||||||
|
- Reduce amount of outbound request logging at `INFO` level. ([\#8050](https://github.com/matrix-org/synapse/issues/8050))
|
||||||
|
- It is no longer necessary to explicitly define `filters` in the logging configuration. (Continuing to do so is redundant but harmless.) ([\#8051](https://github.com/matrix-org/synapse/issues/8051))
|
||||||
|
- Add and improve type hints. ([\#8058](https://github.com/matrix-org/synapse/issues/8058), [\#8064](https://github.com/matrix-org/synapse/issues/8064), [\#8060](https://github.com/matrix-org/synapse/issues/8060), [\#8067](https://github.com/matrix-org/synapse/issues/8067))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.18.0 (2020-07-30)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Deprecation Warnings
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
### Docker Tags with `-py3` Suffix
|
||||||
|
|
||||||
|
From 10th August 2020, we will no longer publish Docker images with the `-py3` tag suffix. The images tagged with the `-py3` suffix have been identical to the non-suffixed tags since release 0.99.0, and the suffix is obsolete.
|
||||||
|
|
||||||
|
On 10th August, we will remove the `latest-py3` tag. Existing per-release tags (such as `v1.18.0-py3`) will not be removed, but no new `-py3` tags will be added.
|
||||||
|
|
||||||
|
Scripts relying on the `-py3` suffix will need to be updated.
|
||||||
|
|
||||||
|
|
||||||
|
### TCP-based Replication
|
||||||
|
|
||||||
|
When setting up worker processes, we now recommend the use of a Redis server for replication. The old direct TCP connection method is deprecated and will be removed in a future release. See [docs/workers.md](https://github.com/matrix-org/synapse/blob/release-v1.18.0/docs/workers.md) for more details.
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Update worker docs with latest enhancements. ([\#7969](https://github.com/matrix-org/synapse/issues/7969))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.18.0rc2 (2020-07-28)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix an `AssertionError` exception introduced in v1.18.0rc1. ([\#7876](https://github.com/matrix-org/synapse/issues/7876))
|
||||||
|
- Fix experimental support for moving typing off master when worker is restarted, which is broken in v1.18.0rc1. ([\#7967](https://github.com/matrix-org/synapse/issues/7967))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Further optimise queueing of inbound replication commands. ([\#7876](https://github.com/matrix-org/synapse/issues/7876))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.18.0rc1 (2020-07-27)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Include room states on invite events that are sent to application services. Contributed by @Sorunome. ([\#6455](https://github.com/matrix-org/synapse/issues/6455))
|
||||||
|
- Add delete room admin endpoint (`POST /_synapse/admin/v1/rooms/<room_id>/delete`). Contributed by @dklimpel. ([\#7613](https://github.com/matrix-org/synapse/issues/7613), [\#7953](https://github.com/matrix-org/synapse/issues/7953))
|
||||||
|
- Add experimental support for running multiple federation sender processes. ([\#7798](https://github.com/matrix-org/synapse/issues/7798))
|
||||||
|
- Add the option to validate the `iss` and `aud` claims for JWT logins. ([\#7827](https://github.com/matrix-org/synapse/issues/7827))
|
||||||
|
- Add support for handling registration requests across multiple client reader workers. ([\#7830](https://github.com/matrix-org/synapse/issues/7830))
|
||||||
|
- Add an admin API to list the users in a room. Contributed by Awesome Technologies Innovationslabor GmbH. ([\#7842](https://github.com/matrix-org/synapse/issues/7842))
|
||||||
|
- Allow email subjects to be customised through Synapse's configuration. ([\#7846](https://github.com/matrix-org/synapse/issues/7846))
|
||||||
|
- Add the ability to re-activate an account from the admin API. ([\#7847](https://github.com/matrix-org/synapse/issues/7847), [\#7908](https://github.com/matrix-org/synapse/issues/7908))
|
||||||
|
- Add experimental support for running multiple pusher workers. ([\#7855](https://github.com/matrix-org/synapse/issues/7855))
|
||||||
|
- Add experimental support for moving typing off master. ([\#7869](https://github.com/matrix-org/synapse/issues/7869), [\#7959](https://github.com/matrix-org/synapse/issues/7959))
|
||||||
|
- Report CPU metrics to prometheus for time spent processing replication commands. ([\#7879](https://github.com/matrix-org/synapse/issues/7879))
|
||||||
|
- Support oEmbed for media previews. ([\#7920](https://github.com/matrix-org/synapse/issues/7920))
|
||||||
|
- Abort federation requests where the client disconnects before the ratelimiter expires. ([\#7930](https://github.com/matrix-org/synapse/issues/7930))
|
||||||
|
- Cache responses to `/_matrix/federation/v1/state_ids` to reduce duplicated work. ([\#7931](https://github.com/matrix-org/synapse/issues/7931))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix detection of out of sync remote device lists when receiving events from remote users. ([\#7815](https://github.com/matrix-org/synapse/issues/7815))
|
||||||
|
- Fix bug where Synapse fails to process an incoming event over federation if the server is missing too much of the event's auth chain. ([\#7817](https://github.com/matrix-org/synapse/issues/7817))
|
||||||
|
- Fix a bug causing Synapse to misinterpret the value `off` for `encryption_enabled_by_default_for_room_type` in its configuration file(s) if that value isn't surrounded by quotes. This bug was introduced in v1.16.0. ([\#7822](https://github.com/matrix-org/synapse/issues/7822))
|
||||||
|
- Fix bug where we did not always pass in `app_name` or `server_name` to email templates, including e.g. for registration emails. ([\#7829](https://github.com/matrix-org/synapse/issues/7829))
|
||||||
|
- Errors which occur while using the non-standard JWT login now return the proper error: `403 Forbidden` with an error code of `M_FORBIDDEN`. ([\#7844](https://github.com/matrix-org/synapse/issues/7844))
|
||||||
|
- Fix "AttributeError: 'str' object has no attribute 'get'" error message when applying per-room message retention policies. The bug was introduced in Synapse 1.7.0. ([\#7850](https://github.com/matrix-org/synapse/issues/7850))
|
||||||
|
- Fix a bug introduced in Synapse 1.10.0 which could cause a "no create event in auth events" error during room creation. ([\#7854](https://github.com/matrix-org/synapse/issues/7854))
|
||||||
|
- Fix a bug which allowed empty rooms to be rejoined over federation. ([\#7859](https://github.com/matrix-org/synapse/issues/7859))
|
||||||
|
- Fix 'Unable to find a suitable guest user ID' error when using multiple client_reader workers. ([\#7866](https://github.com/matrix-org/synapse/issues/7866))
|
||||||
|
- Fix a long standing bug where the tracing of async functions with opentracing was broken. ([\#7872](https://github.com/matrix-org/synapse/issues/7872), [\#7961](https://github.com/matrix-org/synapse/issues/7961))
|
||||||
|
- Fix "TypeError in `synapse.notifier`" exceptions. ([\#7880](https://github.com/matrix-org/synapse/issues/7880))
|
||||||
|
- Fix deprecation warning due to invalid escape sequences. ([\#7895](https://github.com/matrix-org/synapse/issues/7895))
|
||||||
|
|
||||||
|
|
||||||
|
Updates to the Docker image
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
- Base docker image on Debian Buster rather than Alpine Linux. Contributed by @maquis196. ([\#7839](https://github.com/matrix-org/synapse/issues/7839))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Provide instructions on using `register_new_matrix_user` via docker. ([\#7885](https://github.com/matrix-org/synapse/issues/7885))
|
||||||
|
- Change the sample config postgres user section to use `synapse_user` instead of `synapse` to align with the documentation. ([\#7889](https://github.com/matrix-org/synapse/issues/7889))
|
||||||
|
- Reorder database paragraphs to promote postgres over sqlite. ([\#7933](https://github.com/matrix-org/synapse/issues/7933))
|
||||||
|
- Update the dates of ACME v1's end of life in [`ACME.md`](https://github.com/matrix-org/synapse/blob/master/docs/ACME.md). ([\#7934](https://github.com/matrix-org/synapse/issues/7934))
|
||||||
|
|
||||||
|
|
||||||
|
Deprecations and Removals
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
- Remove unused `synapse_replication_tcp_resource_invalidate_cache` prometheus metric. ([\#7878](https://github.com/matrix-org/synapse/issues/7878))
|
||||||
|
- Remove Ubuntu Eoan from the list of `.deb` packages that we build as it is now end-of-life. Contributed by @gary-kim. ([\#7888](https://github.com/matrix-org/synapse/issues/7888))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Switch parts of the codebase from `simplejson` to the standard library `json`. ([\#7802](https://github.com/matrix-org/synapse/issues/7802))
|
||||||
|
- Add type hints to the http server code and remove an unused parameter. ([\#7813](https://github.com/matrix-org/synapse/issues/7813))
|
||||||
|
- Add type hints to synapse.api.errors module. ([\#7820](https://github.com/matrix-org/synapse/issues/7820))
|
||||||
|
- Ensure that calls to `json.dumps` are compatible with the standard library json. ([\#7836](https://github.com/matrix-org/synapse/issues/7836))
|
||||||
|
- Remove redundant `retry_on_integrity_error` wrapper for event persistence code. ([\#7848](https://github.com/matrix-org/synapse/issues/7848))
|
||||||
|
- Consistently use `db_to_json` to convert from database values to JSON objects. ([\#7849](https://github.com/matrix-org/synapse/issues/7849))
|
||||||
|
- Convert various parts of the codebase to async/await. ([\#7851](https://github.com/matrix-org/synapse/issues/7851), [\#7860](https://github.com/matrix-org/synapse/issues/7860), [\#7868](https://github.com/matrix-org/synapse/issues/7868), [\#7871](https://github.com/matrix-org/synapse/issues/7871), [\#7873](https://github.com/matrix-org/synapse/issues/7873), [\#7874](https://github.com/matrix-org/synapse/issues/7874), [\#7884](https://github.com/matrix-org/synapse/issues/7884), [\#7912](https://github.com/matrix-org/synapse/issues/7912), [\#7935](https://github.com/matrix-org/synapse/issues/7935), [\#7939](https://github.com/matrix-org/synapse/issues/7939), [\#7942](https://github.com/matrix-org/synapse/issues/7942), [\#7944](https://github.com/matrix-org/synapse/issues/7944))
|
||||||
|
- Add support for handling registration requests across multiple client reader workers. ([\#7853](https://github.com/matrix-org/synapse/issues/7853))
|
||||||
|
- Small performance improvement in typing processing. ([\#7856](https://github.com/matrix-org/synapse/issues/7856))
|
||||||
|
- The default value of `filter_timeline_limit` was changed from -1 (no limit) to 100. ([\#7858](https://github.com/matrix-org/synapse/issues/7858))
|
||||||
|
- Optimise queueing of inbound replication commands. ([\#7861](https://github.com/matrix-org/synapse/issues/7861))
|
||||||
|
- Add some type annotations to `HomeServer` and `BaseHandler`. ([\#7870](https://github.com/matrix-org/synapse/issues/7870))
|
||||||
|
- Clean up `PreserveLoggingContext`. ([\#7877](https://github.com/matrix-org/synapse/issues/7877))
|
||||||
|
- Change "unknown room version" logging from 'error' to 'warning'. ([\#7881](https://github.com/matrix-org/synapse/issues/7881))
|
||||||
|
- Stop using `device_max_stream_id` table and just use `device_inbox.stream_id`. ([\#7882](https://github.com/matrix-org/synapse/issues/7882))
|
||||||
|
- Return an empty body for OPTIONS requests. ([\#7886](https://github.com/matrix-org/synapse/issues/7886))
|
||||||
|
- Fix typo in generated config file. Contributed by @ThiefMaster. ([\#7890](https://github.com/matrix-org/synapse/issues/7890))
|
||||||
|
- Import ABC from `collections.abc` for Python 3.10 compatibility. ([\#7892](https://github.com/matrix-org/synapse/issues/7892))
|
||||||
|
- Remove unused functions `time_function`, `trace_function`, `get_previous_frames`
|
||||||
|
and `get_previous_frame` from `synapse.logging.utils` module. ([\#7897](https://github.com/matrix-org/synapse/issues/7897))
|
||||||
|
- Lint the `contrib/` directory in CI and linting scripts, add `synctl` to the linting script for consistency with CI. ([\#7914](https://github.com/matrix-org/synapse/issues/7914))
|
||||||
|
- Use Element CSS and logo in notification emails when app name is Element. ([\#7919](https://github.com/matrix-org/synapse/issues/7919))
|
||||||
|
- Optimisation to /sync handling: skip serializing the response if the client has already disconnected. ([\#7927](https://github.com/matrix-org/synapse/issues/7927))
|
||||||
|
- When a client disconnects, don't log it as 'Error processing request'. ([\#7928](https://github.com/matrix-org/synapse/issues/7928))
|
||||||
|
- Add debugging to `/sync` response generation (disabled by default). ([\#7929](https://github.com/matrix-org/synapse/issues/7929))
|
||||||
|
- Update comments that refer to Deferreds for async functions. ([\#7945](https://github.com/matrix-org/synapse/issues/7945))
|
||||||
|
- Simplify error handling in federation handler. ([\#7950](https://github.com/matrix-org/synapse/issues/7950))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.17.0 (2020-07-13)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Synapse 1.17.0 is identical to 1.17.0rc1, with the addition of the fix that was included in 1.16.1.
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.16.1 (2020-07-10)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
In some distributions of Synapse 1.16.0, we incorrectly included a database migration which added a new, unused table. This release removes the redundant table.
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Drop table `local_rejections_stream` which was incorrectly added in Synapse 1.16.0. ([\#7816](https://github.com/matrix-org/synapse/issues/7816), [b1beb3ff5](https://github.com/matrix-org/synapse/commit/b1beb3ff5))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.17.0rc1 (2020-07-09)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Fix inconsistent handling of upper and lower case in email addresses when used as identifiers for login, etc. Contributed by @dklimpel. ([\#7021](https://github.com/matrix-org/synapse/issues/7021))
|
||||||
|
- Fix "Tried to close a non-active scope!" error messages when opentracing is enabled. ([\#7732](https://github.com/matrix-org/synapse/issues/7732))
|
||||||
|
- Fix incorrect error message when database CTYPE was set incorrectly. ([\#7760](https://github.com/matrix-org/synapse/issues/7760))
|
||||||
|
- Fix to not ignore `set_tweak` actions in Push Rules that have no `value`, as permitted by the specification. ([\#7766](https://github.com/matrix-org/synapse/issues/7766))
|
||||||
|
- Fix synctl to handle empty config files correctly. Contributed by @kotovalexarian. ([\#7779](https://github.com/matrix-org/synapse/issues/7779))
|
||||||
|
- Fixes a long standing bug in worker mode where worker information was saved in the devices table instead of the original IP address and user agent. ([\#7797](https://github.com/matrix-org/synapse/issues/7797))
|
||||||
|
- Fix 'stuck invites' which happen when we are unable to reject a room invite received over federation. ([\#7804](https://github.com/matrix-org/synapse/issues/7804), [\#7809](https://github.com/matrix-org/synapse/issues/7809), [\#7810](https://github.com/matrix-org/synapse/issues/7810))
|
||||||
|
|
||||||
|
|
||||||
|
Updates to the Docker image
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
- Include libwebp in the Docker file to properly handle webp image uploads. ([\#7791](https://github.com/matrix-org/synapse/issues/7791))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Improve the documentation of the non-standard JSON web token login type. ([\#7776](https://github.com/matrix-org/synapse/issues/7776))
|
||||||
|
- Update doc links for caddy. Contributed by Nicolai Søborg. ([\#7789](https://github.com/matrix-org/synapse/issues/7789))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Refactor getting replication updates from database. ([\#7740](https://github.com/matrix-org/synapse/issues/7740))
|
||||||
|
- Send push notifications with a high or low priority depending upon whether they may generate user-observable effects. ([\#7765](https://github.com/matrix-org/synapse/issues/7765))
|
||||||
|
- Use symbolic names for replication stream names. ([\#7768](https://github.com/matrix-org/synapse/issues/7768))
|
||||||
|
- Add early returns to `_check_for_soft_fail`. ([\#7769](https://github.com/matrix-org/synapse/issues/7769))
|
||||||
|
- Fix up `synapse.handlers.federation` to pass mypy. ([\#7770](https://github.com/matrix-org/synapse/issues/7770))
|
||||||
|
- Convert the appserver handler to async/await. ([\#7775](https://github.com/matrix-org/synapse/issues/7775))
|
||||||
|
- Allow to use higher versions of prometheus_client <0.9.0 which are expected to introduce no breaking changes. Contributed by Oliver Kurz. ([\#7780](https://github.com/matrix-org/synapse/issues/7780))
|
||||||
|
- Update linting scripts and codebase to be compatible with `isort` v5. ([\#7786](https://github.com/matrix-org/synapse/issues/7786))
|
||||||
|
- Stop populating unused table `local_invites`. ([\#7793](https://github.com/matrix-org/synapse/issues/7793))
|
||||||
|
- Ensure that strings (not bytes) are passed into JSON serialization. ([\#7799](https://github.com/matrix-org/synapse/issues/7799))
|
||||||
|
- Switch from simplejson to the standard library json. ([\#7800](https://github.com/matrix-org/synapse/issues/7800))
|
||||||
|
- Add `signing_key` property to `HomeServer` to save code duplication. ([\#7805](https://github.com/matrix-org/synapse/issues/7805))
|
||||||
|
- Improve stacktraces from exceptions in background processes. ([\#7808](https://github.com/matrix-org/synapse/issues/7808))
|
||||||
|
- Fix various spelling errors in comments and log lines. ([\#7811](https://github.com/matrix-org/synapse/issues/7811))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.16.0 (2020-07-08)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
No significant changes since 1.16.0rc2.
|
||||||
|
|
||||||
|
Note that this release deprecates the `m.login.jwt` login method, renaming it
|
||||||
|
to `org.matrix.login.jwt`, as `m.login.jwt` is not part of the Matrix spec.
|
||||||
|
Otherwise the behaviour is identical. Synapse will accept both names for now,
|
||||||
|
but this may change in a future release.
|
||||||
|
|
||||||
|
Synapse 1.16.0rc2 (2020-07-02)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Synapse 1.16.0rc2 includes the security fixes released with Synapse 1.15.2.
|
||||||
|
Please see [below](#synapse-1152-2020-07-02) for more details.
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Update postgres image in example `docker-compose.yaml` to tag `12-alpine`. ([\#7696](https://github.com/matrix-org/synapse/issues/7696))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Add some metrics for inbound and outbound federation latencies: `synapse_federation_server_pdu_process_time` and `synapse_event_processing_lag_by_event`. ([\#7771](https://github.com/matrix-org/synapse/issues/7771))
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.15.2 (2020-07-02)
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Due to the two security issues highlighted below, server administrators are
|
||||||
|
encouraged to update Synapse. We are not aware of these vulnerabilities being
|
||||||
|
exploited in the wild.
|
||||||
|
|
||||||
|
Security advisory
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* A malicious homeserver could force Synapse to reset the state in a room to a
|
||||||
|
small subset of the correct state. This affects all Synapse deployments which
|
||||||
|
federate with untrusted servers. ([96e9afe6](https://github.com/matrix-org/synapse/commit/96e9afe62500310977dc3cbc99a8d16d3d2fa15c))
|
||||||
|
* HTML pages served via Synapse were vulnerable to clickjacking attacks. This
|
||||||
|
predominantly affects homeservers with single-sign-on enabled, but all server
|
||||||
|
administrators are encouraged to upgrade. ([ea26e9a9](https://github.com/matrix-org/synapse/commit/ea26e9a98b0541fc886a1cb826a38352b7599dbe))
|
||||||
|
|
||||||
|
This was reported by [Quentin Gliech](https://sandhose.fr/).
|
||||||
|
|
||||||
|
|
||||||
|
Synapse 1.16.0rc1 (2020-07-01)
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Add an option to enable encryption by default for new rooms. ([\#7639](https://github.com/matrix-org/synapse/issues/7639))
|
||||||
|
- Add support for running multiple media repository workers. See [docs/workers.md](https://github.com/matrix-org/synapse/blob/release-v1.16.0/docs/workers.md) for instructions. ([\#7706](https://github.com/matrix-org/synapse/issues/7706))
|
||||||
|
- Media can now be marked as safe from quarantined. ([\#7718](https://github.com/matrix-org/synapse/issues/7718))
|
||||||
|
- Expand the configuration options for auto-join rooms. ([\#7763](https://github.com/matrix-org/synapse/issues/7763))
|
||||||
|
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Remove `user_id` from the response to `GET /_matrix/client/r0/presence/{userId}/status` to match the specification. ([\#7606](https://github.com/matrix-org/synapse/issues/7606))
|
||||||
|
- In worker mode, ensure that replicated data has not already been received. ([\#7648](https://github.com/matrix-org/synapse/issues/7648))
|
||||||
|
- Fix intermittent exception during startup, introduced in Synapse 1.14.0. ([\#7663](https://github.com/matrix-org/synapse/issues/7663))
|
||||||
|
- Include a user-agent for federation and well-known requests. ([\#7677](https://github.com/matrix-org/synapse/issues/7677))
|
||||||
|
- Accept the proper field (`phone`) for the `m.id.phone` identifier type. The legacy field of `number` is still accepted as a fallback. Bug introduced in v0.20.0. ([\#7687](https://github.com/matrix-org/synapse/issues/7687))
|
||||||
|
- Fix "Starting db txn 'get_completed_ui_auth_stages' from sentinel context" warning. The bug was introduced in 1.13.0. ([\#7688](https://github.com/matrix-org/synapse/issues/7688))
|
||||||
|
- Compare the URI and method during user interactive authentication (instead of the URI twice). Bug introduced in 1.13.0. ([\#7689](https://github.com/matrix-org/synapse/issues/7689))
|
||||||
|
- Fix a long standing bug where the response to the `GET room_keys/version` endpoint had the incorrect type for the `etag` field. ([\#7691](https://github.com/matrix-org/synapse/issues/7691))
|
||||||
|
- Fix logged error during device resync in opentracing. Broke in v1.14.0. ([\#7698](https://github.com/matrix-org/synapse/issues/7698))
|
||||||
|
- Do not break push rule evaluation when receiving an event with a non-string body. This is a long-standing bug. ([\#7701](https://github.com/matrix-org/synapse/issues/7701))
|
||||||
|
- Fixs a long standing bug which resulted in an exception: "TypeError: argument of type 'ObservableDeferred' is not iterable". ([\#7708](https://github.com/matrix-org/synapse/issues/7708))
|
||||||
|
- The `synapse_port_db` script no longer fails when the `ui_auth_sessions` table is non-empty. This bug has existed since v1.13.0. ([\#7711](https://github.com/matrix-org/synapse/issues/7711))
|
||||||
|
- Synapse will now fetch media from the proper specified URL (using the r0 prefix instead of the unspecified v1). ([\#7714](https://github.com/matrix-org/synapse/issues/7714))
|
||||||
|
- Fix the tables ignored by `synapse_port_db` to be in sync the current database schema. ([\#7717](https://github.com/matrix-org/synapse/issues/7717))
|
||||||
|
- Fix missing `Content-Length` on HTTP responses from the metrics handler. ([\#7730](https://github.com/matrix-org/synapse/issues/7730))
|
||||||
|
- Fix large state resolutions from stalling Synapse for seconds at a time. ([\#7735](https://github.com/matrix-org/synapse/issues/7735), [\#7746](https://github.com/matrix-org/synapse/issues/7746))
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Spelling correction in sample_config.yaml. ([\#7652](https://github.com/matrix-org/synapse/issues/7652))
|
||||||
|
- Added instructions for how to use Keycloak via OpenID Connect to authenticate with Synapse. ([\#7659](https://github.com/matrix-org/synapse/issues/7659))
|
||||||
|
- Corrected misspelling of PostgreSQL. ([\#7724](https://github.com/matrix-org/synapse/issues/7724))
|
||||||
|
|
||||||
|
|
||||||
|
Deprecations and Removals
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
- Deprecate `m.login.jwt` login method in favour of `org.matrix.login.jwt`, as `m.login.jwt` is not part of the Matrix spec. ([\#7675](https://github.com/matrix-org/synapse/issues/7675))
|
||||||
|
|
||||||
|
|
||||||
|
Internal Changes
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Refactor getting replication updates from database. ([\#7636](https://github.com/matrix-org/synapse/issues/7636))
|
||||||
|
- Clean-up the login fallback code. ([\#7657](https://github.com/matrix-org/synapse/issues/7657))
|
||||||
|
- Increase the default SAML session expiry time to 15 minutes. ([\#7664](https://github.com/matrix-org/synapse/issues/7664))
|
||||||
|
- Convert the device message and pagination handlers to async/await. ([\#7678](https://github.com/matrix-org/synapse/issues/7678))
|
||||||
|
- Convert typing handler to async/await. ([\#7679](https://github.com/matrix-org/synapse/issues/7679))
|
||||||
|
- Require `parameterized` package version to be at least 0.7.0. ([\#7680](https://github.com/matrix-org/synapse/issues/7680))
|
||||||
|
- Refactor handling of `listeners` configuration settings. ([\#7681](https://github.com/matrix-org/synapse/issues/7681))
|
||||||
|
- Replace uses of `six.iterkeys`/`iteritems`/`itervalues` with `keys()`/`items()`/`values()`. ([\#7692](https://github.com/matrix-org/synapse/issues/7692))
|
||||||
|
- Add support for using `rust-python-jaeger-reporter` library to reduce jaeger tracing overhead. ([\#7697](https://github.com/matrix-org/synapse/issues/7697))
|
||||||
|
- Make Tox actions work on Debian 10. ([\#7703](https://github.com/matrix-org/synapse/issues/7703))
|
||||||
|
- Replace all remaining uses of `six` with native Python 3 equivalents. Contributed by @ilmari. ([\#7704](https://github.com/matrix-org/synapse/issues/7704))
|
||||||
|
- Fix broken link in sample config. ([\#7712](https://github.com/matrix-org/synapse/issues/7712))
|
||||||
|
- Speed up state res v2 across large state differences. ([\#7725](https://github.com/matrix-org/synapse/issues/7725))
|
||||||
|
- Convert directory handler to async/await. ([\#7727](https://github.com/matrix-org/synapse/issues/7727))
|
||||||
|
- Move `flake8` to the end of `scripts-dev/lint.sh` as it takes the longest and could cause the script to exit early. ([\#7738](https://github.com/matrix-org/synapse/issues/7738))
|
||||||
|
- Explain the "test" conditional requirement for dependencies is not all of the modules necessary to run the unit tests. ([\#7751](https://github.com/matrix-org/synapse/issues/7751))
|
||||||
|
- Add some metrics for inbound and outbound federation latencies: `synapse_federation_server_pdu_process_time` and `synapse_event_processing_lag_by_event`. ([\#7755](https://github.com/matrix-org/synapse/issues/7755))
|
||||||
|
|
||||||
|
|
||||||
Synapse 1.15.1 (2020-06-16)
|
Synapse 1.15.1 (2020-06-16)
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ locally. You'll need python 3.6 or later, and to install a number of tools:
|
|||||||
|
|
||||||
```
|
```
|
||||||
# Install the dependencies
|
# Install the dependencies
|
||||||
pip install -U black flake8 flake8-comprehensions isort
|
pip install -e ".[lint,mypy]"
|
||||||
|
|
||||||
# Run the linter script
|
# Run the linter script
|
||||||
./scripts-dev/lint.sh
|
./scripts-dev/lint.sh
|
||||||
@@ -63,6 +63,10 @@ run-time:
|
|||||||
./scripts-dev/lint.sh path/to/file1.py path/to/file2.py path/to/folder
|
./scripts-dev/lint.sh path/to/file1.py path/to/file2.py path/to/folder
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can also provide the `-d` option, which will lint the files that have been
|
||||||
|
changed since the last git commit. This will often be significantly faster than
|
||||||
|
linting the whole codebase.
|
||||||
|
|
||||||
Before pushing new changes, ensure they don't produce linting errors. Commit any
|
Before pushing new changes, ensure they don't produce linting errors. Commit any
|
||||||
files that were corrected.
|
files that were corrected.
|
||||||
|
|
||||||
|
|||||||
123
INSTALL.md
123
INSTALL.md
@@ -1,10 +1,12 @@
|
|||||||
- [Choosing your server name](#choosing-your-server-name)
|
- [Choosing your server name](#choosing-your-server-name)
|
||||||
|
- [Picking a database engine](#picking-a-database-engine)
|
||||||
- [Installing Synapse](#installing-synapse)
|
- [Installing Synapse](#installing-synapse)
|
||||||
- [Installing from source](#installing-from-source)
|
- [Installing from source](#installing-from-source)
|
||||||
- [Platform-Specific Instructions](#platform-specific-instructions)
|
- [Platform-Specific Instructions](#platform-specific-instructions)
|
||||||
- [Prebuilt packages](#prebuilt-packages)
|
- [Prebuilt packages](#prebuilt-packages)
|
||||||
- [Setting up Synapse](#setting-up-synapse)
|
- [Setting up Synapse](#setting-up-synapse)
|
||||||
- [TLS certificates](#tls-certificates)
|
- [TLS certificates](#tls-certificates)
|
||||||
|
- [Client Well-Known URI](#client-well-known-uri)
|
||||||
- [Email](#email)
|
- [Email](#email)
|
||||||
- [Registering a user](#registering-a-user)
|
- [Registering a user](#registering-a-user)
|
||||||
- [Setting up a TURN server](#setting-up-a-turn-server)
|
- [Setting up a TURN server](#setting-up-a-turn-server)
|
||||||
@@ -27,6 +29,25 @@ that your email address is probably `user@example.com` rather than
|
|||||||
`user@email.example.com`) - but doing so may require more advanced setup: see
|
`user@email.example.com`) - but doing so may require more advanced setup: see
|
||||||
[Setting up Federation](docs/federate.md).
|
[Setting up Federation](docs/federate.md).
|
||||||
|
|
||||||
|
# Picking a database engine
|
||||||
|
|
||||||
|
Synapse offers two database engines:
|
||||||
|
* [PostgreSQL](https://www.postgresql.org)
|
||||||
|
* [SQLite](https://sqlite.org/)
|
||||||
|
|
||||||
|
Almost all installations should opt to use PostgreSQL. Advantages include:
|
||||||
|
|
||||||
|
* significant performance improvements due to the superior threading and
|
||||||
|
caching model, smarter query optimiser
|
||||||
|
* allowing the DB to be run on separate hardware
|
||||||
|
|
||||||
|
For information on how to install and use PostgreSQL, please see
|
||||||
|
[docs/postgres.md](docs/postgres.md)
|
||||||
|
|
||||||
|
By default Synapse uses SQLite and in doing so trades performance for convenience.
|
||||||
|
SQLite is only recommended in Synapse for testing purposes or for servers with
|
||||||
|
light workloads.
|
||||||
|
|
||||||
# Installing Synapse
|
# Installing Synapse
|
||||||
|
|
||||||
## Installing from source
|
## Installing from source
|
||||||
@@ -36,7 +57,7 @@ that your email address is probably `user@example.com` rather than
|
|||||||
System requirements:
|
System requirements:
|
||||||
|
|
||||||
- POSIX-compliant system (tested on Linux & OS X)
|
- POSIX-compliant system (tested on Linux & OS X)
|
||||||
- Python 3.5.2 or later, up to Python 3.8.
|
- Python 3.5.2 or later, up to Python 3.9.
|
||||||
- At least 1GB of free RAM if you want to join large public rooms like #matrix:matrix.org
|
- At least 1GB of free RAM if you want to join large public rooms like #matrix:matrix.org
|
||||||
|
|
||||||
Synapse is written in Python but some of the libraries it uses are written in
|
Synapse is written in Python but some of the libraries it uses are written in
|
||||||
@@ -234,9 +255,9 @@ for a number of platforms.
|
|||||||
|
|
||||||
There is an offical synapse image available at
|
There is an offical synapse image available at
|
||||||
https://hub.docker.com/r/matrixdotorg/synapse which can be used with
|
https://hub.docker.com/r/matrixdotorg/synapse which can be used with
|
||||||
the docker-compose file available at [contrib/docker](contrib/docker). Further information on
|
the docker-compose file available at [contrib/docker](contrib/docker). Further
|
||||||
this including configuration options is available in the README on
|
information on this including configuration options is available in the README
|
||||||
hub.docker.com.
|
on hub.docker.com.
|
||||||
|
|
||||||
Alternatively, Andreas Peters (previously Silvio Fricke) has contributed a
|
Alternatively, Andreas Peters (previously Silvio Fricke) has contributed a
|
||||||
Dockerfile to automate a synapse server in a single Docker image, at
|
Dockerfile to automate a synapse server in a single Docker image, at
|
||||||
@@ -244,7 +265,8 @@ https://hub.docker.com/r/avhost/docker-matrix/tags/
|
|||||||
|
|
||||||
Slavi Pantaleev has created an Ansible playbook,
|
Slavi Pantaleev has created an Ansible playbook,
|
||||||
which installs the offical Docker image of Matrix Synapse
|
which installs the offical Docker image of Matrix Synapse
|
||||||
along with many other Matrix-related services (Postgres database, riot-web, coturn, mxisd, SSL support, etc.).
|
along with many other Matrix-related services (Postgres database, Element, coturn,
|
||||||
|
ma1sd, SSL support, etc.).
|
||||||
For more details, see
|
For more details, see
|
||||||
https://github.com/spantaleev/matrix-docker-ansible-deploy
|
https://github.com/spantaleev/matrix-docker-ansible-deploy
|
||||||
|
|
||||||
@@ -277,22 +299,27 @@ The fingerprint of the repository signing key (as shown by `gpg
|
|||||||
/usr/share/keyrings/matrix-org-archive-keyring.gpg`) is
|
/usr/share/keyrings/matrix-org-archive-keyring.gpg`) is
|
||||||
`AAF9AE843A7584B5A3E4CD2BCF45A512DE2DA058`.
|
`AAF9AE843A7584B5A3E4CD2BCF45A512DE2DA058`.
|
||||||
|
|
||||||
#### Downstream Debian/Ubuntu packages
|
#### Downstream Debian packages
|
||||||
|
|
||||||
For `buster` and `sid`, Synapse is available in the Debian repositories and
|
We do not recommend using the packages from the default Debian `buster`
|
||||||
it should be possible to install it with simply:
|
repository at this time, as they are old and suffer from known security
|
||||||
|
vulnerabilities. You can install the latest version of Synapse from
|
||||||
|
[our repository](#matrixorg-packages) or from `buster-backports`. Please
|
||||||
|
see the [Debian documentation](https://backports.debian.org/Instructions/)
|
||||||
|
for information on how to use backports.
|
||||||
|
|
||||||
|
If you are using Debian `sid` or testing, Synapse is available in the default
|
||||||
|
repositories and it should be possible to install it simply with:
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo apt install matrix-synapse
|
sudo apt install matrix-synapse
|
||||||
```
|
```
|
||||||
|
|
||||||
There is also a version of `matrix-synapse` in `stretch-backports`. Please see
|
#### Downstream Ubuntu packages
|
||||||
the [Debian documentation on
|
|
||||||
backports](https://backports.debian.org/Instructions/) for information on how
|
|
||||||
to use them.
|
|
||||||
|
|
||||||
We do not recommend using the packages in downstream Ubuntu at this time, as
|
We do not recommend using the packages in the default Ubuntu repository
|
||||||
they are old and suffer from known security vulnerabilities.
|
at this time, as they are old and suffer from known security vulnerabilities.
|
||||||
|
The latest version of Synapse can be installed from [our repository](#matrixorg-packages).
|
||||||
|
|
||||||
### Fedora
|
### Fedora
|
||||||
|
|
||||||
@@ -405,13 +432,11 @@ so, you will need to edit `homeserver.yaml`, as follows:
|
|||||||
```
|
```
|
||||||
|
|
||||||
* You will also need to uncomment the `tls_certificate_path` and
|
* You will also need to uncomment the `tls_certificate_path` and
|
||||||
`tls_private_key_path` lines under the `TLS` section. You can either
|
`tls_private_key_path` lines under the `TLS` section. You will need to manage
|
||||||
point these settings at an existing certificate and key, or you can
|
provisioning of these certificates yourself — Synapse had built-in ACME
|
||||||
enable Synapse's built-in ACME (Let's Encrypt) support. Instructions
|
support, but the ACMEv1 protocol Synapse implements is deprecated, not
|
||||||
for having Synapse automatically provision and renew federation
|
allowed by LetsEncrypt for new sites, and will break for existing sites in
|
||||||
certificates through ACME can be found at [ACME.md](docs/ACME.md).
|
late 2020. See [ACME.md](docs/ACME.md).
|
||||||
Note that, as pointed out in that document, this feature will not
|
|
||||||
work with installs set up after November 2019.
|
|
||||||
|
|
||||||
If you are using your own certificate, be sure to use a `.pem` file that
|
If you are using your own certificate, be sure to use a `.pem` file that
|
||||||
includes the full certificate chain including any intermediate certificates
|
includes the full certificate chain including any intermediate certificates
|
||||||
@@ -421,6 +446,60 @@ so, you will need to edit `homeserver.yaml`, as follows:
|
|||||||
For a more detailed guide to configuring your server for federation, see
|
For a more detailed guide to configuring your server for federation, see
|
||||||
[federate.md](docs/federate.md).
|
[federate.md](docs/federate.md).
|
||||||
|
|
||||||
|
## Client Well-Known URI
|
||||||
|
|
||||||
|
Setting up the client Well-Known URI is optional but if you set it up, it will
|
||||||
|
allow users to enter their full username (e.g. `@user:<server_name>`) into clients
|
||||||
|
which support well-known lookup to automatically configure the homeserver and
|
||||||
|
identity server URLs. This is useful so that users don't have to memorize or think
|
||||||
|
about the actual homeserver URL you are using.
|
||||||
|
|
||||||
|
The URL `https://<server_name>/.well-known/matrix/client` should return JSON in
|
||||||
|
the following format.
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"m.homeserver": {
|
||||||
|
"base_url": "https://<matrix.example.com>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
It can optionally contain identity server information as well.
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"m.homeserver": {
|
||||||
|
"base_url": "https://<matrix.example.com>"
|
||||||
|
},
|
||||||
|
"m.identity_server": {
|
||||||
|
"base_url": "https://<identity.example.com>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
To work in browser based clients, the file must be served with the appropriate
|
||||||
|
Cross-Origin Resource Sharing (CORS) headers. A recommended value would be
|
||||||
|
`Access-Control-Allow-Origin: *` which would allow all browser based clients to
|
||||||
|
view it.
|
||||||
|
|
||||||
|
In nginx this would be something like:
|
||||||
|
```
|
||||||
|
location /.well-known/matrix/client {
|
||||||
|
return 200 '{"m.homeserver": {"base_url": "https://<matrix.example.com>"}}';
|
||||||
|
add_header Content-Type application/json;
|
||||||
|
add_header Access-Control-Allow-Origin *;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You should also ensure the `public_baseurl` option in `homeserver.yaml` is set
|
||||||
|
correctly. `public_baseurl` should be set to the URL that clients will use to
|
||||||
|
connect to your server. This is the same URL you put for the `m.homeserver`
|
||||||
|
`base_url` above.
|
||||||
|
|
||||||
|
```
|
||||||
|
public_baseurl: "https://<matrix.example.com>"
|
||||||
|
```
|
||||||
|
|
||||||
## Email
|
## Email
|
||||||
|
|
||||||
@@ -439,7 +518,7 @@ email will be disabled.
|
|||||||
|
|
||||||
## Registering a user
|
## Registering a user
|
||||||
|
|
||||||
The easiest way to create a new user is to do so from a client like [Riot](https://riot.im).
|
The easiest way to create a new user is to do so from a client like [Element](https://element.io/).
|
||||||
|
|
||||||
Alternatively you can do so from the command line if you have installed via pip.
|
Alternatively you can do so from the command line if you have installed via pip.
|
||||||
|
|
||||||
|
|||||||
98
README.rst
98
README.rst
@@ -1,10 +1,6 @@
|
|||||||
================
|
=========================================================
|
||||||
Synapse |shield|
|
Synapse |support| |development| |license| |pypi| |python|
|
||||||
================
|
=========================================================
|
||||||
|
|
||||||
.. |shield| image:: https://img.shields.io/matrix/synapse:matrix.org?label=support&logo=matrix
|
|
||||||
:alt: (get support on #synapse:matrix.org)
|
|
||||||
:target: https://matrix.to/#/#synapse:matrix.org
|
|
||||||
|
|
||||||
.. contents::
|
.. contents::
|
||||||
|
|
||||||
@@ -45,7 +41,7 @@ which handle:
|
|||||||
- Eventually-consistent cryptographically secure synchronisation of room
|
- Eventually-consistent cryptographically secure synchronisation of room
|
||||||
state across a global open network of federated servers and services
|
state across a global open network of federated servers and services
|
||||||
- Sending and receiving extensible messages in a room with (optional)
|
- Sending and receiving extensible messages in a room with (optional)
|
||||||
end-to-end encryption[1]
|
end-to-end encryption
|
||||||
- Inviting, joining, leaving, kicking, banning room members
|
- Inviting, joining, leaving, kicking, banning room members
|
||||||
- Managing user accounts (registration, login, logout)
|
- Managing user accounts (registration, login, logout)
|
||||||
- Using 3rd Party IDs (3PIDs) such as email addresses, phone numbers,
|
- Using 3rd Party IDs (3PIDs) such as email addresses, phone numbers,
|
||||||
@@ -82,9 +78,6 @@ at the `Matrix spec <https://matrix.org/docs/spec>`_, and experiment with the
|
|||||||
|
|
||||||
Thanks for using Matrix!
|
Thanks for using Matrix!
|
||||||
|
|
||||||
[1] End-to-end encryption is currently in beta: `blog post <https://matrix.org/blog/2016/11/21/matrixs-olm-end-to-end-encryption-security-assessment-released-and-implemented-cross-platform-on-riot-at-last>`_.
|
|
||||||
|
|
||||||
|
|
||||||
Support
|
Support
|
||||||
=======
|
=======
|
||||||
|
|
||||||
@@ -115,12 +108,11 @@ Unless you are running a test instance of Synapse on your local machine, in
|
|||||||
general, you will need to enable TLS support before you can successfully
|
general, you will need to enable TLS support before you can successfully
|
||||||
connect from a client: see `<INSTALL.md#tls-certificates>`_.
|
connect from a client: see `<INSTALL.md#tls-certificates>`_.
|
||||||
|
|
||||||
An easy way to get started is to login or register via Riot at
|
An easy way to get started is to login or register via Element at
|
||||||
https://riot.im/app/#/login or https://riot.im/app/#/register respectively.
|
https://app.element.io/#/login or https://app.element.io/#/register respectively.
|
||||||
You will need to change the server you are logging into from ``matrix.org``
|
You will need to change the server you are logging into from ``matrix.org``
|
||||||
and instead specify a Homeserver URL of ``https://<server_name>:8448``
|
and instead specify a Homeserver URL of ``https://<server_name>:8448``
|
||||||
(or just ``https://<server_name>`` if you are using a reverse proxy).
|
(or just ``https://<server_name>`` if you are using a reverse proxy).
|
||||||
(Leave the identity server as the default - see `Identity servers`_.)
|
|
||||||
If you prefer to use another client, refer to our
|
If you prefer to use another client, refer to our
|
||||||
`client breakdown <https://matrix.org/docs/projects/clients-matrix>`_.
|
`client breakdown <https://matrix.org/docs/projects/clients-matrix>`_.
|
||||||
|
|
||||||
@@ -137,7 +129,7 @@ it, specify ``enable_registration: true`` in ``homeserver.yaml``. (It is then
|
|||||||
recommended to also set up CAPTCHA - see `<docs/CAPTCHA_SETUP.md>`_.)
|
recommended to also set up CAPTCHA - see `<docs/CAPTCHA_SETUP.md>`_.)
|
||||||
|
|
||||||
Once ``enable_registration`` is set to ``true``, it is possible to register a
|
Once ``enable_registration`` is set to ``true``, it is possible to register a
|
||||||
user via `riot.im <https://riot.im/app/#/register>`_ or other Matrix clients.
|
user via a Matrix client.
|
||||||
|
|
||||||
Your new user name will be formed partly from the ``server_name``, and partly
|
Your new user name will be formed partly from the ``server_name``, and partly
|
||||||
from a localpart you specify when you create the account. Your name will take
|
from a localpart you specify when you create the account. Your name will take
|
||||||
@@ -183,30 +175,6 @@ versions of synapse.
|
|||||||
|
|
||||||
.. _UPGRADE.rst: UPGRADE.rst
|
.. _UPGRADE.rst: UPGRADE.rst
|
||||||
|
|
||||||
|
|
||||||
Using PostgreSQL
|
|
||||||
================
|
|
||||||
|
|
||||||
Synapse offers two database engines:
|
|
||||||
* `SQLite <https://sqlite.org/>`_
|
|
||||||
* `PostgreSQL <https://www.postgresql.org>`_
|
|
||||||
|
|
||||||
By default Synapse uses SQLite in and doing so trades performance for convenience.
|
|
||||||
SQLite is only recommended in Synapse for testing purposes or for servers with
|
|
||||||
light workloads.
|
|
||||||
|
|
||||||
Almost all installations should opt to use PostreSQL. Advantages include:
|
|
||||||
|
|
||||||
* significant performance improvements due to the superior threading and
|
|
||||||
caching model, smarter query optimiser
|
|
||||||
* allowing the DB to be run on separate hardware
|
|
||||||
* allowing basic active/backup high-availability with a "hot spare" synapse
|
|
||||||
pointing at the same DB master, as well as enabling DB replication in
|
|
||||||
synapse itself.
|
|
||||||
|
|
||||||
For information on how to install and use PostgreSQL, please see
|
|
||||||
`docs/postgres.md <docs/postgres.md>`_.
|
|
||||||
|
|
||||||
.. _reverse-proxy:
|
.. _reverse-proxy:
|
||||||
|
|
||||||
Using a reverse proxy with Synapse
|
Using a reverse proxy with Synapse
|
||||||
@@ -215,7 +183,7 @@ Using a reverse proxy with Synapse
|
|||||||
It is recommended to put a reverse proxy such as
|
It is recommended to put a reverse proxy such as
|
||||||
`nginx <https://nginx.org/en/docs/http/ngx_http_proxy_module.html>`_,
|
`nginx <https://nginx.org/en/docs/http/ngx_http_proxy_module.html>`_,
|
||||||
`Apache <https://httpd.apache.org/docs/current/mod/mod_proxy_http.html>`_,
|
`Apache <https://httpd.apache.org/docs/current/mod/mod_proxy_http.html>`_,
|
||||||
`Caddy <https://caddyserver.com/docs/proxy>`_ or
|
`Caddy <https://caddyserver.com/docs/quick-starts/reverse-proxy>`_ or
|
||||||
`HAProxy <https://www.haproxy.org/>`_ in front of Synapse. One advantage of
|
`HAProxy <https://www.haproxy.org/>`_ in front of Synapse. One advantage of
|
||||||
doing so is that it means that you can expose the default https port (443) to
|
doing so is that it means that you can expose the default https port (443) to
|
||||||
Matrix clients without needing to run Synapse with root privileges.
|
Matrix clients without needing to run Synapse with root privileges.
|
||||||
@@ -255,10 +223,9 @@ email address.
|
|||||||
Password reset
|
Password reset
|
||||||
==============
|
==============
|
||||||
|
|
||||||
If a user has registered an email address to their account using an identity
|
Users can reset their password through their client. Alternatively, a server admin
|
||||||
server, they can request a password-reset token via clients such as Riot.
|
can reset a users password using the `admin API <docs/admin_api/user_admin_api.rst#reset-password>`_
|
||||||
|
or by directly editing the database as shown below.
|
||||||
A manual password reset can be done via direct database access as follows.
|
|
||||||
|
|
||||||
First calculate the hash of the new password::
|
First calculate the hash of the new password::
|
||||||
|
|
||||||
@@ -289,9 +256,9 @@ directory of your choice::
|
|||||||
Synapse has a number of external dependencies, that are easiest
|
Synapse has a number of external dependencies, that are easiest
|
||||||
to install using pip and a virtualenv::
|
to install using pip and a virtualenv::
|
||||||
|
|
||||||
virtualenv -p python3 env
|
python3 -m venv ./env
|
||||||
source env/bin/activate
|
source ./env/bin/activate
|
||||||
python -m pip install --no-use-pep517 -e ".[all]"
|
pip install -e ".[all,test]"
|
||||||
|
|
||||||
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.
|
dependencies into a virtual env.
|
||||||
@@ -303,9 +270,9 @@ check that everything is installed as it should be::
|
|||||||
|
|
||||||
This should end with a 'PASSED' result::
|
This should end with a 'PASSED' result::
|
||||||
|
|
||||||
Ran 143 tests in 0.601s
|
Ran 1266 tests in 643.930s
|
||||||
|
|
||||||
PASSED (successes=143)
|
PASSED (skips=15, successes=1251)
|
||||||
|
|
||||||
Running the Integration Tests
|
Running the Integration Tests
|
||||||
=============================
|
=============================
|
||||||
@@ -319,19 +286,6 @@ Testing with SyTest is recommended for verifying that changes related to the
|
|||||||
Client-Server API are functioning correctly. See the `installation instructions
|
Client-Server API are functioning correctly. See the `installation instructions
|
||||||
<https://github.com/matrix-org/sytest#installing>`_ for details.
|
<https://github.com/matrix-org/sytest#installing>`_ for details.
|
||||||
|
|
||||||
Building Internal API Documentation
|
|
||||||
===================================
|
|
||||||
|
|
||||||
Before building internal API documentation install sphinx and
|
|
||||||
sphinxcontrib-napoleon::
|
|
||||||
|
|
||||||
pip install sphinx
|
|
||||||
pip install sphinxcontrib-napoleon
|
|
||||||
|
|
||||||
Building internal API documentation::
|
|
||||||
|
|
||||||
python setup.py build_sphinx
|
|
||||||
|
|
||||||
Troubleshooting
|
Troubleshooting
|
||||||
===============
|
===============
|
||||||
|
|
||||||
@@ -416,3 +370,23 @@ something like the following in their logs::
|
|||||||
|
|
||||||
This is normally caused by a misconfiguration in your reverse-proxy. See
|
This is normally caused by a misconfiguration in your reverse-proxy. See
|
||||||
`<docs/reverse_proxy.md>`_ and double-check that your settings are correct.
|
`<docs/reverse_proxy.md>`_ and double-check that your settings are correct.
|
||||||
|
|
||||||
|
.. |support| image:: https://img.shields.io/matrix/synapse:matrix.org?label=support&logo=matrix
|
||||||
|
:alt: (get support on #synapse:matrix.org)
|
||||||
|
:target: https://matrix.to/#/#synapse:matrix.org
|
||||||
|
|
||||||
|
.. |development| image:: https://img.shields.io/matrix/synapse-dev:matrix.org?label=development&logo=matrix
|
||||||
|
:alt: (discuss development on #synapse-dev:matrix.org)
|
||||||
|
:target: https://matrix.to/#/#synapse-dev:matrix.org
|
||||||
|
|
||||||
|
.. |license| image:: https://img.shields.io/github/license/matrix-org/synapse
|
||||||
|
:alt: (check license in LICENSE file)
|
||||||
|
:target: LICENSE
|
||||||
|
|
||||||
|
.. |pypi| image:: https://img.shields.io/pypi/v/matrix-synapse
|
||||||
|
:alt: (latest version released on PyPi)
|
||||||
|
:target: https://pypi.org/project/matrix-synapse
|
||||||
|
|
||||||
|
.. |python| image:: https://img.shields.io/pypi/pyversions/matrix-synapse
|
||||||
|
:alt: (supported python versions)
|
||||||
|
:target: https://pypi.org/project/matrix-synapse
|
||||||
|
|||||||
104
UPGRADE.rst
104
UPGRADE.rst
@@ -75,6 +75,110 @@ for example:
|
|||||||
wget https://packages.matrix.org/debian/pool/main/m/matrix-synapse-py3/matrix-synapse-py3_1.3.0+stretch1_amd64.deb
|
wget https://packages.matrix.org/debian/pool/main/m/matrix-synapse-py3/matrix-synapse-py3_1.3.0+stretch1_amd64.deb
|
||||||
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.23.0
|
||||||
|
====================
|
||||||
|
|
||||||
|
Structured logging configuration breaking changes
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
This release deprecates use of the ``structured: true`` logging configuration for
|
||||||
|
structured logging. If your logging configuration contains ``structured: true``
|
||||||
|
then it should be modified based on the `structured logging documentation
|
||||||
|
<https://github.com/matrix-org/synapse/blob/master/docs/structured_logging.md>`_.
|
||||||
|
|
||||||
|
The ``structured`` and ``drains`` logging options are now deprecated and should
|
||||||
|
be replaced by standard logging configuration of ``handlers`` and ``formatters`.
|
||||||
|
|
||||||
|
A future will release of Synapse will make using ``structured: true`` an error.
|
||||||
|
|
||||||
|
Upgrading to v1.22.0
|
||||||
|
====================
|
||||||
|
|
||||||
|
ThirdPartyEventRules breaking changes
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
This release introduces a backwards-incompatible change to modules making use of
|
||||||
|
``ThirdPartyEventRules`` in Synapse. If you make use of a module defined under the
|
||||||
|
``third_party_event_rules`` config option, please make sure it is updated to handle
|
||||||
|
the below change:
|
||||||
|
|
||||||
|
The ``http_client`` argument is no longer passed to modules as they are initialised. Instead,
|
||||||
|
modules are expected to make use of the ``http_client`` property on the ``ModuleApi`` class.
|
||||||
|
Modules are now passed a ``module_api`` argument during initialisation, which is an instance of
|
||||||
|
``ModuleApi``. ``ModuleApi`` instances have a ``http_client`` property which acts the same as
|
||||||
|
the ``http_client`` argument previously passed to ``ThirdPartyEventRules`` modules.
|
||||||
|
|
||||||
|
Upgrading to v1.21.0
|
||||||
|
====================
|
||||||
|
|
||||||
|
Forwarding ``/_synapse/client`` through your reverse proxy
|
||||||
|
----------------------------------------------------------
|
||||||
|
|
||||||
|
The `reverse proxy documentation
|
||||||
|
<https://github.com/matrix-org/synapse/blob/develop/docs/reverse_proxy.md>`_ has been updated
|
||||||
|
to include reverse proxy directives for ``/_synapse/client/*`` endpoints. As the user password
|
||||||
|
reset flow now uses endpoints under this prefix, **you must update your reverse proxy
|
||||||
|
configurations for user password reset to work**.
|
||||||
|
|
||||||
|
Additionally, note that the `Synapse worker documentation
|
||||||
|
<https://github.com/matrix-org/synapse/blob/develop/docs/workers.md>`_ has been updated to
|
||||||
|
state that the ``/_synapse/client/password_reset/email/submit_token`` endpoint can be handled
|
||||||
|
by all workers. If you make use of Synapse's worker feature, please update your reverse proxy
|
||||||
|
configuration to reflect this change.
|
||||||
|
|
||||||
|
New HTML templates
|
||||||
|
------------------
|
||||||
|
|
||||||
|
A new HTML template,
|
||||||
|
`password_reset_confirmation.html <https://github.com/matrix-org/synapse/blob/develop/synapse/res/templates/password_reset_confirmation.html>`_,
|
||||||
|
has been added to the ``synapse/res/templates`` directory. If you are using a
|
||||||
|
custom template directory, you may want to copy the template over and modify it.
|
||||||
|
|
||||||
|
Note that as of v1.20.0, templates do not need to be included in custom template
|
||||||
|
directories for Synapse to start. The default templates will be used if a custom
|
||||||
|
template cannot be found.
|
||||||
|
|
||||||
|
This page will appear to the user after clicking a password reset link that has
|
||||||
|
been emailed to them.
|
||||||
|
|
||||||
|
To complete password reset, the page must include a way to make a `POST`
|
||||||
|
request to
|
||||||
|
``/_synapse/client/password_reset/{medium}/submit_token``
|
||||||
|
with the query parameters from the original link, presented as a URL-encoded form. See the file
|
||||||
|
itself for more details.
|
||||||
|
|
||||||
|
Updated Single Sign-on HTML Templates
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
The ``saml_error.html`` template was removed from Synapse and replaced with the
|
||||||
|
``sso_error.html`` template. If your Synapse is configured to use SAML and a
|
||||||
|
custom ``sso_redirect_confirm_template_dir`` configuration then any customisations
|
||||||
|
of the ``saml_error.html`` template will need to be merged into the ``sso_error.html``
|
||||||
|
template. These templates are similar, but the parameters are slightly different:
|
||||||
|
|
||||||
|
* The ``msg`` parameter should be renamed to ``error_description``.
|
||||||
|
* There is no longer a ``code`` parameter for the response code.
|
||||||
|
* A string ``error`` parameter is available that includes a short hint of why a
|
||||||
|
user is seeing the error page.
|
||||||
|
|
||||||
|
Upgrading to v1.18.0
|
||||||
|
====================
|
||||||
|
|
||||||
|
Docker `-py3` suffix will be removed in future versions
|
||||||
|
-------------------------------------------------------
|
||||||
|
|
||||||
|
From 10th August 2020, we will no longer publish Docker images with the `-py3` tag suffix. The images tagged with the `-py3` suffix have been identical to the non-suffixed tags since release 0.99.0, and the suffix is obsolete.
|
||||||
|
|
||||||
|
On 10th August, we will remove the `latest-py3` tag. Existing per-release tags (such as `v1.18.0-py3`) will not be removed, but no new `-py3` tags will be added.
|
||||||
|
|
||||||
|
Scripts relying on the `-py3` suffix will need to be updated.
|
||||||
|
|
||||||
|
Redis replication is now recommended in lieu of TCP replication
|
||||||
|
---------------------------------------------------------------
|
||||||
|
|
||||||
|
When setting up worker processes, we now recommend the use of a Redis server for replication. **The old direct TCP connection method is deprecated and will be removed in a future release.**
|
||||||
|
See `docs/workers.md <docs/workers.md>`_ for more details.
|
||||||
|
|
||||||
Upgrading to v1.14.0
|
Upgrading to v1.14.0
|
||||||
====================
|
====================
|
||||||
|
|
||||||
|
|||||||
1
changelog.d/8455.bugfix
Normal file
1
changelog.d/8455.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix fetching of E2E cross signing keys over federation when only one of the master key and device signing key is cached already.
|
||||||
1
changelog.d/8519.feature
Normal file
1
changelog.d/8519.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add an admin api to delete a single file or files were not used for a defined time from server. Contributed by @dklimpel.
|
||||||
1
changelog.d/8539.feature
Normal file
1
changelog.d/8539.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Split admin API for reported events (`GET /_synapse/admin/v1/event_reports`) into detail and list endpoints. This is a breaking change to #8217 which was introduced in Synapse v1.21.0. Those who already use this API should check their scripts. Contributed by @dklimpel.
|
||||||
1
changelog.d/8559.misc
Normal file
1
changelog.d/8559.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Optimise `/createRoom` with multiple invited users.
|
||||||
1
changelog.d/8580.bugfix
Normal file
1
changelog.d/8580.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix a bug where Synapse would blindly forward bad responses from federation to clients when retrieving profile information.
|
||||||
1
changelog.d/8582.doc
Normal file
1
changelog.d/8582.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Instructions for Azure AD in the OpenID Connect documentation. Contributed by peterk.
|
||||||
1
changelog.d/8595.misc
Normal file
1
changelog.d/8595.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Implement and use an @lru_cache decorator.
|
||||||
1
changelog.d/8607.feature
Normal file
1
changelog.d/8607.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Support generating structured logs via the standard logging configuration.
|
||||||
1
changelog.d/8610.feature
Normal file
1
changelog.d/8610.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add an admin APIs to allow server admins to list users' pushers. Contributed by @dklimpel.
|
||||||
1
changelog.d/8614.misc
Normal file
1
changelog.d/8614.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Don't instansiate Requester directly.
|
||||||
1
changelog.d/8615.misc
Normal file
1
changelog.d/8615.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Type hints for `RegistrationStore`.
|
||||||
1
changelog.d/8616.misc
Normal file
1
changelog.d/8616.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Change schema to support access tokens belonging to one user but granting access to another.
|
||||||
1
changelog.d/8620.bugfix
Normal file
1
changelog.d/8620.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix a bug where the account validity endpoint would silently fail if the user ID did not have an expiration time. It now returns a 400 error.
|
||||||
1
changelog.d/8621.misc
Normal file
1
changelog.d/8621.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Remove unused OPTIONS handlers.
|
||||||
1
changelog.d/8627.bugfix
Normal file
1
changelog.d/8627.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix email notifications for invites without local state.
|
||||||
1
changelog.d/8628.bugfix
Normal file
1
changelog.d/8628.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix handling of invalid group IDs to return a 400 rather than log an exception and return a 500.
|
||||||
1
changelog.d/8632.bugfix
Normal file
1
changelog.d/8632.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix handling of User-Agent headers that are invalid UTF-8, which caused user agents of users to not get correctly recorded.
|
||||||
1
changelog.d/8633.misc
Normal file
1
changelog.d/8633.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Run `mypy` as part of the lint.sh script.
|
||||||
1
changelog.d/8634.misc
Normal file
1
changelog.d/8634.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Correct Synapse's PyPI package name in the OpenID Connect installation instructions.
|
||||||
1
changelog.d/8635.doc
Normal file
1
changelog.d/8635.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Improve the sample configuration for single sign-on providers.
|
||||||
1
changelog.d/8639.misc
Normal file
1
changelog.d/8639.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix typos and spelling errors in the code.
|
||||||
1
changelog.d/8640.misc
Normal file
1
changelog.d/8640.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Reduce number of OpenTracing spans started.
|
||||||
1
changelog.d/8643.bugfix
Normal file
1
changelog.d/8643.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix a bug in the `joined_rooms` admin API if the user has never joined any rooms. The bug was introduced, along with the API, in v1.21.0.
|
||||||
1
changelog.d/8644.misc
Normal file
1
changelog.d/8644.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add field `total` to device list in admin API.
|
||||||
1
changelog.d/8647.feature
Normal file
1
changelog.d/8647.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add an admin API `GET /_synapse/admin/v1/users/<user_id>/media` to get information about uploaded media. Contributed by @dklimpel.
|
||||||
1
changelog.d/8655.misc
Normal file
1
changelog.d/8655.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add more type hints to the application services code.
|
||||||
1
changelog.d/8657.doc
Normal file
1
changelog.d/8657.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix the filepath of Dex's example config and the link to Dex's Getting Started guide in the OpenID Connect docs.
|
||||||
1
changelog.d/8664.misc
Normal file
1
changelog.d/8664.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Tell Black to format code for Python 3.5.
|
||||||
1
changelog.d/8665.doc
Normal file
1
changelog.d/8665.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Note support for Python 3.9.
|
||||||
1
changelog.d/8666.doc
Normal file
1
changelog.d/8666.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Minor updates to docs on running tests.
|
||||||
1
changelog.d/8667.doc
Normal file
1
changelog.d/8667.doc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Interlink prometheus/grafana documentation.
|
||||||
1
changelog.d/8668.misc
Normal file
1
changelog.d/8668.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Reduce number of OpenTracing spans started.
|
||||||
1
changelog.d/8669.misc
Normal file
1
changelog.d/8669.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Don't pull event from DB when handling replication traffic.
|
||||||
1
changelog.d/8670.misc
Normal file
1
changelog.d/8670.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Reduce number of OpenTracing spans started.
|
||||||
1
changelog.d/8671.misc
Normal file
1
changelog.d/8671.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Abstract some invite-related code in preparation for landing knocking.
|
||||||
1
changelog.d/8679.misc
Normal file
1
changelog.d/8679.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Clarify representation of events in logfiles.
|
||||||
1
changelog.d/8680.misc
Normal file
1
changelog.d/8680.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Don't require `hiredis` package to be installed to run unit tests.
|
||||||
1
changelog.d/8682.bugfix
Normal file
1
changelog.d/8682.bugfix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix exception during handling multiple concurrent requests for remote media when using multiple media repositories.
|
||||||
1
changelog.d/8684.misc
Normal file
1
changelog.d/8684.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fix typing info on cache call signature to accept `on_invalidate`.
|
||||||
1
changelog.d/8685.feature
Normal file
1
changelog.d/8685.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Support generating structured logs via the standard logging configuration.
|
||||||
1
changelog.d/8688.misc
Normal file
1
changelog.d/8688.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Abstract some invite-related code in preparation for landing knocking.
|
||||||
1
changelog.d/8689.feature
Normal file
1
changelog.d/8689.feature
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add an admin APIs to allow server admins to list users' pushers. Contributed by @dklimpel.
|
||||||
1
changelog.d/8690.misc
Normal file
1
changelog.d/8690.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Fail tests if they do not await coroutines.
|
||||||
1
changelog.d/8693.misc
Normal file
1
changelog.d/8693.misc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Add more type hints to the application services code.
|
||||||
@@ -15,11 +15,6 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
""" Starts a synapse client console. """
|
""" Starts a synapse client console. """
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
from twisted.internet import reactor, defer, threads
|
|
||||||
from http import TwistedHttpClient
|
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import cmd
|
import cmd
|
||||||
import getpass
|
import getpass
|
||||||
@@ -28,12 +23,14 @@ import shlex
|
|||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import urllib
|
import urllib
|
||||||
import urlparse
|
from http import TwistedHttpClient
|
||||||
|
|
||||||
import nacl.signing
|
|
||||||
import nacl.encoding
|
import nacl.encoding
|
||||||
|
import nacl.signing
|
||||||
|
import urlparse
|
||||||
|
from signedjson.sign import SignatureVerifyException, verify_signed_json
|
||||||
|
|
||||||
from signedjson.sign import verify_signed_json, SignatureVerifyException
|
from twisted.internet import defer, reactor, threads
|
||||||
|
|
||||||
CONFIG_JSON = "cmdclient_config.json"
|
CONFIG_JSON = "cmdclient_config.json"
|
||||||
|
|
||||||
@@ -493,7 +490,7 @@ class SynapseCmd(cmd.Cmd):
|
|||||||
"list messages <roomid> from=END&to=START&limit=3"
|
"list messages <roomid> from=END&to=START&limit=3"
|
||||||
"""
|
"""
|
||||||
args = self._parse(line, ["type", "roomid", "qp"])
|
args = self._parse(line, ["type", "roomid", "qp"])
|
||||||
if not "type" in args or not "roomid" in args:
|
if "type" not in args or "roomid" not in args:
|
||||||
print("Must specify type and room ID.")
|
print("Must specify type and room ID.")
|
||||||
return
|
return
|
||||||
if args["type"] not in ["members", "messages"]:
|
if args["type"] not in ["members", "messages"]:
|
||||||
@@ -508,7 +505,7 @@ class SynapseCmd(cmd.Cmd):
|
|||||||
try:
|
try:
|
||||||
key_value = key_value_str.split("=")
|
key_value = key_value_str.split("=")
|
||||||
qp[key_value[0]] = key_value[1]
|
qp[key_value[0]] = key_value[1]
|
||||||
except:
|
except Exception:
|
||||||
print("Bad query param: %s" % key_value)
|
print("Bad query param: %s" % key_value)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -585,7 +582,7 @@ class SynapseCmd(cmd.Cmd):
|
|||||||
parsed_url = urlparse.urlparse(args["path"])
|
parsed_url = urlparse.urlparse(args["path"])
|
||||||
qp.update(urlparse.parse_qs(parsed_url.query))
|
qp.update(urlparse.parse_qs(parsed_url.query))
|
||||||
args["path"] = parsed_url.path
|
args["path"] = parsed_url.path
|
||||||
except:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
reactor.callFromThread(
|
reactor.callFromThread(
|
||||||
@@ -610,13 +607,15 @@ class SynapseCmd(cmd.Cmd):
|
|||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def _do_event_stream(self, timeout):
|
def _do_event_stream(self, timeout):
|
||||||
res = yield self.http_client.get_json(
|
res = yield defer.ensureDeferred(
|
||||||
self._url() + "/events",
|
self.http_client.get_json(
|
||||||
{
|
self._url() + "/events",
|
||||||
"access_token": self._tok(),
|
{
|
||||||
"timeout": str(timeout),
|
"access_token": self._tok(),
|
||||||
"from": self.event_stream_token,
|
"timeout": str(timeout),
|
||||||
},
|
"from": self.event_stream_token,
|
||||||
|
},
|
||||||
|
)
|
||||||
)
|
)
|
||||||
print(json.dumps(res, indent=4))
|
print(json.dumps(res, indent=4))
|
||||||
|
|
||||||
@@ -772,10 +771,10 @@ def main(server_url, identity_server_url, username, token, config_path):
|
|||||||
syn_cmd.config = json.load(config)
|
syn_cmd.config = json.load(config)
|
||||||
try:
|
try:
|
||||||
http_client.verbose = "on" == syn_cmd.config["verbose"]
|
http_client.verbose = "on" == syn_cmd.config["verbose"]
|
||||||
except:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
print("Loaded config from %s" % config_path)
|
print("Loaded config from %s" % config_path)
|
||||||
except:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Twisted-specific: Runs the command processor in Twisted's event loop
|
# Twisted-specific: Runs the command processor in Twisted's event loop
|
||||||
|
|||||||
@@ -13,18 +13,16 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
from twisted.web.client import Agent, readBody
|
|
||||||
from twisted.web.http_headers import Headers
|
|
||||||
from twisted.internet import defer, reactor
|
|
||||||
|
|
||||||
from pprint import pformat
|
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import urllib
|
import urllib
|
||||||
|
from pprint import pformat
|
||||||
|
|
||||||
|
from twisted.internet import defer, reactor
|
||||||
|
from twisted.web.client import Agent, readBody
|
||||||
|
from twisted.web.http_headers import Headers
|
||||||
|
|
||||||
|
|
||||||
class HttpClient(object):
|
class HttpClient:
|
||||||
""" Interface for talking json over http
|
""" Interface for talking json over http
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -169,7 +167,7 @@ class TwistedHttpClient(HttpClient):
|
|||||||
return d
|
return d
|
||||||
|
|
||||||
|
|
||||||
class _RawProducer(object):
|
class _RawProducer:
|
||||||
def __init__(self, data):
|
def __init__(self, data):
|
||||||
self.data = data
|
self.data = data
|
||||||
self.body = data
|
self.body = data
|
||||||
@@ -186,7 +184,7 @@ class _RawProducer(object):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class _JsonProducer(object):
|
class _JsonProducer:
|
||||||
""" Used by the twisted http client to create the HTTP body from json
|
""" Used by the twisted http client to create the HTTP body from json
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ services:
|
|||||||
- traefik.http.routers.https-synapse.tls.certResolver=le-ssl
|
- traefik.http.routers.https-synapse.tls.certResolver=le-ssl
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: docker.io/postgres:10-alpine
|
image: docker.io/postgres:12-alpine
|
||||||
# Change that password, of course!
|
# Change that password, of course!
|
||||||
environment:
|
environment:
|
||||||
- POSTGRES_USER=synapse
|
- POSTGRES_USER=synapse
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ class CursesStdIO:
|
|||||||
curses.endwin()
|
curses.endwin()
|
||||||
|
|
||||||
|
|
||||||
class Callback(object):
|
class Callback:
|
||||||
def __init__(self, stdio):
|
def __init__(self, stdio):
|
||||||
self.stdio = stdio
|
self.stdio = stdio
|
||||||
|
|
||||||
|
|||||||
@@ -28,27 +28,24 @@ Currently assumes the local address is localhost:<port>
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
from synapse.federation import ReplicationHandler
|
|
||||||
|
|
||||||
from synapse.federation.units import Pdu
|
|
||||||
|
|
||||||
from synapse.util import origin_from_ucid
|
|
||||||
|
|
||||||
from synapse.app.homeserver import SynapseHomeServer
|
|
||||||
|
|
||||||
# from synapse.logging.utils import log_function
|
|
||||||
|
|
||||||
from twisted.internet import reactor, defer
|
|
||||||
from twisted.python import log
|
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import curses.wrapper
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
import cursesio
|
import cursesio
|
||||||
import curses.wrapper
|
|
||||||
|
from twisted.internet import defer, reactor
|
||||||
|
from twisted.python import log
|
||||||
|
|
||||||
|
from synapse.app.homeserver import SynapseHomeServer
|
||||||
|
from synapse.federation import ReplicationHandler
|
||||||
|
from synapse.federation.units import Pdu
|
||||||
|
from synapse.util import origin_from_ucid
|
||||||
|
|
||||||
|
# from synapse.logging.utils import log_function
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger("example")
|
logger = logging.getLogger("example")
|
||||||
@@ -58,7 +55,7 @@ def excpetion_errback(failure):
|
|||||||
logging.exception(failure)
|
logging.exception(failure)
|
||||||
|
|
||||||
|
|
||||||
class InputOutput(object):
|
class InputOutput:
|
||||||
""" This is responsible for basic I/O so that a user can interact with
|
""" This is responsible for basic I/O so that a user can interact with
|
||||||
the example app.
|
the example app.
|
||||||
"""
|
"""
|
||||||
@@ -75,7 +72,7 @@ class InputOutput(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
m = re.match("^join (\S+)$", line)
|
m = re.match(r"^join (\S+)$", line)
|
||||||
if m:
|
if m:
|
||||||
# The `sender` wants to join a room.
|
# The `sender` wants to join a room.
|
||||||
(room_name,) = m.groups()
|
(room_name,) = m.groups()
|
||||||
@@ -84,7 +81,7 @@ class InputOutput(object):
|
|||||||
# self.print_line("OK.")
|
# self.print_line("OK.")
|
||||||
return
|
return
|
||||||
|
|
||||||
m = re.match("^invite (\S+) (\S+)$", line)
|
m = re.match(r"^invite (\S+) (\S+)$", line)
|
||||||
if m:
|
if m:
|
||||||
# `sender` wants to invite someone to a room
|
# `sender` wants to invite someone to a room
|
||||||
room_name, invitee = m.groups()
|
room_name, invitee = m.groups()
|
||||||
@@ -93,7 +90,7 @@ class InputOutput(object):
|
|||||||
# self.print_line("OK.")
|
# self.print_line("OK.")
|
||||||
return
|
return
|
||||||
|
|
||||||
m = re.match("^send (\S+) (.*)$", line)
|
m = re.match(r"^send (\S+) (.*)$", line)
|
||||||
if m:
|
if m:
|
||||||
# `sender` wants to message a room
|
# `sender` wants to message a room
|
||||||
room_name, body = m.groups()
|
room_name, body = m.groups()
|
||||||
@@ -102,7 +99,7 @@ class InputOutput(object):
|
|||||||
# self.print_line("OK.")
|
# self.print_line("OK.")
|
||||||
return
|
return
|
||||||
|
|
||||||
m = re.match("^backfill (\S+)$", line)
|
m = re.match(r"^backfill (\S+)$", line)
|
||||||
if m:
|
if m:
|
||||||
# we want to backfill a room
|
# we want to backfill a room
|
||||||
(room_name,) = m.groups()
|
(room_name,) = m.groups()
|
||||||
@@ -135,7 +132,7 @@ class IOLoggerHandler(logging.Handler):
|
|||||||
self.io.print_log(msg)
|
self.io.print_log(msg)
|
||||||
|
|
||||||
|
|
||||||
class Room(object):
|
class Room:
|
||||||
""" Used to store (in memory) the current membership state of a room, and
|
""" Used to store (in memory) the current membership state of a room, and
|
||||||
which home servers we should send PDUs associated with the room to.
|
which home servers we should send PDUs associated with the room to.
|
||||||
"""
|
"""
|
||||||
@@ -201,16 +198,6 @@ class HomeServer(ReplicationHandler):
|
|||||||
% (pdu.context, pdu.pdu_type, json.dumps(pdu.content))
|
% (pdu.context, pdu.pdu_type, json.dumps(pdu.content))
|
||||||
)
|
)
|
||||||
|
|
||||||
# def on_state_change(self, pdu):
|
|
||||||
##self.output.print_line("#%s (state) %s *** %s" %
|
|
||||||
##(pdu.context, pdu.state_key, pdu.pdu_type)
|
|
||||||
##)
|
|
||||||
|
|
||||||
# if "joinee" in pdu.content:
|
|
||||||
# self._on_join(pdu.context, pdu.content["joinee"])
|
|
||||||
# elif "invitee" in pdu.content:
|
|
||||||
# self._on_invite(pdu.origin, pdu.context, pdu.content["invitee"])
|
|
||||||
|
|
||||||
def _on_message(self, pdu):
|
def _on_message(self, pdu):
|
||||||
""" We received a message
|
""" We received a message
|
||||||
"""
|
"""
|
||||||
@@ -314,7 +301,7 @@ class HomeServer(ReplicationHandler):
|
|||||||
return self.replication_layer.backfill(dest, room_name, limit)
|
return self.replication_layer.backfill(dest, room_name, limit)
|
||||||
|
|
||||||
def _get_room_remote_servers(self, room_name):
|
def _get_room_remote_servers(self, room_name):
|
||||||
return [i for i in self.joined_rooms.setdefault(room_name).servers]
|
return list(self.joined_rooms.setdefault(room_name).servers)
|
||||||
|
|
||||||
def _get_or_create_room(self, room_name):
|
def _get_or_create_room(self, room_name):
|
||||||
return self.joined_rooms.setdefault(room_name, Room(room_name))
|
return self.joined_rooms.setdefault(room_name, Room(room_name))
|
||||||
@@ -334,7 +321,7 @@ def main(stdscr):
|
|||||||
user = args.user
|
user = args.user
|
||||||
server_name = origin_from_ucid(user)
|
server_name = origin_from_ucid(user)
|
||||||
|
|
||||||
## Set up logging ##
|
# Set up logging
|
||||||
|
|
||||||
root_logger = logging.getLogger()
|
root_logger = logging.getLogger()
|
||||||
|
|
||||||
@@ -354,7 +341,7 @@ def main(stdscr):
|
|||||||
observer = log.PythonLoggingObserver()
|
observer = log.PythonLoggingObserver()
|
||||||
observer.start()
|
observer.start()
|
||||||
|
|
||||||
## Set up synapse server
|
# Set up synapse server
|
||||||
|
|
||||||
curses_stdio = cursesio.CursesStdIO(stdscr)
|
curses_stdio = cursesio.CursesStdIO(stdscr)
|
||||||
input_output = InputOutput(curses_stdio, user)
|
input_output = InputOutput(curses_stdio, user)
|
||||||
@@ -368,16 +355,16 @@ def main(stdscr):
|
|||||||
|
|
||||||
input_output.set_home_server(hs)
|
input_output.set_home_server(hs)
|
||||||
|
|
||||||
## Add input_output logger
|
# Add input_output logger
|
||||||
io_logger = IOLoggerHandler(input_output)
|
io_logger = IOLoggerHandler(input_output)
|
||||||
io_logger.setFormatter(formatter)
|
io_logger.setFormatter(formatter)
|
||||||
root_logger.addHandler(io_logger)
|
root_logger.addHandler(io_logger)
|
||||||
|
|
||||||
## Start! ##
|
# Start!
|
||||||
|
|
||||||
try:
|
try:
|
||||||
port = int(server_name.split(":")[1])
|
port = int(server_name.split(":")[1])
|
||||||
except:
|
except Exception:
|
||||||
port = 12345
|
port = 12345
|
||||||
|
|
||||||
app_hs.get_http_server().start_listening(port)
|
app_hs.get_http_server().start_listening(port)
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
0. Set up Prometheus and Grafana. Out of scope for this readme. Useful documentation about using Grafana with Prometheus: http://docs.grafana.org/features/datasources/prometheus/
|
0. Set up Prometheus and Grafana. Out of scope for this readme. Useful documentation about using Grafana with Prometheus: http://docs.grafana.org/features/datasources/prometheus/
|
||||||
1. Have your Prometheus scrape your Synapse. https://github.com/matrix-org/synapse/blob/master/docs/metrics-howto.md
|
1. Have your Prometheus scrape your Synapse. https://github.com/matrix-org/synapse/blob/master/docs/metrics-howto.md
|
||||||
2. Import dashboard into Grafana. Download `synapse.json`. Import it to Grafana and select the correct Prometheus datasource. http://docs.grafana.org/reference/export_import/
|
2. Import dashboard into Grafana. Download `synapse.json`. Import it to Grafana and select the correct Prometheus datasource. http://docs.grafana.org/reference/export_import/
|
||||||
3. Set up additional recording rules
|
3. Set up required recording rules. https://github.com/matrix-org/synapse/tree/master/contrib/prometheus
|
||||||
|
|||||||
@@ -1,7 +1,44 @@
|
|||||||
{
|
{
|
||||||
|
"__inputs": [
|
||||||
|
{
|
||||||
|
"name": "DS_PROMETHEUS",
|
||||||
|
"label": "Prometheus",
|
||||||
|
"description": "",
|
||||||
|
"type": "datasource",
|
||||||
|
"pluginId": "prometheus",
|
||||||
|
"pluginName": "Prometheus"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"__requires": [
|
||||||
|
{
|
||||||
|
"type": "grafana",
|
||||||
|
"id": "grafana",
|
||||||
|
"name": "Grafana",
|
||||||
|
"version": "6.7.4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "panel",
|
||||||
|
"id": "graph",
|
||||||
|
"name": "Graph",
|
||||||
|
"version": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "panel",
|
||||||
|
"id": "heatmap",
|
||||||
|
"name": "Heatmap",
|
||||||
|
"version": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "datasource",
|
||||||
|
"id": "prometheus",
|
||||||
|
"name": "Prometheus",
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
||||||
|
],
|
||||||
"annotations": {
|
"annotations": {
|
||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
|
"$$hashKey": "object:76",
|
||||||
"builtIn": 1,
|
"builtIn": 1,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"enable": false,
|
"enable": false,
|
||||||
@@ -17,8 +54,8 @@
|
|||||||
"editable": true,
|
"editable": true,
|
||||||
"gnetId": null,
|
"gnetId": null,
|
||||||
"graphTooltip": 0,
|
"graphTooltip": 0,
|
||||||
"id": 1,
|
"id": null,
|
||||||
"iteration": 1591098104645,
|
"iteration": 1594646317221,
|
||||||
"links": [
|
"links": [
|
||||||
{
|
{
|
||||||
"asDropdown": true,
|
"asDropdown": true,
|
||||||
@@ -34,7 +71,7 @@
|
|||||||
"panels": [
|
"panels": [
|
||||||
{
|
{
|
||||||
"collapsed": false,
|
"collapsed": false,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -269,7 +306,6 @@
|
|||||||
"show": false
|
"show": false
|
||||||
},
|
},
|
||||||
"links": [],
|
"links": [],
|
||||||
"options": {},
|
|
||||||
"reverseYBuckets": false,
|
"reverseYBuckets": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
@@ -559,7 +595,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -1423,7 +1459,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -1795,7 +1831,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -2531,7 +2567,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -2823,7 +2859,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -2844,7 +2880,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 33
|
"y": 6
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 79,
|
"id": 79,
|
||||||
@@ -2940,7 +2976,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 33
|
"y": 6
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 83,
|
"id": 83,
|
||||||
@@ -3038,7 +3074,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 42
|
"y": 15
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 109,
|
"id": 109,
|
||||||
@@ -3137,7 +3173,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 42
|
"y": 15
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 111,
|
"id": 111,
|
||||||
@@ -3223,14 +3259,14 @@
|
|||||||
"dashLength": 10,
|
"dashLength": 10,
|
||||||
"dashes": false,
|
"dashes": false,
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"description": "",
|
"description": "Number of events queued up on the master process for processing by the federation sender",
|
||||||
"fill": 1,
|
"fill": 1,
|
||||||
"fillGradient": 0,
|
"fillGradient": 0,
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 51
|
"y": 24
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 140,
|
"id": 140,
|
||||||
@@ -3354,6 +3390,103 @@
|
|||||||
"align": false,
|
"align": false,
|
||||||
"alignLevel": null
|
"alignLevel": null
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"aliasColors": {},
|
||||||
|
"bars": false,
|
||||||
|
"dashLength": 10,
|
||||||
|
"dashes": false,
|
||||||
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
|
"description": "The number of events in the in-memory queues ",
|
||||||
|
"fill": 1,
|
||||||
|
"fillGradient": 0,
|
||||||
|
"gridPos": {
|
||||||
|
"h": 8,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 24
|
||||||
|
},
|
||||||
|
"hiddenSeries": false,
|
||||||
|
"id": 142,
|
||||||
|
"legend": {
|
||||||
|
"avg": false,
|
||||||
|
"current": false,
|
||||||
|
"max": false,
|
||||||
|
"min": false,
|
||||||
|
"show": true,
|
||||||
|
"total": false,
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"lines": true,
|
||||||
|
"linewidth": 1,
|
||||||
|
"nullPointMode": "null",
|
||||||
|
"options": {
|
||||||
|
"dataLinks": []
|
||||||
|
},
|
||||||
|
"percentage": false,
|
||||||
|
"pointradius": 2,
|
||||||
|
"points": false,
|
||||||
|
"renderer": "flot",
|
||||||
|
"seriesOverrides": [],
|
||||||
|
"spaceLength": 10,
|
||||||
|
"stack": false,
|
||||||
|
"steppedLine": false,
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "synapse_federation_transaction_queue_pending_pdus{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}",
|
||||||
|
"interval": "",
|
||||||
|
"legendFormat": "pending PDUs {{job}}-{{index}}",
|
||||||
|
"refId": "A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"expr": "synapse_federation_transaction_queue_pending_edus{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}",
|
||||||
|
"interval": "",
|
||||||
|
"legendFormat": "pending EDUs {{job}}-{{index}}",
|
||||||
|
"refId": "B"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": [],
|
||||||
|
"timeFrom": null,
|
||||||
|
"timeRegions": [],
|
||||||
|
"timeShift": null,
|
||||||
|
"title": "In-memory federation transmission queues",
|
||||||
|
"tooltip": {
|
||||||
|
"shared": true,
|
||||||
|
"sort": 0,
|
||||||
|
"value_type": "individual"
|
||||||
|
},
|
||||||
|
"type": "graph",
|
||||||
|
"xaxis": {
|
||||||
|
"buckets": null,
|
||||||
|
"mode": "time",
|
||||||
|
"name": null,
|
||||||
|
"show": true,
|
||||||
|
"values": []
|
||||||
|
},
|
||||||
|
"yaxes": [
|
||||||
|
{
|
||||||
|
"$$hashKey": "object:317",
|
||||||
|
"format": "short",
|
||||||
|
"label": "events",
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": "0",
|
||||||
|
"show": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$$hashKey": "object:318",
|
||||||
|
"format": "short",
|
||||||
|
"label": "",
|
||||||
|
"logBase": 1,
|
||||||
|
"max": null,
|
||||||
|
"min": null,
|
||||||
|
"show": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"yaxis": {
|
||||||
|
"align": false,
|
||||||
|
"alignLevel": null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"title": "Federation",
|
"title": "Federation",
|
||||||
@@ -3361,7 +3494,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -3567,7 +3700,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -3588,7 +3721,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 52
|
"y": 79
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 48,
|
"id": 48,
|
||||||
@@ -3682,7 +3815,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 52
|
"y": 79
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 104,
|
"id": 104,
|
||||||
@@ -3802,7 +3935,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 59
|
"y": 86
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 10,
|
"id": 10,
|
||||||
@@ -3898,7 +4031,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 59
|
"y": 86
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 11,
|
"id": 11,
|
||||||
@@ -3987,7 +4120,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -4011,7 +4144,7 @@
|
|||||||
"h": 13,
|
"h": 13,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 67
|
"y": 80
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 12,
|
"id": 12,
|
||||||
@@ -4106,7 +4239,7 @@
|
|||||||
"h": 13,
|
"h": 13,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 67
|
"y": 80
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 26,
|
"id": 26,
|
||||||
@@ -4201,7 +4334,7 @@
|
|||||||
"h": 13,
|
"h": 13,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 80
|
"y": 93
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 13,
|
"id": 13,
|
||||||
@@ -4297,7 +4430,7 @@
|
|||||||
"h": 13,
|
"h": 13,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 80
|
"y": 93
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 27,
|
"id": 27,
|
||||||
@@ -4392,7 +4525,7 @@
|
|||||||
"h": 13,
|
"h": 13,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 93
|
"y": 106
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 28,
|
"id": 28,
|
||||||
@@ -4486,7 +4619,7 @@
|
|||||||
"h": 13,
|
"h": 13,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 93
|
"y": 106
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 25,
|
"id": 25,
|
||||||
@@ -4572,7 +4705,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -5062,7 +5195,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -5083,7 +5216,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 66
|
"y": 121
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 91,
|
"id": 91,
|
||||||
@@ -5179,7 +5312,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 66
|
"y": 121
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 21,
|
"id": 21,
|
||||||
@@ -5271,7 +5404,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 75
|
"y": 130
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 89,
|
"id": 89,
|
||||||
@@ -5369,7 +5502,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 75
|
"y": 130
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 93,
|
"id": 93,
|
||||||
@@ -5459,7 +5592,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 84
|
"y": 139
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 95,
|
"id": 95,
|
||||||
@@ -5552,12 +5685,12 @@
|
|||||||
"mode": "spectrum"
|
"mode": "spectrum"
|
||||||
},
|
},
|
||||||
"dataFormat": "tsbuckets",
|
"dataFormat": "tsbuckets",
|
||||||
"datasource": "Prometheus",
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 84
|
"y": 139
|
||||||
},
|
},
|
||||||
"heatmap": {},
|
"heatmap": {},
|
||||||
"hideZeroBuckets": true,
|
"hideZeroBuckets": true,
|
||||||
@@ -5567,7 +5700,6 @@
|
|||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
"links": [],
|
"links": [],
|
||||||
"options": {},
|
|
||||||
"reverseYBuckets": false,
|
"reverseYBuckets": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
@@ -5609,7 +5741,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -5630,7 +5762,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 39
|
"y": 66
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 2,
|
"id": 2,
|
||||||
@@ -5754,7 +5886,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 39
|
"y": 66
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 41,
|
"id": 41,
|
||||||
@@ -5847,7 +5979,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 46
|
"y": 73
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 42,
|
"id": 42,
|
||||||
@@ -5939,7 +6071,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 46
|
"y": 73
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 43,
|
"id": 43,
|
||||||
@@ -6031,7 +6163,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 53
|
"y": 80
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 113,
|
"id": 113,
|
||||||
@@ -6129,7 +6261,7 @@
|
|||||||
"h": 7,
|
"h": 7,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 53
|
"y": 80
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 115,
|
"id": 115,
|
||||||
@@ -6215,7 +6347,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -6236,7 +6368,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 58
|
"y": 40
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 67,
|
"id": 67,
|
||||||
@@ -6267,7 +6399,7 @@
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": " synapse_event_persisted_position{instance=\"$instance\",job=\"synapse\"} - ignoring(index, job, name) group_right() synapse_event_processing_positions{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}",
|
"expr": "max(synapse_event_persisted_position{instance=\"$instance\"}) - ignoring(instance,index, job, name) group_right() synapse_event_processing_positions{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"interval": "",
|
"interval": "",
|
||||||
"intervalFactor": 1,
|
"intervalFactor": 1,
|
||||||
@@ -6328,7 +6460,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 58
|
"y": 40
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 71,
|
"id": 71,
|
||||||
@@ -6362,6 +6494,7 @@
|
|||||||
"expr": "time()*1000-synapse_event_processing_last_ts{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}",
|
"expr": "time()*1000-synapse_event_processing_last_ts{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
"hide": false,
|
"hide": false,
|
||||||
|
"interval": "",
|
||||||
"intervalFactor": 1,
|
"intervalFactor": 1,
|
||||||
"legendFormat": "{{job}}-{{index}} {{name}}",
|
"legendFormat": "{{job}}-{{index}} {{name}}",
|
||||||
"refId": "B"
|
"refId": "B"
|
||||||
@@ -6420,7 +6553,7 @@
|
|||||||
"h": 9,
|
"h": 9,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 67
|
"y": 49
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 121,
|
"id": 121,
|
||||||
@@ -6509,7 +6642,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collapsed": true,
|
"collapsed": true,
|
||||||
"datasource": null,
|
"datasource": "${DS_PROMETHEUS}",
|
||||||
"gridPos": {
|
"gridPos": {
|
||||||
"h": 1,
|
"h": 1,
|
||||||
"w": 24,
|
"w": 24,
|
||||||
@@ -6539,7 +6672,7 @@
|
|||||||
"h": 8,
|
"h": 8,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 41
|
"y": 86
|
||||||
},
|
},
|
||||||
"heatmap": {},
|
"heatmap": {},
|
||||||
"hideZeroBuckets": true,
|
"hideZeroBuckets": true,
|
||||||
@@ -6549,7 +6682,6 @@
|
|||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
"links": [],
|
"links": [],
|
||||||
"options": {},
|
|
||||||
"reverseYBuckets": false,
|
"reverseYBuckets": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
@@ -6599,7 +6731,7 @@
|
|||||||
"h": 8,
|
"h": 8,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 41
|
"y": 86
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 124,
|
"id": 124,
|
||||||
@@ -6700,7 +6832,7 @@
|
|||||||
"h": 8,
|
"h": 8,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 49
|
"y": 94
|
||||||
},
|
},
|
||||||
"heatmap": {},
|
"heatmap": {},
|
||||||
"hideZeroBuckets": true,
|
"hideZeroBuckets": true,
|
||||||
@@ -6710,7 +6842,6 @@
|
|||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
"links": [],
|
"links": [],
|
||||||
"options": {},
|
|
||||||
"reverseYBuckets": false,
|
"reverseYBuckets": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
@@ -6760,7 +6891,7 @@
|
|||||||
"h": 8,
|
"h": 8,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 49
|
"y": 94
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 128,
|
"id": 128,
|
||||||
@@ -6879,7 +7010,7 @@
|
|||||||
"h": 8,
|
"h": 8,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 57
|
"y": 102
|
||||||
},
|
},
|
||||||
"heatmap": {},
|
"heatmap": {},
|
||||||
"hideZeroBuckets": true,
|
"hideZeroBuckets": true,
|
||||||
@@ -6889,7 +7020,6 @@
|
|||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
"links": [],
|
"links": [],
|
||||||
"options": {},
|
|
||||||
"reverseYBuckets": false,
|
"reverseYBuckets": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
@@ -6939,7 +7069,7 @@
|
|||||||
"h": 8,
|
"h": 8,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 57
|
"y": 102
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 130,
|
"id": 130,
|
||||||
@@ -7058,7 +7188,7 @@
|
|||||||
"h": 8,
|
"h": 8,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 65
|
"y": 110
|
||||||
},
|
},
|
||||||
"heatmap": {},
|
"heatmap": {},
|
||||||
"hideZeroBuckets": true,
|
"hideZeroBuckets": true,
|
||||||
@@ -7068,12 +7198,12 @@
|
|||||||
"show": true
|
"show": true
|
||||||
},
|
},
|
||||||
"links": [],
|
"links": [],
|
||||||
"options": {},
|
|
||||||
"reverseYBuckets": false,
|
"reverseYBuckets": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "rate(synapse_state_number_state_groups_in_resolution_bucket{instance=\"$instance\"}[$bucket_size]) and on (index, instance, job) (synapse_storage_events_persisted_events > 0)",
|
"expr": "rate(synapse_state_number_state_groups_in_resolution_bucket{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}[$bucket_size])",
|
||||||
"format": "heatmap",
|
"format": "heatmap",
|
||||||
|
"interval": "",
|
||||||
"intervalFactor": 1,
|
"intervalFactor": 1,
|
||||||
"legendFormat": "{{le}}",
|
"legendFormat": "{{le}}",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -7118,7 +7248,7 @@
|
|||||||
"h": 8,
|
"h": 8,
|
||||||
"w": 12,
|
"w": 12,
|
||||||
"x": 12,
|
"x": 12,
|
||||||
"y": 65
|
"y": 110
|
||||||
},
|
},
|
||||||
"hiddenSeries": false,
|
"hiddenSeries": false,
|
||||||
"id": 132,
|
"id": 132,
|
||||||
@@ -7149,29 +7279,33 @@
|
|||||||
"steppedLine": false,
|
"steppedLine": false,
|
||||||
"targets": [
|
"targets": [
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.5, rate(synapse_state_number_state_groups_in_resolution_bucket{instance=\"$instance\"}[$bucket_size]) and on (index, instance, job) (synapse_storage_events_persisted_events > 0)) ",
|
"expr": "histogram_quantile(0.5, rate(synapse_state_number_state_groups_in_resolution_bucket{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}[$bucket_size]))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
|
"interval": "",
|
||||||
"intervalFactor": 1,
|
"intervalFactor": 1,
|
||||||
"legendFormat": "50%",
|
"legendFormat": "50%",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.75, rate(synapse_state_number_state_groups_in_resolution_bucket{instance=\"$instance\"}[$bucket_size]) and on (index, instance, job) (synapse_storage_events_persisted_events > 0))",
|
"expr": "histogram_quantile(0.75, rate(synapse_state_number_state_groups_in_resolution_bucket{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}[$bucket_size]))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
|
"interval": "",
|
||||||
"intervalFactor": 1,
|
"intervalFactor": 1,
|
||||||
"legendFormat": "75%",
|
"legendFormat": "75%",
|
||||||
"refId": "B"
|
"refId": "B"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.90, rate(synapse_state_number_state_groups_in_resolution_bucket{instance=\"$instance\"}[$bucket_size]) and on (index, instance, job) (synapse_storage_events_persisted_events > 0))",
|
"expr": "histogram_quantile(0.90, rate(synapse_state_number_state_groups_in_resolution_bucket{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}[$bucket_size]))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
|
"interval": "",
|
||||||
"intervalFactor": 1,
|
"intervalFactor": 1,
|
||||||
"legendFormat": "90%",
|
"legendFormat": "90%",
|
||||||
"refId": "C"
|
"refId": "C"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"expr": "histogram_quantile(0.99, rate(synapse_state_number_state_groups_in_resolution_bucket{instance=\"$instance\"}[$bucket_size]) and on (index, instance, job) (synapse_storage_events_persisted_events > 0))",
|
"expr": "histogram_quantile(0.99, rate(synapse_state_number_state_groups_in_resolution_bucket{instance=\"$instance\",job=~\"$job\",index=~\"$index\"}[$bucket_size]))",
|
||||||
"format": "time_series",
|
"format": "time_series",
|
||||||
|
"interval": "",
|
||||||
"intervalFactor": 1,
|
"intervalFactor": 1,
|
||||||
"legendFormat": "99%",
|
"legendFormat": "99%",
|
||||||
"refId": "D"
|
"refId": "D"
|
||||||
@@ -7181,7 +7315,7 @@
|
|||||||
"timeFrom": null,
|
"timeFrom": null,
|
||||||
"timeRegions": [],
|
"timeRegions": [],
|
||||||
"timeShift": null,
|
"timeShift": null,
|
||||||
"title": "Number of state resolution performed, by number of state groups involved (quantiles)",
|
"title": "Number of state resolutions performed, by number of state groups involved (quantiles)",
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"shared": true,
|
"shared": true,
|
||||||
"sort": 0,
|
"sort": 0,
|
||||||
@@ -7233,6 +7367,7 @@
|
|||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"current": {
|
"current": {
|
||||||
|
"selected": false,
|
||||||
"text": "Prometheus",
|
"text": "Prometheus",
|
||||||
"value": "Prometheus"
|
"value": "Prometheus"
|
||||||
},
|
},
|
||||||
@@ -7309,14 +7444,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"allValue": null,
|
"allValue": null,
|
||||||
"current": {
|
"current": {},
|
||||||
"text": "matrix.org",
|
|
||||||
"value": "matrix.org"
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"definition": "",
|
"definition": "",
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"includeAll": false,
|
"includeAll": false,
|
||||||
|
"index": -1,
|
||||||
"label": null,
|
"label": null,
|
||||||
"multi": false,
|
"multi": false,
|
||||||
"name": "instance",
|
"name": "instance",
|
||||||
@@ -7335,17 +7468,13 @@
|
|||||||
{
|
{
|
||||||
"allFormat": "regex wildcard",
|
"allFormat": "regex wildcard",
|
||||||
"allValue": "",
|
"allValue": "",
|
||||||
"current": {
|
"current": {},
|
||||||
"text": "synapse",
|
|
||||||
"value": [
|
|
||||||
"synapse"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"definition": "",
|
"definition": "",
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"hideLabel": false,
|
"hideLabel": false,
|
||||||
"includeAll": true,
|
"includeAll": true,
|
||||||
|
"index": -1,
|
||||||
"label": "Job",
|
"label": "Job",
|
||||||
"multi": true,
|
"multi": true,
|
||||||
"multiFormat": "regex values",
|
"multiFormat": "regex values",
|
||||||
@@ -7366,16 +7495,13 @@
|
|||||||
{
|
{
|
||||||
"allFormat": "regex wildcard",
|
"allFormat": "regex wildcard",
|
||||||
"allValue": ".*",
|
"allValue": ".*",
|
||||||
"current": {
|
"current": {},
|
||||||
"selected": false,
|
|
||||||
"text": "All",
|
|
||||||
"value": "$__all"
|
|
||||||
},
|
|
||||||
"datasource": "$datasource",
|
"datasource": "$datasource",
|
||||||
"definition": "",
|
"definition": "",
|
||||||
"hide": 0,
|
"hide": 0,
|
||||||
"hideLabel": false,
|
"hideLabel": false,
|
||||||
"includeAll": true,
|
"includeAll": true,
|
||||||
|
"index": -1,
|
||||||
"label": "",
|
"label": "",
|
||||||
"multi": true,
|
"multi": true,
|
||||||
"multiFormat": "regex values",
|
"multiFormat": "regex values",
|
||||||
@@ -7428,5 +7554,8 @@
|
|||||||
"timezone": "",
|
"timezone": "",
|
||||||
"title": "Synapse",
|
"title": "Synapse",
|
||||||
"uid": "000000012",
|
"uid": "000000012",
|
||||||
"version": 29
|
"variables": {
|
||||||
|
"list": []
|
||||||
|
},
|
||||||
|
"version": 32
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,10 @@
|
|||||||
from __future__ import print_function
|
import argparse
|
||||||
|
import cgi
|
||||||
|
import datetime
|
||||||
|
import json
|
||||||
|
|
||||||
|
import pydot
|
||||||
|
import urllib2
|
||||||
|
|
||||||
# Copyright 2014-2016 OpenMarket Ltd
|
# Copyright 2014-2016 OpenMarket Ltd
|
||||||
#
|
#
|
||||||
@@ -15,15 +21,6 @@ from __future__ import print_function
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
import sqlite3
|
|
||||||
import pydot
|
|
||||||
import cgi
|
|
||||||
import json
|
|
||||||
import datetime
|
|
||||||
import argparse
|
|
||||||
import urllib2
|
|
||||||
|
|
||||||
|
|
||||||
def make_name(pdu_id, origin):
|
def make_name(pdu_id, origin):
|
||||||
return "%s@%s" % (pdu_id, origin)
|
return "%s@%s" % (pdu_id, origin)
|
||||||
|
|
||||||
@@ -33,7 +30,7 @@ def make_graph(pdus, room, filename_prefix):
|
|||||||
node_map = {}
|
node_map = {}
|
||||||
|
|
||||||
origins = set()
|
origins = set()
|
||||||
colors = set(("red", "green", "blue", "yellow", "purple"))
|
colors = {"red", "green", "blue", "yellow", "purple"}
|
||||||
|
|
||||||
for pdu in pdus:
|
for pdu in pdus:
|
||||||
origins.add(pdu.get("origin"))
|
origins.add(pdu.get("origin"))
|
||||||
@@ -49,7 +46,7 @@ def make_graph(pdus, room, filename_prefix):
|
|||||||
try:
|
try:
|
||||||
c = colors.pop()
|
c = colors.pop()
|
||||||
color_map[o] = c
|
color_map[o] = c
|
||||||
except:
|
except Exception:
|
||||||
print("Run out of colours!")
|
print("Run out of colours!")
|
||||||
color_map[o] = "black"
|
color_map[o] = "black"
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,13 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
import sqlite3
|
|
||||||
import pydot
|
|
||||||
import cgi
|
|
||||||
import json
|
|
||||||
import datetime
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import cgi
|
||||||
|
import datetime
|
||||||
|
import json
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
import pydot
|
||||||
|
|
||||||
from synapse.events import FrozenEvent
|
from synapse.events import FrozenEvent
|
||||||
from synapse.util.frozenutils import unfreeze
|
from synapse.util.frozenutils import unfreeze
|
||||||
@@ -98,7 +99,7 @@ def make_graph(db_name, room_id, file_prefix, limit):
|
|||||||
for prev_id, _ in event.prev_events:
|
for prev_id, _ in event.prev_events:
|
||||||
try:
|
try:
|
||||||
end_node = node_map[prev_id]
|
end_node = node_map[prev_id]
|
||||||
except:
|
except Exception:
|
||||||
end_node = pydot.Node(name=prev_id, label="<<b>%s</b>>" % (prev_id,))
|
end_node = pydot.Node(name=prev_id, label="<<b>%s</b>>" % (prev_id,))
|
||||||
|
|
||||||
node_map[prev_id] = end_node
|
node_map[prev_id] = end_node
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
from __future__ import print_function
|
import argparse
|
||||||
|
import cgi
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
import pydot
|
||||||
|
import simplejson as json
|
||||||
|
|
||||||
|
from synapse.events import FrozenEvent
|
||||||
|
from synapse.util.frozenutils import unfreeze
|
||||||
|
|
||||||
# Copyright 2016 OpenMarket Ltd
|
# Copyright 2016 OpenMarket Ltd
|
||||||
#
|
#
|
||||||
@@ -15,18 +23,6 @@ from __future__ import print_function
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
import pydot
|
|
||||||
import cgi
|
|
||||||
import simplejson as json
|
|
||||||
import datetime
|
|
||||||
import argparse
|
|
||||||
|
|
||||||
from synapse.events import FrozenEvent
|
|
||||||
from synapse.util.frozenutils import unfreeze
|
|
||||||
|
|
||||||
from six import string_types
|
|
||||||
|
|
||||||
|
|
||||||
def make_graph(file_name, room_id, file_prefix, limit):
|
def make_graph(file_name, room_id, file_prefix, limit):
|
||||||
print("Reading lines")
|
print("Reading lines")
|
||||||
with open(file_name) as f:
|
with open(file_name) as f:
|
||||||
@@ -62,7 +58,7 @@ def make_graph(file_name, room_id, file_prefix, limit):
|
|||||||
for key, value in unfreeze(event.get_dict()["content"]).items():
|
for key, value in unfreeze(event.get_dict()["content"]).items():
|
||||||
if value is None:
|
if value is None:
|
||||||
value = "<null>"
|
value = "<null>"
|
||||||
elif isinstance(value, string_types):
|
elif isinstance(value, str):
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
value = json.dumps(value)
|
value = json.dumps(value)
|
||||||
@@ -108,7 +104,7 @@ def make_graph(file_name, room_id, file_prefix, limit):
|
|||||||
for prev_id, _ in event.prev_events:
|
for prev_id, _ in event.prev_events:
|
||||||
try:
|
try:
|
||||||
end_node = node_map[prev_id]
|
end_node = node_map[prev_id]
|
||||||
except:
|
except Exception:
|
||||||
end_node = pydot.Node(name=prev_id, label="<<b>%s</b>>" % (prev_id,))
|
end_node = pydot.Node(name=prev_id, label="<<b>%s</b>>" % (prev_id,))
|
||||||
|
|
||||||
node_map[prev_id] = end_node
|
node_map[prev_id] = end_node
|
||||||
|
|||||||
@@ -10,17 +10,15 @@ the bridge.
|
|||||||
Requires:
|
Requires:
|
||||||
npm install jquery jsdom
|
npm install jquery jsdom
|
||||||
"""
|
"""
|
||||||
from __future__ import print_function
|
import json
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
|
||||||
import gevent
|
import gevent
|
||||||
import grequests
|
import grequests
|
||||||
from BeautifulSoup import BeautifulSoup
|
from BeautifulSoup import BeautifulSoup
|
||||||
import json
|
|
||||||
import urllib
|
|
||||||
import subprocess
|
|
||||||
import time
|
|
||||||
|
|
||||||
# ACCESS_TOKEN="" #
|
ACCESS_TOKEN = ""
|
||||||
|
|
||||||
MATRIXBASE = "https://matrix.org/_matrix/client/api/v1/"
|
MATRIXBASE = "https://matrix.org/_matrix/client/api/v1/"
|
||||||
MYUSERNAME = "@davetest:matrix.org"
|
MYUSERNAME = "@davetest:matrix.org"
|
||||||
|
|||||||
@@ -1,15 +1,11 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
from __future__ import print_function
|
|
||||||
from argparse import ArgumentParser
|
|
||||||
import json
|
import json
|
||||||
import requests
|
|
||||||
import sys
|
import sys
|
||||||
import urllib
|
import urllib
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
try:
|
import requests
|
||||||
raw_input
|
|
||||||
except NameError: # Python 3
|
|
||||||
raw_input = input
|
|
||||||
|
|
||||||
|
|
||||||
def _mkurl(template, kws):
|
def _mkurl(template, kws):
|
||||||
@@ -56,7 +52,7 @@ def main(hs, room_id, access_token, user_id_prefix, why):
|
|||||||
print("The following user IDs will be kicked from %s" % room_name)
|
print("The following user IDs will be kicked from %s" % room_name)
|
||||||
for uid in kick_list:
|
for uid in kick_list:
|
||||||
print(uid)
|
print(uid)
|
||||||
doit = raw_input("Continue? [Y]es\n")
|
doit = input("Continue? [Y]es\n")
|
||||||
if len(doit) > 0 and doit.lower() == "y":
|
if len(doit) > 0 and doit.lower() == "y":
|
||||||
print("Kicking members...")
|
print("Kicking members...")
|
||||||
# encode them all
|
# encode them all
|
||||||
|
|||||||
2
debian/build_virtualenv
vendored
2
debian/build_virtualenv
vendored
@@ -42,7 +42,7 @@ dh_virtualenv \
|
|||||||
--preinstall="mock" \
|
--preinstall="mock" \
|
||||||
--extra-pip-arg="--no-cache-dir" \
|
--extra-pip-arg="--no-cache-dir" \
|
||||||
--extra-pip-arg="--compile" \
|
--extra-pip-arg="--compile" \
|
||||||
--extras="all,systemd"
|
--extras="all,systemd,test"
|
||||||
|
|
||||||
PACKAGE_BUILD_DIR="debian/matrix-synapse-py3"
|
PACKAGE_BUILD_DIR="debian/matrix-synapse-py3"
|
||||||
VIRTUALENV_DIR="${PACKAGE_BUILD_DIR}${DH_VIRTUALENV_INSTALL_ROOT}/matrix-synapse"
|
VIRTUALENV_DIR="${PACKAGE_BUILD_DIR}${DH_VIRTUALENV_INSTALL_ROOT}/matrix-synapse"
|
||||||
|
|||||||
115
debian/changelog
vendored
115
debian/changelog
vendored
@@ -1,3 +1,118 @@
|
|||||||
|
matrix-synapse-py3 (1.22.1) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.22.1.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Fri, 30 Oct 2020 15:25:37 +0000
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.22.0) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.22.0.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 27 Oct 2020 12:07:12 +0000
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.21.2) stable; urgency=medium
|
||||||
|
|
||||||
|
[ Synapse Packaging team ]
|
||||||
|
* New synapse release 1.21.2.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Thu, 15 Oct 2020 09:23:27 -0400
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.21.1) stable; urgency=medium
|
||||||
|
|
||||||
|
[ Synapse Packaging team ]
|
||||||
|
* New synapse release 1.21.1.
|
||||||
|
|
||||||
|
[ Andrew Morgan ]
|
||||||
|
* Explicitly install "test" python dependencies.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 13 Oct 2020 10:24:13 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.21.0) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.21.0.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Mon, 12 Oct 2020 15:47:44 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.20.1) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.20.1.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Thu, 24 Sep 2020 16:25:22 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.20.0) stable; urgency=medium
|
||||||
|
|
||||||
|
[ Synapse Packaging team ]
|
||||||
|
* New synapse release 1.20.0.
|
||||||
|
|
||||||
|
[ Dexter Chua ]
|
||||||
|
* Use Type=notify in systemd service
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Tue, 22 Sep 2020 15:19:32 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.19.3) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.19.3.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Fri, 18 Sep 2020 14:59:30 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.19.2) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.19.2.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Wed, 16 Sep 2020 12:50:30 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.19.1) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.19.1.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Thu, 27 Aug 2020 10:50:19 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.19.0) stable; urgency=medium
|
||||||
|
|
||||||
|
[ Synapse Packaging team ]
|
||||||
|
* New synapse release 1.19.0.
|
||||||
|
|
||||||
|
[ Aaron Raimist ]
|
||||||
|
* Fix outdated documentation for SYNAPSE_CACHE_FACTOR
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Mon, 17 Aug 2020 14:06:42 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.18.0) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.18.0.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Thu, 30 Jul 2020 10:55:53 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.17.0) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.17.0.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Mon, 13 Jul 2020 10:20:31 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.16.1) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.16.1.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Fri, 10 Jul 2020 12:09:24 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.17.0rc1) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.17.0rc1.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Thu, 09 Jul 2020 16:53:12 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.16.0) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.16.0.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Wed, 08 Jul 2020 11:03:48 +0100
|
||||||
|
|
||||||
|
matrix-synapse-py3 (1.15.2) stable; urgency=medium
|
||||||
|
|
||||||
|
* New synapse release 1.15.2.
|
||||||
|
|
||||||
|
-- Synapse Packaging team <packages@matrix.org> Thu, 02 Jul 2020 10:34:00 -0400
|
||||||
|
|
||||||
matrix-synapse-py3 (1.15.1) stable; urgency=medium
|
matrix-synapse-py3 (1.15.1) stable; urgency=medium
|
||||||
|
|
||||||
* New synapse release 1.15.1.
|
* New synapse release 1.15.1.
|
||||||
|
|||||||
2
debian/matrix-synapse.default
vendored
2
debian/matrix-synapse.default
vendored
@@ -1,2 +1,2 @@
|
|||||||
# Specify environment variables used when running Synapse
|
# Specify environment variables used when running Synapse
|
||||||
# SYNAPSE_CACHE_FACTOR=1 (default)
|
# SYNAPSE_CACHE_FACTOR=0.5 (default)
|
||||||
|
|||||||
2
debian/matrix-synapse.service
vendored
2
debian/matrix-synapse.service
vendored
@@ -2,7 +2,7 @@
|
|||||||
Description=Synapse Matrix homeserver
|
Description=Synapse Matrix homeserver
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=notify
|
||||||
User=matrix-synapse
|
User=matrix-synapse
|
||||||
WorkingDirectory=/var/lib/matrix-synapse
|
WorkingDirectory=/var/lib/matrix-synapse
|
||||||
EnvironmentFile=/etc/default/matrix-synapse
|
EnvironmentFile=/etc/default/matrix-synapse
|
||||||
|
|||||||
27
debian/synctl.ronn
vendored
27
debian/synctl.ronn
vendored
@@ -46,19 +46,20 @@ Configuration file may be generated as follows:
|
|||||||
## ENVIRONMENT
|
## ENVIRONMENT
|
||||||
|
|
||||||
* `SYNAPSE_CACHE_FACTOR`:
|
* `SYNAPSE_CACHE_FACTOR`:
|
||||||
Synapse's architecture is quite RAM hungry currently - a lot of
|
Synapse's architecture is quite RAM hungry currently - we deliberately
|
||||||
recent room data and metadata is deliberately cached in RAM in
|
cache a lot of recent room data and metadata in RAM in order to speed up
|
||||||
order to speed up common requests. This will be improved in
|
common requests. We'll improve this in the future, but for now the easiest
|
||||||
future, but for now the easiest way to either reduce the RAM usage
|
way to either reduce the RAM usage (at the risk of slowing things down)
|
||||||
(at the risk of slowing things down) is to set the
|
is to set the almost-undocumented ``SYNAPSE_CACHE_FACTOR`` environment
|
||||||
SYNAPSE_CACHE_FACTOR environment variable. Roughly speaking, a
|
variable. The default is 0.5, which can be decreased to reduce RAM usage
|
||||||
SYNAPSE_CACHE_FACTOR of 1.0 will max out at around 3-4GB of
|
in memory constrained enviroments, or increased if performance starts to
|
||||||
resident memory - this is what we currently run the matrix.org
|
degrade.
|
||||||
on. The default setting is currently 0.1, which is probably around
|
|
||||||
a ~700MB footprint. You can dial it down further to 0.02 if
|
However, degraded performance due to a low cache factor, common on
|
||||||
desired, which targets roughly ~512MB. Conversely you can dial it
|
machines with slow disks, often leads to explosions in memory use due
|
||||||
up if you need performance for lots of users and have a box with a
|
backlogged requests. In this case, reducing the cache factor will make
|
||||||
lot of RAM.
|
things worse. Instead, try increasing it drastically. 2.0 is a good
|
||||||
|
starting value.
|
||||||
|
|
||||||
## COPYRIGHT
|
## COPYRIGHT
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ for port in 8080 8081 8082; do
|
|||||||
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
|
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
|
echo 'enable_registration: true' >> $DIR/etc/$port.config
|
||||||
|
|
||||||
# Warning, this heredoc depends on the interaction of tabs and spaces. Please don't
|
# Warning, this heredoc depends on the interaction of tabs and spaces. Please don't
|
||||||
|
|||||||
@@ -16,34 +16,36 @@ ARG PYTHON_VERSION=3.7
|
|||||||
###
|
###
|
||||||
### Stage 0: builder
|
### Stage 0: builder
|
||||||
###
|
###
|
||||||
FROM docker.io/python:${PYTHON_VERSION}-alpine3.11 as builder
|
FROM docker.io/python:${PYTHON_VERSION}-slim as builder
|
||||||
|
|
||||||
# install the OS build deps
|
# install the OS build deps
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
build-essential \
|
||||||
|
libffi-dev \
|
||||||
|
libjpeg-dev \
|
||||||
|
libpq-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libwebp-dev \
|
||||||
|
libxml++2.6-dev \
|
||||||
|
libxslt1-dev \
|
||||||
|
zlib1g-dev \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN apk add \
|
# Build dependencies that are not available as wheels, to speed up rebuilds
|
||||||
build-base \
|
|
||||||
libffi-dev \
|
|
||||||
libjpeg-turbo-dev \
|
|
||||||
libressl-dev \
|
|
||||||
libxslt-dev \
|
|
||||||
linux-headers \
|
|
||||||
postgresql-dev \
|
|
||||||
zlib-dev
|
|
||||||
|
|
||||||
# build things which have slow build steps, before we copy synapse, so that
|
|
||||||
# the layer can be cached.
|
|
||||||
#
|
|
||||||
# (we really just care about caching a wheel here, as the "pip install" below
|
|
||||||
# will install them again.)
|
|
||||||
|
|
||||||
RUN pip install --prefix="/install" --no-warn-script-location \
|
RUN pip install --prefix="/install" --no-warn-script-location \
|
||||||
cryptography \
|
frozendict \
|
||||||
msgpack-python \
|
jaeger-client \
|
||||||
pillow \
|
opentracing \
|
||||||
pynacl
|
prometheus-client \
|
||||||
|
psycopg2 \
|
||||||
|
pycparser \
|
||||||
|
pyrsistent \
|
||||||
|
pyyaml \
|
||||||
|
simplejson \
|
||||||
|
threadloop \
|
||||||
|
thrift
|
||||||
|
|
||||||
# now install synapse and all of the python deps to /install.
|
# now install synapse and all of the python deps to /install.
|
||||||
|
|
||||||
COPY synapse /synapse/synapse/
|
COPY synapse /synapse/synapse/
|
||||||
COPY scripts /synapse/scripts/
|
COPY scripts /synapse/scripts/
|
||||||
COPY MANIFEST.in README.rst setup.py synctl /synapse/
|
COPY MANIFEST.in README.rst setup.py synctl /synapse/
|
||||||
@@ -55,19 +57,16 @@ RUN pip install --prefix="/install" --no-warn-script-location \
|
|||||||
### Stage 1: runtime
|
### Stage 1: runtime
|
||||||
###
|
###
|
||||||
|
|
||||||
FROM docker.io/python:${PYTHON_VERSION}-alpine3.11
|
FROM docker.io/python:${PYTHON_VERSION}-slim
|
||||||
|
|
||||||
# xmlsec is required for saml support
|
RUN apt-get update && apt-get install -y \
|
||||||
RUN apk add --no-cache --virtual .runtime_deps \
|
curl \
|
||||||
libffi \
|
gosu \
|
||||||
libjpeg-turbo \
|
libjpeg62-turbo \
|
||||||
libressl \
|
libpq5 \
|
||||||
libxslt \
|
libwebp6 \
|
||||||
libpq \
|
xmlsec1 \
|
||||||
zlib \
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
su-exec \
|
|
||||||
tzdata \
|
|
||||||
xmlsec
|
|
||||||
|
|
||||||
COPY --from=builder /install /usr/local
|
COPY --from=builder /install /usr/local
|
||||||
COPY ./docker/start.py /start.py
|
COPY ./docker/start.py /start.py
|
||||||
@@ -78,3 +77,6 @@ VOLUME ["/data"]
|
|||||||
EXPOSE 8008/tcp 8009/tcp 8448/tcp
|
EXPOSE 8008/tcp 8009/tcp 8448/tcp
|
||||||
|
|
||||||
ENTRYPOINT ["/start.py"]
|
ENTRYPOINT ["/start.py"]
|
||||||
|
|
||||||
|
HEALTHCHECK --interval=1m --timeout=5s \
|
||||||
|
CMD curl -fSs http://localhost:8008/health || exit 1
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ docker logs synapse
|
|||||||
If all is well, you should now be able to connect to http://localhost:8008 and
|
If all is well, you should now be able to connect to http://localhost:8008 and
|
||||||
see a confirmation message.
|
see a confirmation message.
|
||||||
|
|
||||||
The following environment variables are supported in run mode:
|
The following environment variables are supported in `run` mode:
|
||||||
|
|
||||||
* `SYNAPSE_CONFIG_DIR`: where additional config files are stored. Defaults to
|
* `SYNAPSE_CONFIG_DIR`: where additional config files are stored. Defaults to
|
||||||
`/data`.
|
`/data`.
|
||||||
@@ -94,6 +94,35 @@ The following environment variables are supported in run 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. Defaults to `991`, `991`.
|
||||||
* `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:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -d --name synapse \
|
||||||
|
--mount type=volume,src=synapse-data,dst=/data \
|
||||||
|
-p 8008:8008 \
|
||||||
|
matrixdotorg/synapse:latest run \
|
||||||
|
-m synapse.app.generic_worker \
|
||||||
|
--config-path=/data/homeserver.yaml \
|
||||||
|
--config-path=/data/generic_worker.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
If you do not provide `-m`, the value of the `SYNAPSE_WORKER` environment variable is used. If you do not provide at least one `--config-path` or `-c`, the value of the `SYNAPSE_CONFIG_PATH` environment variable is used instead.
|
||||||
|
|
||||||
|
## Generating an (admin) user
|
||||||
|
|
||||||
|
After synapse is running, you may wish to create a user via `register_new_matrix_user`.
|
||||||
|
|
||||||
|
This requires a `registration_shared_secret` to be set in your config file. Synapse
|
||||||
|
must be restarted to pick up this change.
|
||||||
|
|
||||||
|
You can then call the script:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker exec -it synapse register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml --help
|
||||||
|
```
|
||||||
|
|
||||||
|
Remember to remove the `registration_shared_secret` and restart if you no-longer need it.
|
||||||
|
|
||||||
## TLS support
|
## TLS support
|
||||||
|
|
||||||
The default configuration exposes a single HTTP port: http://localhost:8008. It
|
The default configuration exposes a single HTTP port: http://localhost:8008. It
|
||||||
@@ -147,3 +176,32 @@ docker build -t matrixdotorg/synapse -f docker/Dockerfile .
|
|||||||
|
|
||||||
You can choose to build a different docker image by changing the value of the `-f` flag to
|
You can choose to build a different docker image by changing the value of the `-f` flag to
|
||||||
point to another Dockerfile.
|
point to another Dockerfile.
|
||||||
|
|
||||||
|
## Disabling 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.
|
||||||
|
|
||||||
|
```
|
||||||
|
--no-healthcheck
|
||||||
|
```
|
||||||
|
## Setting custom healthcheck on docker run
|
||||||
|
|
||||||
|
If you wish to point the healthcheck at a different port with docker command, add the following
|
||||||
|
|
||||||
|
```
|
||||||
|
--health-cmd 'curl -fSs http://localhost:1234/health'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Setting the healthcheck in docker-compose file
|
||||||
|
|
||||||
|
You can add the following to set a custom healthcheck in a docker compose file.
|
||||||
|
You will need version >2.1 for this to work.
|
||||||
|
|
||||||
|
```
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-fSs", "http://localhost:8008/health"]
|
||||||
|
interval: 1m
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
```
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ federation_rc_concurrent: 3
|
|||||||
|
|
||||||
media_store_path: "/data/media"
|
media_store_path: "/data/media"
|
||||||
uploads_path: "/data/uploads"
|
uploads_path: "/data/uploads"
|
||||||
max_upload_size: "{{ SYNAPSE_MAX_UPLOAD_SIZE or "10M" }}"
|
max_upload_size: "{{ SYNAPSE_MAX_UPLOAD_SIZE or "50M" }}"
|
||||||
max_image_pixels: "32M"
|
max_image_pixels: "32M"
|
||||||
dynamic_thumbnails: false
|
dynamic_thumbnails: false
|
||||||
|
|
||||||
|
|||||||
@@ -4,16 +4,10 @@ formatters:
|
|||||||
precise:
|
precise:
|
||||||
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
|
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
|
||||||
|
|
||||||
filters:
|
|
||||||
context:
|
|
||||||
(): synapse.logging.context.LoggingContextFilter
|
|
||||||
request: ""
|
|
||||||
|
|
||||||
handlers:
|
handlers:
|
||||||
console:
|
console:
|
||||||
class: logging.StreamHandler
|
class: logging.StreamHandler
|
||||||
formatter: precise
|
formatter: precise
|
||||||
filters: [context]
|
|
||||||
|
|
||||||
loggers:
|
loggers:
|
||||||
synapse.storage.SQL:
|
synapse.storage.SQL:
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ def generate_config_from_template(config_dir, config_path, environ, ownership):
|
|||||||
|
|
||||||
if ownership is not None:
|
if ownership is not None:
|
||||||
subprocess.check_output(["chown", "-R", ownership, "/data"])
|
subprocess.check_output(["chown", "-R", ownership, "/data"])
|
||||||
args = ["su-exec", ownership] + args
|
args = ["gosu", ownership] + args
|
||||||
|
|
||||||
subprocess.check_output(args)
|
subprocess.check_output(args)
|
||||||
|
|
||||||
@@ -172,14 +172,14 @@ def run_generate_config(environ, ownership):
|
|||||||
# make sure that synapse has perms to write to the data dir.
|
# make sure that synapse has perms to write to the data dir.
|
||||||
subprocess.check_output(["chown", ownership, data_dir])
|
subprocess.check_output(["chown", ownership, data_dir])
|
||||||
|
|
||||||
args = ["su-exec", ownership] + args
|
args = ["gosu", ownership] + args
|
||||||
os.execv("/sbin/su-exec", args)
|
os.execv("/usr/sbin/gosu", args)
|
||||||
else:
|
else:
|
||||||
os.execv("/usr/local/bin/python", args)
|
os.execv("/usr/local/bin/python", args)
|
||||||
|
|
||||||
|
|
||||||
def main(args, environ):
|
def main(args, environ):
|
||||||
mode = args[1] if len(args) > 1 else None
|
mode = args[1] if len(args) > 1 else "run"
|
||||||
desired_uid = int(environ.get("UID", "991"))
|
desired_uid = int(environ.get("UID", "991"))
|
||||||
desired_gid = int(environ.get("GID", "991"))
|
desired_gid = int(environ.get("GID", "991"))
|
||||||
synapse_worker = environ.get("SYNAPSE_WORKER", "synapse.app.homeserver")
|
synapse_worker = environ.get("SYNAPSE_WORKER", "synapse.app.homeserver")
|
||||||
@@ -189,7 +189,7 @@ def main(args, environ):
|
|||||||
ownership = "{}:{}".format(desired_uid, desired_gid)
|
ownership = "{}:{}".format(desired_uid, desired_gid)
|
||||||
|
|
||||||
if ownership is None:
|
if ownership is None:
|
||||||
log("Will not perform chmod/su-exec as UserID already matches request")
|
log("Will not perform chmod/gosu as UserID already matches request")
|
||||||
|
|
||||||
# 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":
|
||||||
@@ -205,39 +205,50 @@ def main(args, environ):
|
|||||||
config_dir, config_path, environ, ownership
|
config_dir, config_path, environ, ownership
|
||||||
)
|
)
|
||||||
|
|
||||||
if mode is not None:
|
if mode != "run":
|
||||||
error("Unknown execution mode '%s'" % (mode,))
|
error("Unknown execution mode '%s'" % (mode,))
|
||||||
|
|
||||||
config_dir = environ.get("SYNAPSE_CONFIG_DIR", "/data")
|
args = args[2:]
|
||||||
config_path = environ.get("SYNAPSE_CONFIG_PATH", config_dir + "/homeserver.yaml")
|
|
||||||
|
|
||||||
if not os.path.exists(config_path):
|
if "-m" not in args:
|
||||||
if "SYNAPSE_SERVER_NAME" in environ:
|
args = ["-m", synapse_worker] + args
|
||||||
error(
|
|
||||||
"""\
|
# if there are no config files passed to synapse, try adding the default file
|
||||||
|
if not any(p.startswith("--config-path") or p.startswith("-c") for p in args):
|
||||||
|
config_dir = environ.get("SYNAPSE_CONFIG_DIR", "/data")
|
||||||
|
config_path = environ.get(
|
||||||
|
"SYNAPSE_CONFIG_PATH", config_dir + "/homeserver.yaml"
|
||||||
|
)
|
||||||
|
|
||||||
|
if not os.path.exists(config_path):
|
||||||
|
if "SYNAPSE_SERVER_NAME" in environ:
|
||||||
|
error(
|
||||||
|
"""\
|
||||||
Config file '%s' does not exist.
|
Config file '%s' does not exist.
|
||||||
|
|
||||||
The synapse docker image no longer supports generating a config file on-the-fly
|
The synapse docker image no longer supports generating a config file on-the-fly
|
||||||
based on environment variables. You can migrate to a static config file by
|
based on environment variables. You can migrate to a static config file by
|
||||||
running with 'migrate_config'. See the README for more details.
|
running with 'migrate_config'. See the README for more details.
|
||||||
"""
|
"""
|
||||||
|
% (config_path,)
|
||||||
|
)
|
||||||
|
|
||||||
|
error(
|
||||||
|
"Config file '%s' does not exist. You should either create a new "
|
||||||
|
"config file by running with the `generate` argument (and then edit "
|
||||||
|
"the resulting file before restarting) or specify the path to an "
|
||||||
|
"existing config file with the SYNAPSE_CONFIG_PATH variable."
|
||||||
% (config_path,)
|
% (config_path,)
|
||||||
)
|
)
|
||||||
|
|
||||||
error(
|
args += ["--config-path", config_path]
|
||||||
"Config file '%s' does not exist. You should either create a new "
|
|
||||||
"config file by running with the `generate` argument (and then edit "
|
|
||||||
"the resulting file before restarting) or specify the path to an "
|
|
||||||
"existing config file with the SYNAPSE_CONFIG_PATH variable."
|
|
||||||
% (config_path,)
|
|
||||||
)
|
|
||||||
|
|
||||||
log("Starting synapse with config file " + config_path)
|
log("Starting synapse with args " + " ".join(args))
|
||||||
|
|
||||||
args = ["python", "-m", synapse_worker, "--config-path", config_path]
|
args = ["python"] + args
|
||||||
if ownership is not None:
|
if ownership is not None:
|
||||||
args = ["su-exec", ownership] + args
|
args = ["gosu", ownership] + args
|
||||||
os.execv("/sbin/su-exec", args)
|
os.execv("/usr/sbin/gosu", args)
|
||||||
else:
|
else:
|
||||||
os.execv("/usr/local/bin/python", args)
|
os.execv("/usr/local/bin/python", args)
|
||||||
|
|
||||||
|
|||||||
@@ -10,5 +10,16 @@
|
|||||||
# homeserver.yaml. Instead, if you are starting from scratch, please generate
|
# homeserver.yaml. Instead, if you are starting from scratch, please generate
|
||||||
# a fresh config using Synapse by following the instructions in INSTALL.md.
|
# a fresh config using Synapse by following the instructions in INSTALL.md.
|
||||||
|
|
||||||
|
# Configuration options that take a time period can be set using a number
|
||||||
|
# followed by a letter. Letters have the following meanings:
|
||||||
|
# s = second
|
||||||
|
# m = minute
|
||||||
|
# h = hour
|
||||||
|
# d = day
|
||||||
|
# w = week
|
||||||
|
# y = year
|
||||||
|
# For example, setting redaction_retention_period: 5m would remove redacted
|
||||||
|
# messages from the database after 5 minutes, rather than 5 months.
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
|
|||||||
@@ -12,13 +12,14 @@ introduced support for automatically provisioning certificates through
|
|||||||
In [March 2019](https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430),
|
In [March 2019](https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430),
|
||||||
Let's Encrypt announced that they were deprecating version 1 of the ACME
|
Let's Encrypt announced that they were deprecating version 1 of the ACME
|
||||||
protocol, with the plan to disable the use of it for new accounts in
|
protocol, with the plan to disable the use of it for new accounts in
|
||||||
November 2019, and for existing accounts in June 2020.
|
November 2019, for new domains in June 2020, and for existing accounts and
|
||||||
|
domains in June 2021.
|
||||||
|
|
||||||
Synapse doesn't currently support version 2 of the ACME protocol, which
|
Synapse doesn't currently support version 2 of the ACME protocol, which
|
||||||
means that:
|
means that:
|
||||||
|
|
||||||
* for existing installs, Synapse's built-in ACME support will continue
|
* for existing installs, Synapse's built-in ACME support will continue
|
||||||
to work until June 2020.
|
to work until June 2021.
|
||||||
* for new installs, this feature will not work at all.
|
* for new installs, this feature will not work at all.
|
||||||
|
|
||||||
Either way, it is recommended to move from Synapse's ACME support
|
Either way, it is recommended to move from Synapse's ACME support
|
||||||
|
|||||||
165
docs/admin_api/event_reports.rst
Normal file
165
docs/admin_api/event_reports.rst
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
Show reported events
|
||||||
|
====================
|
||||||
|
|
||||||
|
This API returns information about reported events.
|
||||||
|
|
||||||
|
The api is::
|
||||||
|
|
||||||
|
GET /_synapse/admin/v1/event_reports?from=0&limit=10
|
||||||
|
|
||||||
|
To use it, you will need to authenticate by providing an ``access_token`` for a
|
||||||
|
server admin: see `README.rst <README.rst>`_.
|
||||||
|
|
||||||
|
It returns a JSON body like the following:
|
||||||
|
|
||||||
|
.. code:: jsonc
|
||||||
|
|
||||||
|
{
|
||||||
|
"event_reports": [
|
||||||
|
{
|
||||||
|
"event_id": "$bNUFCwGzWca1meCGkjp-zwslF-GfVcXukvRLI1_FaVY",
|
||||||
|
"id": 2,
|
||||||
|
"reason": "foo",
|
||||||
|
"score": -100,
|
||||||
|
"received_ts": 1570897107409,
|
||||||
|
"canonical_alias": "#alias1:matrix.org",
|
||||||
|
"room_id": "!ERAgBpSOcCCuTJqQPk:matrix.org",
|
||||||
|
"name": "Matrix HQ",
|
||||||
|
"sender": "@foobar:matrix.org",
|
||||||
|
"user_id": "@foo:matrix.org"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"event_id": "$3IcdZsDaN_En-S1DF4EMCy3v4gNRKeOJs8W5qTOKj4I",
|
||||||
|
"id": 3,
|
||||||
|
"reason": "bar",
|
||||||
|
"score": -100,
|
||||||
|
"received_ts": 1598889612059,
|
||||||
|
"canonical_alias": "#alias2:matrix.org",
|
||||||
|
"room_id": "!eGvUQuTCkHGVwNMOjv:matrix.org",
|
||||||
|
"name": "Your room name here",
|
||||||
|
"sender": "@foobar:matrix.org",
|
||||||
|
"user_id": "@bar:matrix.org"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"next_token": 2,
|
||||||
|
"total": 4
|
||||||
|
}
|
||||||
|
|
||||||
|
To paginate, check for ``next_token`` and if present, call the endpoint again
|
||||||
|
with ``from`` set to the value of ``next_token``. This will return a new page.
|
||||||
|
|
||||||
|
If the endpoint does not return a ``next_token`` then there are no more
|
||||||
|
reports to paginate through.
|
||||||
|
|
||||||
|
**URL parameters:**
|
||||||
|
|
||||||
|
- ``limit``: integer - Is optional but is used for pagination,
|
||||||
|
denoting the maximum number of items to return in this call. Defaults to ``100``.
|
||||||
|
- ``from``: integer - Is optional but used for pagination,
|
||||||
|
denoting the offset in the returned results. This should be treated as an opaque value and
|
||||||
|
not explicitly set to anything other than the return value of ``next_token`` from a previous call.
|
||||||
|
Defaults to ``0``.
|
||||||
|
- ``dir``: string - Direction of event report order. Whether to fetch the most recent first (``b``) or the
|
||||||
|
oldest first (``f``). Defaults to ``b``.
|
||||||
|
- ``user_id``: string - Is optional and filters to only return users with user IDs that contain this value.
|
||||||
|
This is the user who reported the event and wrote the reason.
|
||||||
|
- ``room_id``: string - Is optional and filters to only return rooms with room IDs that contain this value.
|
||||||
|
|
||||||
|
**Response**
|
||||||
|
|
||||||
|
The following fields are returned in the JSON response body:
|
||||||
|
|
||||||
|
- ``id``: integer - ID of event report.
|
||||||
|
- ``received_ts``: integer - The timestamp (in milliseconds since the unix epoch) when this report was sent.
|
||||||
|
- ``room_id``: string - The ID of the room in which the event being reported is located.
|
||||||
|
- ``name``: string - The name of the room.
|
||||||
|
- ``event_id``: string - The ID of the reported event.
|
||||||
|
- ``user_id``: string - This is the user who reported the event and wrote the reason.
|
||||||
|
- ``reason``: string - Comment made by the ``user_id`` in this report. May be blank.
|
||||||
|
- ``score``: integer - Content is reported based upon a negative score, where -100 is "most offensive" and 0 is "inoffensive".
|
||||||
|
- ``sender``: string - This is the ID of the user who sent the original message/event that was reported.
|
||||||
|
- ``canonical_alias``: string - The canonical alias of the room. ``null`` if the room does not have a canonical alias set.
|
||||||
|
- ``next_token``: integer - Indication for pagination. See above.
|
||||||
|
- ``total``: integer - Total number of event reports related to the query (``user_id`` and ``room_id``).
|
||||||
|
|
||||||
|
Show details of a specific event report
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
This API returns information about a specific event report.
|
||||||
|
|
||||||
|
The api is::
|
||||||
|
|
||||||
|
GET /_synapse/admin/v1/event_reports/<report_id>
|
||||||
|
|
||||||
|
To use it, you will need to authenticate by providing an ``access_token`` for a
|
||||||
|
server admin: see `README.rst <README.rst>`_.
|
||||||
|
|
||||||
|
It returns a JSON body like the following:
|
||||||
|
|
||||||
|
.. code:: jsonc
|
||||||
|
|
||||||
|
{
|
||||||
|
"event_id": "$bNUFCwGzWca1meCGkjp-zwslF-GfVcXukvRLI1_FaVY",
|
||||||
|
"event_json": {
|
||||||
|
"auth_events": [
|
||||||
|
"$YK4arsKKcc0LRoe700pS8DSjOvUT4NDv0HfInlMFw2M",
|
||||||
|
"$oggsNXxzPFRE3y53SUNd7nsj69-QzKv03a1RucHu-ws"
|
||||||
|
],
|
||||||
|
"content": {
|
||||||
|
"body": "matrix.org: This Week in Matrix",
|
||||||
|
"format": "org.matrix.custom.html",
|
||||||
|
"formatted_body": "<strong>matrix.org</strong>:<br><a href=\"https://matrix.org/blog/\"><strong>This Week in Matrix</strong></a>",
|
||||||
|
"msgtype": "m.notice"
|
||||||
|
},
|
||||||
|
"depth": 546,
|
||||||
|
"hashes": {
|
||||||
|
"sha256": "xK1//xnmvHJIOvbgXlkI8eEqdvoMmihVDJ9J4SNlsAw"
|
||||||
|
},
|
||||||
|
"origin": "matrix.org",
|
||||||
|
"origin_server_ts": 1592291711430,
|
||||||
|
"prev_events": [
|
||||||
|
"$YK4arsKKcc0LRoe700pS8DSjOvUT4NDv0HfInlMFw2M"
|
||||||
|
],
|
||||||
|
"prev_state": [],
|
||||||
|
"room_id": "!ERAgBpSOcCCuTJqQPk:matrix.org",
|
||||||
|
"sender": "@foobar:matrix.org",
|
||||||
|
"signatures": {
|
||||||
|
"matrix.org": {
|
||||||
|
"ed25519:a_JaEG": "cs+OUKW/iHx5pEidbWxh0UiNNHwe46Ai9LwNz+Ah16aWDNszVIe2gaAcVZfvNsBhakQTew51tlKmL2kspXk/Dg"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "m.room.message",
|
||||||
|
"unsigned": {
|
||||||
|
"age_ts": 1592291711430,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"id": <report_id>,
|
||||||
|
"reason": "foo",
|
||||||
|
"score": -100,
|
||||||
|
"received_ts": 1570897107409,
|
||||||
|
"canonical_alias": "#alias1:matrix.org",
|
||||||
|
"room_id": "!ERAgBpSOcCCuTJqQPk:matrix.org",
|
||||||
|
"name": "Matrix HQ",
|
||||||
|
"sender": "@foobar:matrix.org",
|
||||||
|
"user_id": "@foo:matrix.org"
|
||||||
|
}
|
||||||
|
|
||||||
|
**URL parameters:**
|
||||||
|
|
||||||
|
- ``report_id``: string - The ID of the event report.
|
||||||
|
|
||||||
|
**Response**
|
||||||
|
|
||||||
|
The following fields are returned in the JSON response body:
|
||||||
|
|
||||||
|
- ``id``: integer - ID of event report.
|
||||||
|
- ``received_ts``: integer - The timestamp (in milliseconds since the unix epoch) when this report was sent.
|
||||||
|
- ``room_id``: string - The ID of the room in which the event being reported is located.
|
||||||
|
- ``name``: string - The name of the room.
|
||||||
|
- ``event_id``: string - The ID of the reported event.
|
||||||
|
- ``user_id``: string - This is the user who reported the event and wrote the reason.
|
||||||
|
- ``reason``: string - Comment made by the ``user_id`` in this report. May be blank.
|
||||||
|
- ``score``: integer - Content is reported based upon a negative score, where -100 is "most offensive" and 0 is "inoffensive".
|
||||||
|
- ``sender``: string - This is the ID of the user who sent the original message/event that was reported.
|
||||||
|
- ``canonical_alias``: string - The canonical alias of the room. ``null`` if the room does not have a canonical alias set.
|
||||||
|
- ``event_json``: object - Details of the original event that was reported.
|
||||||
@@ -100,3 +100,82 @@ Response:
|
|||||||
"num_quarantined": 10 # The number of media items successfully quarantined
|
"num_quarantined": 10 # The number of media items successfully quarantined
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Delete local media
|
||||||
|
This API deletes the *local* media from the disk of your own server.
|
||||||
|
This includes any local thumbnails and copies of media downloaded from
|
||||||
|
remote homeservers.
|
||||||
|
This API will not affect media that has been uploaded to external
|
||||||
|
media repositories (e.g https://github.com/turt2live/matrix-media-repo/).
|
||||||
|
See also [purge_remote_media.rst](purge_remote_media.rst).
|
||||||
|
|
||||||
|
## Delete a specific local media
|
||||||
|
Delete a specific `media_id`.
|
||||||
|
|
||||||
|
Request:
|
||||||
|
|
||||||
|
```
|
||||||
|
DELETE /_synapse/admin/v1/media/<server_name>/<media_id>
|
||||||
|
|
||||||
|
{}
|
||||||
|
```
|
||||||
|
|
||||||
|
URL Parameters
|
||||||
|
|
||||||
|
* `server_name`: string - The name of your local server (e.g `matrix.org`)
|
||||||
|
* `media_id`: string - The ID of the media (e.g `abcdefghijklmnopqrstuvwx`)
|
||||||
|
|
||||||
|
Response:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"deleted_media": [
|
||||||
|
"abcdefghijklmnopqrstuvwx"
|
||||||
|
],
|
||||||
|
"total": 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The following fields are returned in the JSON response body:
|
||||||
|
|
||||||
|
* `deleted_media`: an array of strings - List of deleted `media_id`
|
||||||
|
* `total`: integer - Total number of deleted `media_id`
|
||||||
|
|
||||||
|
## Delete local media by date or size
|
||||||
|
|
||||||
|
Request:
|
||||||
|
|
||||||
|
```
|
||||||
|
POST /_synapse/admin/v1/media/<server_name>/delete?before_ts=<before_ts>
|
||||||
|
|
||||||
|
{}
|
||||||
|
```
|
||||||
|
|
||||||
|
URL Parameters
|
||||||
|
|
||||||
|
* `server_name`: string - The name of your local server (e.g `matrix.org`).
|
||||||
|
* `before_ts`: string representing a positive integer - Unix timestamp in ms.
|
||||||
|
Files that were last used before this timestamp will be deleted. It is the timestamp of
|
||||||
|
last access and not the timestamp creation.
|
||||||
|
* `size_gt`: Optional - string representing a positive integer - Size of the media in bytes.
|
||||||
|
Files that are larger will be deleted. Defaults to `0`.
|
||||||
|
* `keep_profiles`: Optional - string representing a boolean - Switch to also delete files
|
||||||
|
that are still used in image data (e.g user profile, room avatar).
|
||||||
|
If `false` these files will be deleted. Defaults to `true`.
|
||||||
|
|
||||||
|
Response:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"deleted_media": [
|
||||||
|
"abcdefghijklmnopqrstuvwx",
|
||||||
|
"abcdefghijklmnopqrstuvwz"
|
||||||
|
],
|
||||||
|
"total": 2
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The following fields are returned in the JSON response body:
|
||||||
|
|
||||||
|
* `deleted_media`: an array of strings - List of deleted `media_id`
|
||||||
|
* `total`: integer - Total number of deleted `media_id`
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ This API will remove all trace of a room from your database.
|
|||||||
|
|
||||||
All local users must have left the room before it can be removed.
|
All local users must have left the room before it can be removed.
|
||||||
|
|
||||||
|
See also: [Delete Room API](rooms.md#delete-room-api)
|
||||||
|
|
||||||
The API is:
|
The API is:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -275,6 +275,8 @@ The following fields are possible in the JSON response body:
|
|||||||
|
|
||||||
* `room_id` - The ID of the room.
|
* `room_id` - The ID of the room.
|
||||||
* `name` - The name of the room.
|
* `name` - The name of the room.
|
||||||
|
* `topic` - The topic of the room.
|
||||||
|
* `avatar` - The `mxc` URI to the avatar of the room.
|
||||||
* `canonical_alias` - The canonical (main) alias address of the room.
|
* `canonical_alias` - The canonical (main) alias address of the room.
|
||||||
* `joined_members` - How many users are currently in the room.
|
* `joined_members` - How many users are currently in the room.
|
||||||
* `joined_local_members` - How many local users are currently in the room.
|
* `joined_local_members` - How many local users are currently in the room.
|
||||||
@@ -304,6 +306,8 @@ Response:
|
|||||||
{
|
{
|
||||||
"room_id": "!mscvqgqpHYjBGDxNym:matrix.org",
|
"room_id": "!mscvqgqpHYjBGDxNym:matrix.org",
|
||||||
"name": "Music Theory",
|
"name": "Music Theory",
|
||||||
|
"avatar": "mxc://matrix.org/AQDaVFlbkQoErdOgqWRgiGSV",
|
||||||
|
"topic": "Theory, Composition, Notation, Analysis",
|
||||||
"canonical_alias": "#musictheory:matrix.org",
|
"canonical_alias": "#musictheory:matrix.org",
|
||||||
"joined_members": 127
|
"joined_members": 127
|
||||||
"joined_local_members": 2,
|
"joined_local_members": 2,
|
||||||
@@ -318,3 +322,134 @@ Response:
|
|||||||
"state_events": 93534
|
"state_events": 93534
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Room Members API
|
||||||
|
|
||||||
|
The Room Members admin API allows server admins to get a list of all members of a room.
|
||||||
|
|
||||||
|
The response includes the following fields:
|
||||||
|
|
||||||
|
* `members` - A list of all the members that are present in the room, represented by their ids.
|
||||||
|
* `total` - Total number of members in the room.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
A standard request:
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /_synapse/admin/v1/rooms/<room_id>/members
|
||||||
|
|
||||||
|
{}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response:
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"members": [
|
||||||
|
"@foo:matrix.org",
|
||||||
|
"@bar:matrix.org",
|
||||||
|
"@foobar:matrix.org
|
||||||
|
],
|
||||||
|
"total": 3
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# Delete Room API
|
||||||
|
|
||||||
|
The Delete Room admin API allows server admins to remove rooms from server
|
||||||
|
and block these rooms.
|
||||||
|
It is a combination and improvement of "[Shutdown room](shutdown_room.md)"
|
||||||
|
and "[Purge room](purge_room.md)" API.
|
||||||
|
|
||||||
|
Shuts down a room. Moves all local users and room aliases automatically to a
|
||||||
|
new room if `new_room_user_id` is set. Otherwise local users only
|
||||||
|
leave the room without any information.
|
||||||
|
|
||||||
|
The new room will be created with the user specified by the `new_room_user_id` parameter
|
||||||
|
as room administrator and will contain a message explaining what happened. Users invited
|
||||||
|
to the new room will have power level `-10` by default, and thus be unable to speak.
|
||||||
|
|
||||||
|
If `block` is `True` it prevents new joins to the old room.
|
||||||
|
|
||||||
|
This API will remove all trace of the old room from your database after removing
|
||||||
|
all local users. If `purge` is `true` (the default), all traces of the old room will
|
||||||
|
be removed from your database after removing all local users. If you do not want
|
||||||
|
this to happen, set `purge` to `false`.
|
||||||
|
Depending on the amount of history being purged a call to the API may take
|
||||||
|
several minutes or longer.
|
||||||
|
|
||||||
|
The local server will only have the power to move local user and room aliases to
|
||||||
|
the new room. Users on other servers will be unaffected.
|
||||||
|
|
||||||
|
The API is:
|
||||||
|
|
||||||
|
```json
|
||||||
|
POST /_synapse/admin/v1/rooms/<room_id>/delete
|
||||||
|
```
|
||||||
|
|
||||||
|
with a body of:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"new_room_user_id": "@someuser:example.com",
|
||||||
|
"room_name": "Content Violation Notification",
|
||||||
|
"message": "Bad Room has been shutdown due to content violations on this server. Please review our Terms of Service.",
|
||||||
|
"block": true,
|
||||||
|
"purge": true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
To use it, you will need to authenticate by providing an ``access_token`` for a
|
||||||
|
server admin: see [README.rst](README.rst).
|
||||||
|
|
||||||
|
A response body like the following is returned:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"kicked_users": [
|
||||||
|
"@foobar:example.com"
|
||||||
|
],
|
||||||
|
"failed_to_kick_users": [],
|
||||||
|
"local_aliases": [
|
||||||
|
"#badroom:example.com",
|
||||||
|
"#evilsaloon:example.com"
|
||||||
|
],
|
||||||
|
"new_room_id": "!newroomid:example.com"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
The following parameters should be set in the URL:
|
||||||
|
|
||||||
|
* `room_id` - The ID of the room.
|
||||||
|
|
||||||
|
The following JSON body parameters are available:
|
||||||
|
|
||||||
|
* `new_room_user_id` - Optional. If set, a new room will be created with this user ID
|
||||||
|
as the creator and admin, and all users in the old room will be moved into that
|
||||||
|
room. If not set, no new room will be created and the users will just be removed
|
||||||
|
from the old room. The user ID must be on the local server, but does not necessarily
|
||||||
|
have to belong to a registered user.
|
||||||
|
* `room_name` - Optional. A string representing the name of the room that new users will be
|
||||||
|
invited to. Defaults to `Content Violation Notification`
|
||||||
|
* `message` - Optional. A string containing the first message that will be sent as
|
||||||
|
`new_room_user_id` in the new room. Ideally this will clearly convey why the
|
||||||
|
original room was shut down. Defaults to `Sharing illegal content on this server
|
||||||
|
is not permitted and rooms in violation will be blocked.`
|
||||||
|
* `block` - Optional. If set to `true`, this room will be added to a blocking list, preventing
|
||||||
|
future attempts to join the room. Defaults to `false`.
|
||||||
|
* `purge` - Optional. If set to `true`, it will remove all traces of the room from your database.
|
||||||
|
Defaults to `true`.
|
||||||
|
|
||||||
|
The JSON body must not be empty. The body must be at least `{}`.
|
||||||
|
|
||||||
|
## Response
|
||||||
|
|
||||||
|
The following fields are returned in the JSON response body:
|
||||||
|
|
||||||
|
* `kicked_users` - An array of users (`user_id`) that were kicked.
|
||||||
|
* `failed_to_kick_users` - An array of users (`user_id`) that that were not kicked.
|
||||||
|
* `local_aliases` - An array of strings representing the local aliases that were migrated from
|
||||||
|
the old room to the new.
|
||||||
|
* `new_room_id` - A string representing the room ID of the new room.
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ disallow any further invites or joins.
|
|||||||
The local server will only have the power to move local user and room aliases to
|
The local server will only have the power to move local user and room aliases to
|
||||||
the new room. Users on other servers will be unaffected.
|
the new room. Users on other servers will be unaffected.
|
||||||
|
|
||||||
|
See also: [Delete Room API](rooms.md#delete-room-api)
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
You will need to authenticate with an access token for an admin user.
|
You will need to authenticate with an access token for an admin user.
|
||||||
@@ -70,3 +72,30 @@ Response:
|
|||||||
"new_room_id": "!newroomid:example.com",
|
"new_room_id": "!newroomid:example.com",
|
||||||
},
|
},
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Undoing room shutdowns
|
||||||
|
|
||||||
|
*Note*: This guide may be outdated by the time you read it. By nature of room shutdowns being performed at the database level,
|
||||||
|
the structure can and does change without notice.
|
||||||
|
|
||||||
|
First, it's important to understand that a room shutdown is very destructive. Undoing a shutdown is not as simple as pretending it
|
||||||
|
never happened - work has to be done to move forward instead of resetting the past. In fact, in some cases it might not be possible
|
||||||
|
to recover at all:
|
||||||
|
|
||||||
|
* If the room was invite-only, your users will need to be re-invited.
|
||||||
|
* If the room no longer has any members at all, it'll be impossible to rejoin.
|
||||||
|
* The first user to rejoin will have to do so via an alias on a different server.
|
||||||
|
|
||||||
|
With all that being said, if you still want to try and recover the room:
|
||||||
|
|
||||||
|
1. For safety reasons, shut down Synapse.
|
||||||
|
2. In the database, run `DELETE FROM blocked_rooms WHERE room_id = '!example:example.org';`
|
||||||
|
* For caution: it's recommended to run this in a transaction: `BEGIN; DELETE ...;`, verify you got 1 result, then `COMMIT;`.
|
||||||
|
* The room ID is the same one supplied to the shutdown room API, not the Content Violation room.
|
||||||
|
3. Restart Synapse.
|
||||||
|
|
||||||
|
You will have to manually handle, if you so choose, the following:
|
||||||
|
|
||||||
|
* Aliases that would have been redirected to the Content Violation room.
|
||||||
|
* Users that would have been booted from the room (and will have been force-joined to the Content Violation room).
|
||||||
|
* Removal of the Content Violation room if desired.
|
||||||
|
|||||||
@@ -91,10 +91,14 @@ Body parameters:
|
|||||||
|
|
||||||
- ``admin``, optional, defaults to ``false``.
|
- ``admin``, optional, defaults to ``false``.
|
||||||
|
|
||||||
- ``deactivated``, optional, defaults to ``false``.
|
- ``deactivated``, optional. If unspecified, deactivation state will be left
|
||||||
|
unchanged on existing accounts and set to ``false`` for new accounts.
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
|
In order to re-activate an account ``deactivated`` must be set to ``false``. If
|
||||||
|
users do not login via single-sign-on, a new ``password`` must be provided.
|
||||||
|
|
||||||
List Accounts
|
List Accounts
|
||||||
=============
|
=============
|
||||||
|
|
||||||
@@ -104,7 +108,7 @@ The api is::
|
|||||||
|
|
||||||
GET /_synapse/admin/v2/users?from=0&limit=10&guests=false
|
GET /_synapse/admin/v2/users?from=0&limit=10&guests=false
|
||||||
|
|
||||||
To use it, you will need to authenticate by providing an `access_token` for a
|
To use it, you will need to authenticate by providing an ``access_token`` for a
|
||||||
server admin: see `README.rst <README.rst>`_.
|
server admin: see `README.rst <README.rst>`_.
|
||||||
|
|
||||||
The parameter ``from`` is optional but used for pagination, denoting the
|
The parameter ``from`` is optional but used for pagination, denoting the
|
||||||
@@ -115,8 +119,11 @@ from a previous call.
|
|||||||
The parameter ``limit`` is optional but is used for pagination, denoting the
|
The parameter ``limit`` is optional but is used for pagination, denoting the
|
||||||
maximum number of items to return in this call. Defaults to ``100``.
|
maximum number of items to return in this call. Defaults to ``100``.
|
||||||
|
|
||||||
The parameter ``user_id`` is optional and filters to only users with user IDs
|
The parameter ``user_id`` is optional and filters to only return users with user IDs
|
||||||
that contain this value.
|
that contain this value. This parameter is ignored when using the ``name`` parameter.
|
||||||
|
|
||||||
|
The parameter ``name`` is optional and filters to only return users with user ID localparts
|
||||||
|
**or** displaynames that contain this value.
|
||||||
|
|
||||||
The parameter ``guests`` is optional and if ``false`` will **exclude** guest users.
|
The parameter ``guests`` is optional and if ``false`` will **exclude** guest users.
|
||||||
Defaults to ``true`` to include guest users.
|
Defaults to ``true`` to include guest users.
|
||||||
@@ -207,9 +214,11 @@ Deactivate Account
|
|||||||
|
|
||||||
This API deactivates an account. It removes active access tokens, resets the
|
This API deactivates an account. It removes active access tokens, resets the
|
||||||
password, and deletes third-party IDs (to prevent the user requesting a
|
password, and deletes third-party IDs (to prevent the user requesting a
|
||||||
password reset). It can also mark the user as GDPR-erased (stopping their data
|
password reset).
|
||||||
from distributed further, and deleting it entirely if there are no other
|
|
||||||
references to it).
|
It can also mark the user as GDPR-erased. This means messages sent by the
|
||||||
|
user will still be visible by anyone that was in the room when these messages
|
||||||
|
were sent, but hidden from users joining the room afterwards.
|
||||||
|
|
||||||
The api is::
|
The api is::
|
||||||
|
|
||||||
@@ -295,6 +304,126 @@ To use it, you will need to authenticate by providing an ``access_token`` for a
|
|||||||
server admin: see `README.rst <README.rst>`_.
|
server admin: see `README.rst <README.rst>`_.
|
||||||
|
|
||||||
|
|
||||||
|
List room memberships of an user
|
||||||
|
================================
|
||||||
|
Gets a list of all ``room_id`` that a specific ``user_id`` is member.
|
||||||
|
|
||||||
|
The API is::
|
||||||
|
|
||||||
|
GET /_synapse/admin/v1/users/<user_id>/joined_rooms
|
||||||
|
|
||||||
|
To use it, you will need to authenticate by providing an ``access_token`` for a
|
||||||
|
server admin: see `README.rst <README.rst>`_.
|
||||||
|
|
||||||
|
A response body like the following is returned:
|
||||||
|
|
||||||
|
.. code:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"joined_rooms": [
|
||||||
|
"!DuGcnbhHGaSZQoNQR:matrix.org",
|
||||||
|
"!ZtSaPCawyWtxfWiIy:matrix.org"
|
||||||
|
],
|
||||||
|
"total": 2
|
||||||
|
}
|
||||||
|
|
||||||
|
**Parameters**
|
||||||
|
|
||||||
|
The following parameters should be set in the URL:
|
||||||
|
|
||||||
|
- ``user_id`` - fully qualified: for example, ``@user:server.com``.
|
||||||
|
|
||||||
|
**Response**
|
||||||
|
|
||||||
|
The following fields are returned in the JSON response body:
|
||||||
|
|
||||||
|
- ``joined_rooms`` - An array of ``room_id``.
|
||||||
|
- ``total`` - Number of rooms.
|
||||||
|
|
||||||
|
|
||||||
|
List media of an user
|
||||||
|
================================
|
||||||
|
Gets a list of all local media that a specific ``user_id`` has created.
|
||||||
|
The response is ordered by creation date descending and media ID descending.
|
||||||
|
The newest media is on top.
|
||||||
|
|
||||||
|
The API is::
|
||||||
|
|
||||||
|
GET /_synapse/admin/v1/users/<user_id>/media
|
||||||
|
|
||||||
|
To use it, you will need to authenticate by providing an ``access_token`` for a
|
||||||
|
server admin: see `README.rst <README.rst>`_.
|
||||||
|
|
||||||
|
A response body like the following is returned:
|
||||||
|
|
||||||
|
.. code:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"media": [
|
||||||
|
{
|
||||||
|
"created_ts": 100400,
|
||||||
|
"last_access_ts": null,
|
||||||
|
"media_id": "qXhyRzulkwLsNHTbpHreuEgo",
|
||||||
|
"media_length": 67,
|
||||||
|
"media_type": "image/png",
|
||||||
|
"quarantined_by": null,
|
||||||
|
"safe_from_quarantine": false,
|
||||||
|
"upload_name": "test1.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"created_ts": 200400,
|
||||||
|
"last_access_ts": null,
|
||||||
|
"media_id": "FHfiSnzoINDatrXHQIXBtahw",
|
||||||
|
"media_length": 67,
|
||||||
|
"media_type": "image/png",
|
||||||
|
"quarantined_by": null,
|
||||||
|
"safe_from_quarantine": false,
|
||||||
|
"upload_name": "test2.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"next_token": 3,
|
||||||
|
"total": 2
|
||||||
|
}
|
||||||
|
|
||||||
|
To paginate, check for ``next_token`` and if present, call the endpoint again
|
||||||
|
with ``from`` set to the value of ``next_token``. This will return a new page.
|
||||||
|
|
||||||
|
If the endpoint does not return a ``next_token`` then there are no more
|
||||||
|
reports to paginate through.
|
||||||
|
|
||||||
|
**Parameters**
|
||||||
|
|
||||||
|
The following parameters should be set in the URL:
|
||||||
|
|
||||||
|
- ``user_id`` - string - fully qualified: for example, ``@user:server.com``.
|
||||||
|
- ``limit``: string representing a positive integer - Is optional but is used for pagination,
|
||||||
|
denoting the maximum number of items to return in this call. Defaults to ``100``.
|
||||||
|
- ``from``: string representing a positive integer - Is optional but used for pagination,
|
||||||
|
denoting the offset in the returned results. This should be treated as an opaque value and
|
||||||
|
not explicitly set to anything other than the return value of ``next_token`` from a previous call.
|
||||||
|
Defaults to ``0``.
|
||||||
|
|
||||||
|
**Response**
|
||||||
|
|
||||||
|
The following fields are returned in the JSON response body:
|
||||||
|
|
||||||
|
- ``media`` - An array of objects, each containing information about a media.
|
||||||
|
Media objects contain the following fields:
|
||||||
|
|
||||||
|
- ``created_ts`` - integer - Timestamp when the content was uploaded in ms.
|
||||||
|
- ``last_access_ts`` - integer - Timestamp when the content was last accessed in ms.
|
||||||
|
- ``media_id`` - string - The id used to refer to the media.
|
||||||
|
- ``media_length`` - integer - Length of the media in bytes.
|
||||||
|
- ``media_type`` - string - The MIME-type of the media.
|
||||||
|
- ``quarantined_by`` - string - The user ID that initiated the quarantine request
|
||||||
|
for this media.
|
||||||
|
|
||||||
|
- ``safe_from_quarantine`` - bool - Status if this media is safe from quarantining.
|
||||||
|
- ``upload_name`` - string - The name the media was uploaded with.
|
||||||
|
|
||||||
|
- ``next_token``: integer - Indication for pagination. See above.
|
||||||
|
- ``total`` - integer - Total number of media.
|
||||||
|
|
||||||
User devices
|
User devices
|
||||||
============
|
============
|
||||||
|
|
||||||
@@ -329,7 +458,8 @@ A response body like the following is returned:
|
|||||||
"last_seen_ts": 1474491775025,
|
"last_seen_ts": 1474491775025,
|
||||||
"user_id": "<user_id>"
|
"user_id": "<user_id>"
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"total": 2
|
||||||
}
|
}
|
||||||
|
|
||||||
**Parameters**
|
**Parameters**
|
||||||
@@ -354,6 +484,8 @@ The following fields are returned in the JSON response body:
|
|||||||
devices was last seen. (May be a few minutes out of date, for efficiency reasons).
|
devices was last seen. (May be a few minutes out of date, for efficiency reasons).
|
||||||
- ``user_id`` - Owner of device.
|
- ``user_id`` - Owner of device.
|
||||||
|
|
||||||
|
- ``total`` - Total number of user's devices.
|
||||||
|
|
||||||
Delete multiple devices
|
Delete multiple devices
|
||||||
------------------
|
------------------
|
||||||
Deletes the given devices for a specific ``user_id``, and invalidates
|
Deletes the given devices for a specific ``user_id``, and invalidates
|
||||||
@@ -479,3 +611,82 @@ The following parameters should be set in the URL:
|
|||||||
|
|
||||||
- ``user_id`` - fully qualified: for example, ``@user:server.com``.
|
- ``user_id`` - fully qualified: for example, ``@user:server.com``.
|
||||||
- ``device_id`` - The device to delete.
|
- ``device_id`` - The device to delete.
|
||||||
|
|
||||||
|
List all pushers
|
||||||
|
================
|
||||||
|
Gets information about all pushers for a specific ``user_id``.
|
||||||
|
|
||||||
|
The API is::
|
||||||
|
|
||||||
|
GET /_synapse/admin/v1/users/<user_id>/pushers
|
||||||
|
|
||||||
|
To use it, you will need to authenticate by providing an ``access_token`` for a
|
||||||
|
server admin: see `README.rst <README.rst>`_.
|
||||||
|
|
||||||
|
A response body like the following is returned:
|
||||||
|
|
||||||
|
.. code:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"pushers": [
|
||||||
|
{
|
||||||
|
"app_display_name":"HTTP Push Notifications",
|
||||||
|
"app_id":"m.http",
|
||||||
|
"data": {
|
||||||
|
"url":"example.com"
|
||||||
|
},
|
||||||
|
"device_display_name":"pushy push",
|
||||||
|
"kind":"http",
|
||||||
|
"lang":"None",
|
||||||
|
"profile_tag":"",
|
||||||
|
"pushkey":"a@example.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"total": 1
|
||||||
|
}
|
||||||
|
|
||||||
|
**Parameters**
|
||||||
|
|
||||||
|
The following parameters should be set in the URL:
|
||||||
|
|
||||||
|
- ``user_id`` - fully qualified: for example, ``@user:server.com``.
|
||||||
|
|
||||||
|
**Response**
|
||||||
|
|
||||||
|
The following fields are returned in the JSON response body:
|
||||||
|
|
||||||
|
- ``pushers`` - An array containing the current pushers for the user
|
||||||
|
|
||||||
|
- ``app_display_name`` - string - A string that will allow the user to identify
|
||||||
|
what application owns this pusher.
|
||||||
|
|
||||||
|
- ``app_id`` - string - This is a reverse-DNS style identifier for the application.
|
||||||
|
Max length, 64 chars.
|
||||||
|
|
||||||
|
- ``data`` - A dictionary of information for the pusher implementation itself.
|
||||||
|
|
||||||
|
- ``url`` - string - Required if ``kind`` is ``http``. The URL to use to send
|
||||||
|
notifications to.
|
||||||
|
|
||||||
|
- ``format`` - string - The format to use when sending notifications to the
|
||||||
|
Push Gateway.
|
||||||
|
|
||||||
|
- ``device_display_name`` - string - A string that will allow the user to identify
|
||||||
|
what device owns this pusher.
|
||||||
|
|
||||||
|
- ``profile_tag`` - string - This string determines which set of device specific rules
|
||||||
|
this pusher executes.
|
||||||
|
|
||||||
|
- ``kind`` - string - The kind of pusher. "http" is a pusher that sends HTTP pokes.
|
||||||
|
- ``lang`` - string - The preferred language for receiving notifications
|
||||||
|
(e.g. 'en' or 'en-US')
|
||||||
|
|
||||||
|
- ``profile_tag`` - string - This string determines which set of device specific rules
|
||||||
|
this pusher executes.
|
||||||
|
|
||||||
|
- ``pushkey`` - string - This is a unique identifier for this pusher.
|
||||||
|
Max length, 512 bytes.
|
||||||
|
|
||||||
|
- ``total`` - integer - Number of pushers.
|
||||||
|
|
||||||
|
See also `Client-Server API Spec <https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-pushers>`_
|
||||||
|
|||||||
@@ -64,8 +64,6 @@ save as it takes a while and is very resource intensive.
|
|||||||
- Use underscores for functions and variables.
|
- Use underscores for functions and variables.
|
||||||
- **Docstrings**: should follow the [google code
|
- **Docstrings**: should follow the [google code
|
||||||
style](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings).
|
style](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings).
|
||||||
This is so that we can generate documentation with
|
|
||||||
[sphinx](http://sphinxcontrib-napoleon.readthedocs.org/en/latest/).
|
|
||||||
See the
|
See the
|
||||||
[examples](http://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html)
|
[examples](http://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html)
|
||||||
in the sphinx documentation.
|
in the sphinx documentation.
|
||||||
|
|||||||
@@ -47,6 +47,18 @@ you invite them to. This can be caused by an incorrectly-configured reverse
|
|||||||
proxy: see [reverse_proxy.md](<reverse_proxy.md>) for instructions on how to correctly
|
proxy: see [reverse_proxy.md](<reverse_proxy.md>) for instructions on how to correctly
|
||||||
configure a reverse proxy.
|
configure a reverse proxy.
|
||||||
|
|
||||||
|
### Known issues
|
||||||
|
|
||||||
|
**HTTP `308 Permanent Redirect` redirects are not followed**: Due to missing features
|
||||||
|
in the HTTP library used by Synapse, 308 redirects are currently not followed by
|
||||||
|
federating servers, which can cause `M_UNKNOWN` or `401 Unauthorized` errors. This
|
||||||
|
may affect users who are redirecting apex-to-www (e.g. `example.com` -> `www.example.com`),
|
||||||
|
and especially users of the Kubernetes *Nginx Ingress* module, which uses 308 redirect
|
||||||
|
codes by default. For those Kubernetes users, [this Stackoverflow post](https://stackoverflow.com/a/52617528/5096871)
|
||||||
|
might be helpful. For other users, switching to a `301 Moved Permanently` code may be
|
||||||
|
an option. 308 redirect codes will be supported properly in a future
|
||||||
|
release of Synapse.
|
||||||
|
|
||||||
## Running a demo federation of Synapses
|
## Running a demo federation of Synapses
|
||||||
|
|
||||||
If you want to get up and running quickly with a trio of homeservers in a
|
If you want to get up and running quickly with a trio of homeservers in a
|
||||||
|
|||||||
97
docs/jwt.md
Normal file
97
docs/jwt.md
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
# JWT Login Type
|
||||||
|
|
||||||
|
Synapse comes with a non-standard login type to support
|
||||||
|
[JSON Web Tokens](https://en.wikipedia.org/wiki/JSON_Web_Token). In general the
|
||||||
|
documentation for
|
||||||
|
[the login endpoint](https://matrix.org/docs/spec/client_server/r0.6.1#login)
|
||||||
|
is still valid (and the mechanism works similarly to the
|
||||||
|
[token based login](https://matrix.org/docs/spec/client_server/r0.6.1#token-based)).
|
||||||
|
|
||||||
|
To log in using a JSON Web Token, clients should submit a `/login` request as
|
||||||
|
follows:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "org.matrix.login.jwt",
|
||||||
|
"token": "<jwt>"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that the login type of `m.login.jwt` is supported, but is deprecated. This
|
||||||
|
will be removed in a future version of Synapse.
|
||||||
|
|
||||||
|
The `token` field should include the JSON web token with the following claims:
|
||||||
|
|
||||||
|
* The `sub` (subject) claim is required and should encode the local part of the
|
||||||
|
user ID.
|
||||||
|
* The expiration time (`exp`), not before time (`nbf`), and issued at (`iat`)
|
||||||
|
claims are optional, but validated if present.
|
||||||
|
* The issuer (`iss`) claim is optional, but required and validated if configured.
|
||||||
|
* The audience (`aud`) claim is optional, but required and validated if configured.
|
||||||
|
Providing the audience claim when not configured will cause validation to fail.
|
||||||
|
|
||||||
|
In the case that the token is not valid, the homeserver must respond with
|
||||||
|
`403 Forbidden` and an error code of `M_FORBIDDEN`.
|
||||||
|
|
||||||
|
As with other login types, there are additional fields (e.g. `device_id` and
|
||||||
|
`initial_device_display_name`) which can be included in the above request.
|
||||||
|
|
||||||
|
## Preparing Synapse
|
||||||
|
|
||||||
|
The JSON Web Token integration in Synapse uses the
|
||||||
|
[`PyJWT`](https://pypi.org/project/pyjwt/) library, which must be installed
|
||||||
|
as follows:
|
||||||
|
|
||||||
|
* The relevant libraries are included in the Docker images and Debian packages
|
||||||
|
provided by `matrix.org` so no further action is needed.
|
||||||
|
|
||||||
|
* If you installed Synapse into a virtualenv, run `/path/to/env/bin/pip
|
||||||
|
install synapse[pyjwt]` to install the necessary dependencies.
|
||||||
|
|
||||||
|
* For other installation mechanisms, see the documentation provided by the
|
||||||
|
maintainer.
|
||||||
|
|
||||||
|
To enable the JSON web token integration, you should then add an `jwt_config` section
|
||||||
|
to your configuration file (or uncomment the `enabled: true` line in the
|
||||||
|
existing section). See [sample_config.yaml](./sample_config.yaml) for some
|
||||||
|
sample settings.
|
||||||
|
|
||||||
|
## How to test JWT as a developer
|
||||||
|
|
||||||
|
Although JSON Web Tokens are typically generated from an external server, the
|
||||||
|
examples below use [PyJWT](https://pyjwt.readthedocs.io/en/latest/) directly.
|
||||||
|
|
||||||
|
1. Configure Synapse with JWT logins, note that this example uses a pre-shared
|
||||||
|
secret and an algorithm of HS256:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
jwt_config:
|
||||||
|
enabled: true
|
||||||
|
secret: "my-secret-token"
|
||||||
|
algorithm: "HS256"
|
||||||
|
```
|
||||||
|
2. Generate a JSON web token:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ pyjwt --key=my-secret-token --alg=HS256 encode sub=test-user
|
||||||
|
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0LXVzZXIifQ.Ag71GT8v01UO3w80aqRPTeuVPBIBZkYhNTJJ-_-zQIc
|
||||||
|
```
|
||||||
|
3. Query for the login types and ensure `org.matrix.login.jwt` is there:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl http://localhost:8080/_matrix/client/r0/login
|
||||||
|
```
|
||||||
|
4. Login used the generated JSON web token from above:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ curl http://localhost:8082/_matrix/client/r0/login -X POST \
|
||||||
|
--data '{"type":"org.matrix.login.jwt","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0LXVzZXIifQ.Ag71GT8v01UO3w80aqRPTeuVPBIBZkYhNTJJ-_-zQIc"}'
|
||||||
|
{
|
||||||
|
"access_token": "<access token>",
|
||||||
|
"device_id": "ACBDEFGHI",
|
||||||
|
"home_server": "localhost:8080",
|
||||||
|
"user_id": "@test-user:localhost:8480"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You should now be able to use the returned access token to query the client API.
|
||||||
@@ -5,8 +5,45 @@ The "manhole" allows server administrators to access a Python shell on a running
|
|||||||
Synapse installation. This is a very powerful mechanism for administration and
|
Synapse installation. This is a very powerful mechanism for administration and
|
||||||
debugging.
|
debugging.
|
||||||
|
|
||||||
|
**_Security Warning_**
|
||||||
|
|
||||||
|
Note that this will give administrative access to synapse to **all users** with
|
||||||
|
shell access to the server. It should therefore **not** be enabled in
|
||||||
|
environments where untrusted users have shell access.
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
To enable it, first uncomment the `manhole` listener configuration in
|
To enable it, first uncomment the `manhole` listener configuration in
|
||||||
`homeserver.yaml`:
|
`homeserver.yaml`. The configuration is slightly different if you're using docker.
|
||||||
|
|
||||||
|
#### Docker config
|
||||||
|
|
||||||
|
If you are using Docker, set `bind_addresses` to `['0.0.0.0']` as shown:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
listeners:
|
||||||
|
- port: 9000
|
||||||
|
bind_addresses: ['0.0.0.0']
|
||||||
|
type: manhole
|
||||||
|
```
|
||||||
|
|
||||||
|
When using `docker run` to start the server, you will then need to change the command to the following to include the
|
||||||
|
`manhole` port forwarding. The `-p 127.0.0.1:9000:9000` below is important: it
|
||||||
|
ensures that access to the `manhole` is only possible for local users.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d --name synapse \
|
||||||
|
--mount type=volume,src=synapse-data,dst=/data \
|
||||||
|
-p 8008:8008 \
|
||||||
|
-p 127.0.0.1:9000:9000 \
|
||||||
|
matrixdotorg/synapse:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Native config
|
||||||
|
|
||||||
|
If you are not using docker, set `bind_addresses` to `['::1', '127.0.0.1']` as shown.
|
||||||
|
The `bind_addresses` in the example below is important: it ensures that access to the
|
||||||
|
`manhole` is only possible for local users).
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
listeners:
|
listeners:
|
||||||
@@ -15,12 +52,7 @@ listeners:
|
|||||||
type: manhole
|
type: manhole
|
||||||
```
|
```
|
||||||
|
|
||||||
(`bind_addresses` in the above is important: it ensures that access to the
|
#### Accessing synapse manhole
|
||||||
manhole is only possible for local users).
|
|
||||||
|
|
||||||
Note that this will give administrative access to synapse to **all users** with
|
|
||||||
shell access to the server. It should therefore **not** be enabled in
|
|
||||||
environments where untrusted users have shell access.
|
|
||||||
|
|
||||||
Then restart synapse, and point an ssh client at port 9000 on localhost, using
|
Then restart synapse, and point an ssh client at port 9000 on localhost, using
|
||||||
the username `matrix`:
|
the username `matrix`:
|
||||||
@@ -35,9 +67,12 @@ This gives a Python REPL in which `hs` gives access to the
|
|||||||
`synapse.server.HomeServer` object - which in turn gives access to many other
|
`synapse.server.HomeServer` object - which in turn gives access to many other
|
||||||
parts of the process.
|
parts of the process.
|
||||||
|
|
||||||
|
Note that any call which returns a coroutine will need to be wrapped in `ensureDeferred`.
|
||||||
|
|
||||||
As a simple example, retrieving an event from the database:
|
As a simple example, retrieving an event from the database:
|
||||||
|
|
||||||
```
|
```pycon
|
||||||
>>> hs.get_datastore().get_event('$1416420717069yeQaw:matrix.org')
|
>>> from twisted.internet import defer
|
||||||
|
>>> defer.ensureDeferred(hs.get_datastore().get_event('$1416420717069yeQaw:matrix.org'))
|
||||||
<Deferred at 0x7ff253fc6998 current result: <FrozenEvent event_id='$1416420717069yeQaw:matrix.org', type='m.room.create', state_key=''>>
|
<Deferred at 0x7ff253fc6998 current result: <FrozenEvent event_id='$1416420717069yeQaw:matrix.org', type='m.room.create', state_key=''>>
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -136,24 +136,34 @@ the server's database.
|
|||||||
|
|
||||||
### Lifetime limits
|
### Lifetime limits
|
||||||
|
|
||||||
**Note: this feature is mainly useful within a closed federation or on
|
Server admins can set limits on the values of `max_lifetime` to use when
|
||||||
servers that don't federate, because there currently is no way to
|
purging old events in a room. These limits can be defined as such in the
|
||||||
enforce these limits in an open federation.**
|
`retention` section of the configuration file:
|
||||||
|
|
||||||
Server admins can restrict the values their local users are allowed to
|
|
||||||
use for both `min_lifetime` and `max_lifetime`. These limits can be
|
|
||||||
defined as such in the `retention` section of the configuration file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
allowed_lifetime_min: 1d
|
allowed_lifetime_min: 1d
|
||||||
allowed_lifetime_max: 1y
|
allowed_lifetime_max: 1y
|
||||||
```
|
```
|
||||||
|
|
||||||
Here, `allowed_lifetime_min` is the lowest value a local user can set
|
The limits are considered when running purge jobs. If necessary, the
|
||||||
for both `min_lifetime` and `max_lifetime`, and `allowed_lifetime_max`
|
effective value of `max_lifetime` will be brought between
|
||||||
is the highest value. Both parameters are optional (e.g. setting
|
`allowed_lifetime_min` and `allowed_lifetime_max` (inclusive).
|
||||||
`allowed_lifetime_min` but not `allowed_lifetime_max` only enforces a
|
This means that, if the value of `max_lifetime` defined in the room's state
|
||||||
minimum and no maximum).
|
is lower than `allowed_lifetime_min`, the value of `allowed_lifetime_min`
|
||||||
|
will be used instead. Likewise, if the value of `max_lifetime` is higher
|
||||||
|
than `allowed_lifetime_max`, the value of `allowed_lifetime_max` will be
|
||||||
|
used instead.
|
||||||
|
|
||||||
|
In the example above, we ensure Synapse never deletes events that are less
|
||||||
|
than one day old, and that it always deletes events that are over a year
|
||||||
|
old.
|
||||||
|
|
||||||
|
If a default policy is set, and its `max_lifetime` value is lower than
|
||||||
|
`allowed_lifetime_min` or higher than `allowed_lifetime_max`, the same
|
||||||
|
process applies.
|
||||||
|
|
||||||
|
Both parameters are optional; if one is omitted Synapse won't use it to
|
||||||
|
adjust the effective value of `max_lifetime`.
|
||||||
|
|
||||||
Like other settings in this section, these parameters can be expressed
|
Like other settings in this section, these parameters can be expressed
|
||||||
either as a duration or as a number of milliseconds.
|
either as a duration or as a number of milliseconds.
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
different thread to Synapse. This can make it more resilient to
|
different thread to Synapse. This can make it more resilient to
|
||||||
heavy load meaning metrics cannot be retrieved, and can be exposed
|
heavy load meaning metrics cannot be retrieved, and can be exposed
|
||||||
to just internal networks easier. The served metrics are available
|
to just internal networks easier. The served metrics are available
|
||||||
over HTTP only, and will be available at `/`.
|
over HTTP only, and will be available at `/_synapse/metrics`.
|
||||||
|
|
||||||
Add a new listener to homeserver.yaml:
|
Add a new listener to homeserver.yaml:
|
||||||
|
|
||||||
@@ -60,6 +60,8 @@
|
|||||||
|
|
||||||
1. Restart Prometheus.
|
1. Restart Prometheus.
|
||||||
|
|
||||||
|
1. Consider using the [grafana dashboard](https://github.com/matrix-org/synapse/tree/master/contrib/grafana/) and required [recording rules](https://github.com/matrix-org/synapse/tree/master/contrib/prometheus/)
|
||||||
|
|
||||||
## Monitoring workers
|
## Monitoring workers
|
||||||
|
|
||||||
To monitor a Synapse installation using
|
To monitor a Synapse installation using
|
||||||
|
|||||||
118
docs/openid.md
118
docs/openid.md
@@ -23,6 +23,7 @@ such as [Github][github-idp].
|
|||||||
[auth0]: https://auth0.com/
|
[auth0]: https://auth0.com/
|
||||||
[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
|
||||||
[hydra]: https://www.ory.sh/docs/hydra/
|
[hydra]: https://www.ory.sh/docs/hydra/
|
||||||
[github-idp]: https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps
|
[github-idp]: https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ as follows:
|
|||||||
provided by `matrix.org` so no further action is needed.
|
provided by `matrix.org` so no further action is needed.
|
||||||
|
|
||||||
* If you installed Synapse into a virtualenv, run `/path/to/env/bin/pip
|
* If you installed Synapse into a virtualenv, run `/path/to/env/bin/pip
|
||||||
install synapse[oidc]` to install the necessary dependencies.
|
install matrix-synapse[oidc]` to install the necessary dependencies.
|
||||||
|
|
||||||
* For other installation mechanisms, see the documentation provided by the
|
* For other installation mechanisms, see the documentation provided by the
|
||||||
maintainer.
|
maintainer.
|
||||||
@@ -51,14 +52,39 @@ specific providers.
|
|||||||
|
|
||||||
Here are a few configs for providers that should work with Synapse.
|
Here are a few configs for providers that should work with Synapse.
|
||||||
|
|
||||||
|
### Microsoft Azure Active Directory
|
||||||
|
Azure AD can act as an OpenID Connect Provider. Register a new application under
|
||||||
|
*App registrations* in the Azure AD management console. The RedirectURI for your
|
||||||
|
application should point to your matrix server: `[synapse public baseurl]/_synapse/oidc/callback`
|
||||||
|
|
||||||
|
Go to *Certificates & secrets* and register a new client secret. Make note of your
|
||||||
|
Directory (tenant) ID as it will be used in the Azure links.
|
||||||
|
Edit your Synapse config file and change the `oidc_config` section:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
oidc_config:
|
||||||
|
enabled: true
|
||||||
|
issuer: "https://login.microsoftonline.com/<tenant id>/v2.0"
|
||||||
|
client_id: "<client id>"
|
||||||
|
client_secret: "<client secret>"
|
||||||
|
scopes: ["openid", "profile"]
|
||||||
|
authorization_endpoint: "https://login.microsoftonline.com/<tenant id>/oauth2/v2.0/authorize"
|
||||||
|
token_endpoint: "https://login.microsoftonline.com/<tenant id>/oauth2/v2.0/token"
|
||||||
|
userinfo_endpoint: "https://graph.microsoft.com/oidc/userinfo"
|
||||||
|
|
||||||
|
user_mapping_provider:
|
||||||
|
config:
|
||||||
|
localpart_template: "{{ user.preferred_username.split('@')[0] }}"
|
||||||
|
display_name_template: "{{ user.name }}"
|
||||||
|
```
|
||||||
|
|
||||||
### [Dex][dex-idp]
|
### [Dex][dex-idp]
|
||||||
|
|
||||||
[Dex][dex-idp] is a simple, open-source, certified OpenID Connect Provider.
|
[Dex][dex-idp] is a simple, open-source, certified OpenID Connect Provider.
|
||||||
Although it is designed to help building a full-blown provider with an
|
Although it is designed to help building a full-blown provider with an
|
||||||
external database, it can be configured with static passwords in a config file.
|
external database, it can be configured with static passwords in a config file.
|
||||||
|
|
||||||
Follow the [Getting Started
|
Follow the [Getting Started guide](https://dexidp.io/docs/getting-started/)
|
||||||
guide](https://github.com/dexidp/dex/blob/master/Documentation/getting-started.md)
|
|
||||||
to install Dex.
|
to install Dex.
|
||||||
|
|
||||||
Edit `examples/config-dev.yaml` config file from the Dex repo to add a client:
|
Edit `examples/config-dev.yaml` config file from the Dex repo to add a client:
|
||||||
@@ -72,7 +98,7 @@ staticClients:
|
|||||||
name: 'Synapse'
|
name: 'Synapse'
|
||||||
```
|
```
|
||||||
|
|
||||||
Run with `dex serve examples/config-dex.yaml`.
|
Run with `dex serve examples/config-dev.yaml`.
|
||||||
|
|
||||||
Synapse config:
|
Synapse config:
|
||||||
|
|
||||||
@@ -89,7 +115,50 @@ oidc_config:
|
|||||||
localpart_template: "{{ user.name }}"
|
localpart_template: "{{ user.name }}"
|
||||||
display_name_template: "{{ user.name|capitalize }}"
|
display_name_template: "{{ user.name|capitalize }}"
|
||||||
```
|
```
|
||||||
|
### [Keycloak][keycloak-idp]
|
||||||
|
|
||||||
|
[Keycloak][keycloak-idp] is an opensource IdP maintained by Red Hat.
|
||||||
|
|
||||||
|
Follow the [Getting Started Guide](https://www.keycloak.org/getting-started) to install Keycloak and set up a realm.
|
||||||
|
|
||||||
|
1. Click `Clients` in the sidebar and click `Create`
|
||||||
|
|
||||||
|
2. Fill in the fields as below:
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
|-----------|-----------|
|
||||||
|
| Client ID | `synapse` |
|
||||||
|
| Client Protocol | `openid-connect` |
|
||||||
|
|
||||||
|
3. Click `Save`
|
||||||
|
4. Fill in the fields as below:
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
|-----------|-----------|
|
||||||
|
| Client ID | `synapse` |
|
||||||
|
| Enabled | `On` |
|
||||||
|
| Client Protocol | `openid-connect` |
|
||||||
|
| Access Type | `confidential` |
|
||||||
|
| Valid Redirect URIs | `[synapse public baseurl]/_synapse/oidc/callback` |
|
||||||
|
|
||||||
|
5. Click `Save`
|
||||||
|
6. On the Credentials tab, update the fields:
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
|-------|-------|
|
||||||
|
| Client Authenticator | `Client ID and Secret` |
|
||||||
|
|
||||||
|
7. Click `Regenerate Secret`
|
||||||
|
8. Copy Secret
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
oidc_config:
|
||||||
|
enabled: true
|
||||||
|
issuer: "https://127.0.0.1:8443/auth/realms/{realm_name}"
|
||||||
|
client_id: "synapse"
|
||||||
|
client_secret: "copy secret generated from above"
|
||||||
|
scopes: ["openid", "profile"]
|
||||||
|
```
|
||||||
### [Auth0][auth0]
|
### [Auth0][auth0]
|
||||||
|
|
||||||
1. Create a regular web application for Synapse
|
1. Create a regular web application for Synapse
|
||||||
@@ -194,13 +263,36 @@ Synapse config:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
oidc_config:
|
oidc_config:
|
||||||
enabled: true
|
enabled: true
|
||||||
issuer: "https://id.twitch.tv/oauth2/"
|
issuer: "https://id.twitch.tv/oauth2/"
|
||||||
client_id: "your-client-id" # TO BE FILLED
|
client_id: "your-client-id" # TO BE FILLED
|
||||||
client_secret: "your-client-secret" # TO BE FILLED
|
client_secret: "your-client-secret" # TO BE FILLED
|
||||||
client_auth_method: "client_secret_post"
|
client_auth_method: "client_secret_post"
|
||||||
user_mapping_provider:
|
user_mapping_provider:
|
||||||
config:
|
config:
|
||||||
localpart_template: '{{ user.preferred_username }}'
|
localpart_template: "{{ user.preferred_username }}"
|
||||||
display_name_template: '{{ user.name }}'
|
display_name_template: "{{ user.name }}"
|
||||||
|
```
|
||||||
|
|
||||||
|
### GitLab
|
||||||
|
|
||||||
|
1. Create a [new application](https://gitlab.com/profile/applications).
|
||||||
|
2. Add the `read_user` and `openid` scopes.
|
||||||
|
3. Add this Callback URL: `[synapse public baseurl]/_synapse/oidc/callback`
|
||||||
|
|
||||||
|
Synapse config:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
oidc_config:
|
||||||
|
enabled: true
|
||||||
|
issuer: "https://gitlab.com/"
|
||||||
|
client_id: "your-client-id" # TO BE FILLED
|
||||||
|
client_secret: "your-client-secret" # TO BE FILLED
|
||||||
|
client_auth_method: "client_secret_post"
|
||||||
|
scopes: ["openid", "read_user"]
|
||||||
|
user_profile_method: "userinfo_endpoint"
|
||||||
|
user_mapping_provider:
|
||||||
|
config:
|
||||||
|
localpart_template: '{{ user.nickname }}'
|
||||||
|
display_name_template: '{{ user.name }}'
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -14,107 +14,109 @@ password auth provider module implementations:
|
|||||||
|
|
||||||
* [matrix-synapse-ldap3](https://github.com/matrix-org/matrix-synapse-ldap3/)
|
* [matrix-synapse-ldap3](https://github.com/matrix-org/matrix-synapse-ldap3/)
|
||||||
* [matrix-synapse-shared-secret-auth](https://github.com/devture/matrix-synapse-shared-secret-auth)
|
* [matrix-synapse-shared-secret-auth](https://github.com/devture/matrix-synapse-shared-secret-auth)
|
||||||
|
* [matrix-synapse-rest-password-provider](https://github.com/ma1uta/matrix-synapse-rest-password-provider)
|
||||||
|
|
||||||
## Required methods
|
## Required methods
|
||||||
|
|
||||||
Password auth provider classes must provide the following methods:
|
Password auth provider classes must provide the following methods:
|
||||||
|
|
||||||
*class* `SomeProvider.parse_config`(*config*)
|
* `parse_config(config)`
|
||||||
|
This method is passed the `config` object for this module from the
|
||||||
|
homeserver configuration file.
|
||||||
|
|
||||||
> This method is passed the `config` object for this module from the
|
It should perform any appropriate sanity checks on the provided
|
||||||
> homeserver configuration file.
|
configuration, and return an object which is then passed into
|
||||||
>
|
|
||||||
> It should perform any appropriate sanity checks on the provided
|
|
||||||
> configuration, and return an object which is then passed into
|
|
||||||
> `__init__`.
|
|
||||||
|
|
||||||
*class* `SomeProvider`(*config*, *account_handler*)
|
This method should have the `@staticmethod` decoration.
|
||||||
|
|
||||||
> The constructor is passed the config object returned by
|
* `__init__(self, config, account_handler)`
|
||||||
> `parse_config`, and a `synapse.module_api.ModuleApi` object which
|
|
||||||
> allows the password provider to check if accounts exist and/or create
|
The constructor is passed the config object returned by
|
||||||
> new ones.
|
`parse_config`, and a `synapse.module_api.ModuleApi` object which
|
||||||
|
allows the password provider to check if accounts exist and/or create
|
||||||
|
new ones.
|
||||||
|
|
||||||
## Optional methods
|
## Optional methods
|
||||||
|
|
||||||
Password auth provider classes may optionally provide the following
|
Password auth provider classes may optionally provide the following methods:
|
||||||
methods.
|
|
||||||
|
|
||||||
*class* `SomeProvider.get_db_schema_files`()
|
* `get_db_schema_files(self)`
|
||||||
|
|
||||||
> This method, if implemented, should return an Iterable of
|
This method, if implemented, should return an Iterable of
|
||||||
> `(name, stream)` pairs of database schema files. Each file is applied
|
`(name, stream)` pairs of database schema files. Each file is applied
|
||||||
> in turn at initialisation, and a record is then made in the database
|
in turn at initialisation, and a record is then made in the database
|
||||||
> so that it is not re-applied on the next start.
|
so that it is not re-applied on the next start.
|
||||||
|
|
||||||
`someprovider.get_supported_login_types`()
|
* `get_supported_login_types(self)`
|
||||||
|
|
||||||
> This method, if implemented, should return a `dict` mapping from a
|
This method, if implemented, should return a `dict` mapping from a
|
||||||
> login type identifier (such as `m.login.password`) to an iterable
|
login type identifier (such as `m.login.password`) to an iterable
|
||||||
> giving the fields which must be provided by the user in the submission
|
giving the fields which must be provided by the user in the submission
|
||||||
> to the `/login` api. These fields are passed in the `login_dict`
|
to [the `/login` API](https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-login).
|
||||||
> dictionary to `check_auth`.
|
These fields are passed in the `login_dict` dictionary to `check_auth`.
|
||||||
>
|
|
||||||
> For example, if a password auth provider wants to implement a custom
|
|
||||||
> login type of `com.example.custom_login`, where the client is expected
|
|
||||||
> to pass the fields `secret1` and `secret2`, the provider should
|
|
||||||
> implement this method and return the following dict:
|
|
||||||
>
|
|
||||||
> {"com.example.custom_login": ("secret1", "secret2")}
|
|
||||||
|
|
||||||
`someprovider.check_auth`(*username*, *login_type*, *login_dict*)
|
For example, if a password auth provider wants to implement a custom
|
||||||
|
login type of `com.example.custom_login`, where the client is expected
|
||||||
|
to pass the fields `secret1` and `secret2`, the provider should
|
||||||
|
implement this method and return the following dict:
|
||||||
|
|
||||||
> This method is the one that does the real work. If implemented, it
|
```python
|
||||||
> will be called for each login attempt where the login type matches one
|
{"com.example.custom_login": ("secret1", "secret2")}
|
||||||
> of the keys returned by `get_supported_login_types`.
|
```
|
||||||
>
|
|
||||||
> It is passed the (possibly UNqualified) `user` provided by the client,
|
|
||||||
> the login type, and a dictionary of login secrets passed by the
|
|
||||||
> client.
|
|
||||||
>
|
|
||||||
> The method should return a Twisted `Deferred` object, which resolves
|
|
||||||
> to the canonical `@localpart:domain` user id if authentication is
|
|
||||||
> successful, and `None` if not.
|
|
||||||
>
|
|
||||||
> Alternatively, the `Deferred` can resolve to a `(str, func)` tuple, in
|
|
||||||
> which case the second field is a callback which will be called with
|
|
||||||
> the result from the `/login` call (including `access_token`,
|
|
||||||
> `device_id`, etc.)
|
|
||||||
|
|
||||||
`someprovider.check_3pid_auth`(*medium*, *address*, *password*)
|
* `check_auth(self, username, login_type, login_dict)`
|
||||||
|
|
||||||
> This method, if implemented, is called when a user attempts to
|
This method does the real work. If implemented, it
|
||||||
> register or log in with a third party identifier, such as email. It is
|
will be called for each login attempt where the login type matches one
|
||||||
> passed the medium (ex. "email"), an address (ex.
|
of the keys returned by `get_supported_login_types`.
|
||||||
> "<jdoe@example.com>") and the user's password.
|
|
||||||
>
|
|
||||||
> The method should return a Twisted `Deferred` object, which resolves
|
|
||||||
> to a `str` containing the user's (canonical) User ID if
|
|
||||||
> authentication was successful, and `None` if not.
|
|
||||||
>
|
|
||||||
> As with `check_auth`, the `Deferred` may alternatively resolve to a
|
|
||||||
> `(user_id, callback)` tuple.
|
|
||||||
|
|
||||||
`someprovider.check_password`(*user_id*, *password*)
|
It is passed the (possibly unqualified) `user` field provided by the client,
|
||||||
|
the login type, and a dictionary of login secrets passed by the
|
||||||
|
client.
|
||||||
|
|
||||||
> This method provides a simpler interface than
|
The method should return an `Awaitable` object, which resolves
|
||||||
> `get_supported_login_types` and `check_auth` for password auth
|
to the canonical `@localpart:domain` user ID if authentication is
|
||||||
> providers that just want to provide a mechanism for validating
|
successful, and `None` if not.
|
||||||
> `m.login.password` logins.
|
|
||||||
>
|
|
||||||
> Iif implemented, it will be called to check logins with an
|
|
||||||
> `m.login.password` login type. It is passed a qualified
|
|
||||||
> `@localpart:domain` user id, and the password provided by the user.
|
|
||||||
>
|
|
||||||
> The method should return a Twisted `Deferred` object, which resolves
|
|
||||||
> to `True` if authentication is successful, and `False` if not.
|
|
||||||
|
|
||||||
`someprovider.on_logged_out`(*user_id*, *device_id*, *access_token*)
|
Alternatively, the `Awaitable` can resolve to a `(str, func)` tuple, in
|
||||||
|
which case the second field is a callback which will be called with
|
||||||
|
the result from the `/login` call (including `access_token`,
|
||||||
|
`device_id`, etc.)
|
||||||
|
|
||||||
> This method, if implemented, is called when a user logs out. It is
|
* `check_3pid_auth(self, medium, address, password)`
|
||||||
> passed the qualified user ID, the ID of the deactivated device (if
|
|
||||||
> any: access tokens are occasionally created without an associated
|
This method, if implemented, is called when a user attempts to
|
||||||
> device ID), and the (now deactivated) access token.
|
register or log in with a third party identifier, such as email. It is
|
||||||
>
|
passed the medium (ex. "email"), an address (ex.
|
||||||
> It may return a Twisted `Deferred` object; the logout request will
|
"<jdoe@example.com>") and the user's password.
|
||||||
> wait for the deferred to complete but the result is ignored.
|
|
||||||
|
The method should return an `Awaitable` object, which resolves
|
||||||
|
to a `str` containing the user's (canonical) User id if
|
||||||
|
authentication was successful, and `None` if not.
|
||||||
|
|
||||||
|
As with `check_auth`, the `Awaitable` may alternatively resolve to a
|
||||||
|
`(user_id, callback)` tuple.
|
||||||
|
|
||||||
|
* `check_password(self, user_id, password)`
|
||||||
|
|
||||||
|
This method provides a simpler interface than
|
||||||
|
`get_supported_login_types` and `check_auth` for password auth
|
||||||
|
providers that just want to provide a mechanism for validating
|
||||||
|
`m.login.password` logins.
|
||||||
|
|
||||||
|
If implemented, it will be called to check logins with an
|
||||||
|
`m.login.password` login type. It is passed a qualified
|
||||||
|
`@localpart:domain` user id, and the password provided by the user.
|
||||||
|
|
||||||
|
The method should return an `Awaitable` object, which resolves
|
||||||
|
to `True` if authentication is successful, and `False` if not.
|
||||||
|
|
||||||
|
* `on_logged_out(self, user_id, device_id, access_token)`
|
||||||
|
|
||||||
|
This method, if implemented, is called when a user logs out. 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.
|
||||||
|
|
||||||
|
It may return an `Awaitable` object; the logout request will
|
||||||
|
wait for the `Awaitable` to complete, but the result is ignored.
|
||||||
|
|||||||
@@ -106,6 +106,17 @@ Note that the above may fail with an error about duplicate rows if corruption
|
|||||||
has already occurred, and such duplicate rows will need to be manually removed.
|
has already occurred, and such duplicate rows will need to be manually removed.
|
||||||
|
|
||||||
|
|
||||||
|
## Fixing inconsistent sequences error
|
||||||
|
|
||||||
|
Synapse uses Postgres sequences to generate IDs for various tables. A sequence
|
||||||
|
and associated table can get out of sync if, for example, Synapse has been
|
||||||
|
downgraded and then upgraded again.
|
||||||
|
|
||||||
|
To fix the issue shut down Synapse (including any and all workers) and run the
|
||||||
|
SQL command included in the error message. Once done Synapse should start
|
||||||
|
successfully.
|
||||||
|
|
||||||
|
|
||||||
## Tuning Postgres
|
## Tuning Postgres
|
||||||
|
|
||||||
The default settings should be fine for most deployments. For larger
|
The default settings should be fine for most deployments. For larger
|
||||||
@@ -188,6 +199,9 @@ to do step 2.
|
|||||||
|
|
||||||
It is safe to at any time kill the port script and restart it.
|
It is safe to at any time kill the port script and restart it.
|
||||||
|
|
||||||
|
Note that the database may take up significantly more (25% - 100% more)
|
||||||
|
space on disk after porting to Postgres.
|
||||||
|
|
||||||
### Using the port script
|
### Using the port script
|
||||||
|
|
||||||
Firstly, shut down the currently running synapse server and copy its
|
Firstly, shut down the currently running synapse server and copy its
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
It is recommended to put a reverse proxy such as
|
It is recommended to put a reverse proxy such as
|
||||||
[nginx](https://nginx.org/en/docs/http/ngx_http_proxy_module.html),
|
[nginx](https://nginx.org/en/docs/http/ngx_http_proxy_module.html),
|
||||||
[Apache](https://httpd.apache.org/docs/current/mod/mod_proxy_http.html),
|
[Apache](https://httpd.apache.org/docs/current/mod/mod_proxy_http.html),
|
||||||
[Caddy](https://caddyserver.com/docs/proxy) or
|
[Caddy](https://caddyserver.com/docs/quick-starts/reverse-proxy) or
|
||||||
[HAProxy](https://www.haproxy.org/) in front of Synapse. One advantage
|
[HAProxy](https://www.haproxy.org/) in front of Synapse. One advantage
|
||||||
of doing so is that it means that you can expose the default https port
|
of doing so is that it means that you can expose the default https port
|
||||||
(443) to Matrix clients without needing to run Synapse with root
|
(443) to Matrix clients without needing to run Synapse with root
|
||||||
@@ -11,7 +11,7 @@ privileges.
|
|||||||
|
|
||||||
**NOTE**: Your reverse proxy must not `canonicalise` or `normalise`
|
**NOTE**: Your reverse proxy must not `canonicalise` or `normalise`
|
||||||
the requested URI in any way (for example, by decoding `%xx` escapes).
|
the requested URI in any way (for example, by decoding `%xx` escapes).
|
||||||
Beware that Apache *will* canonicalise URIs unless you specifify
|
Beware that Apache *will* canonicalise URIs unless you specify
|
||||||
`nocanon`.
|
`nocanon`.
|
||||||
|
|
||||||
When setting up a reverse proxy, remember that Matrix clients and other
|
When setting up a reverse proxy, remember that Matrix clients and other
|
||||||
@@ -23,6 +23,10 @@ specification](https://matrix.org/docs/spec/server_server/latest#resolving-serve
|
|||||||
for more details of the algorithm used for federation connections, and
|
for more details of the algorithm used for federation connections, and
|
||||||
[delegate.md](<delegate.md>) for instructions on setting up delegation.
|
[delegate.md](<delegate.md>) for instructions on setting up delegation.
|
||||||
|
|
||||||
|
Endpoints that are part of the standardised Matrix specification are
|
||||||
|
located under `/_matrix`, whereas endpoints specific to Synapse are
|
||||||
|
located under `/_synapse/client`.
|
||||||
|
|
||||||
Let's assume that we expect clients to connect to our server at
|
Let's assume that we expect clients to connect to our server at
|
||||||
`https://matrix.example.com`, and other servers to connect at
|
`https://matrix.example.com`, and other servers to connect at
|
||||||
`https://example.com:8448`. The following sections detail the configuration of
|
`https://example.com:8448`. The following sections detail the configuration of
|
||||||
@@ -38,25 +42,19 @@ the reverse proxy and the homeserver.
|
|||||||
server {
|
server {
|
||||||
listen 443 ssl;
|
listen 443 ssl;
|
||||||
listen [::]:443 ssl;
|
listen [::]:443 ssl;
|
||||||
|
|
||||||
|
# For the federation port
|
||||||
|
listen 8448 ssl default_server;
|
||||||
|
listen [::]:8448 ssl default_server;
|
||||||
|
|
||||||
server_name matrix.example.com;
|
server_name matrix.example.com;
|
||||||
|
|
||||||
location /_matrix {
|
location ~* ^(\/_matrix|\/_synapse\/client) {
|
||||||
proxy_pass http://localhost:8008;
|
proxy_pass http://localhost:8008;
|
||||||
proxy_set_header X-Forwarded-For $remote_addr;
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||||||
# Nginx by default only allows file uploads up to 1M in size
|
# Nginx by default only allows file uploads up to 1M in size
|
||||||
# Increase client_max_body_size to match max_upload_size defined in homeserver.yaml
|
# Increase client_max_body_size to match max_upload_size defined in homeserver.yaml
|
||||||
client_max_body_size 10M;
|
client_max_body_size 50M;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 8448 ssl default_server;
|
|
||||||
listen [::]:8448 ssl default_server;
|
|
||||||
server_name example.com;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
proxy_pass http://localhost:8008;
|
|
||||||
proxy_set_header X-Forwarded-For $remote_addr;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -71,6 +69,10 @@ matrix.example.com {
|
|||||||
proxy /_matrix http://localhost:8008 {
|
proxy /_matrix http://localhost:8008 {
|
||||||
transparent
|
transparent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proxy /_synapse/client http://localhost:8008 {
|
||||||
|
transparent
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
example.com:8448 {
|
example.com:8448 {
|
||||||
@@ -85,6 +87,7 @@ example.com:8448 {
|
|||||||
```
|
```
|
||||||
matrix.example.com {
|
matrix.example.com {
|
||||||
reverse_proxy /_matrix/* http://localhost:8008
|
reverse_proxy /_matrix/* http://localhost:8008
|
||||||
|
reverse_proxy /_synapse/client/* http://localhost:8008
|
||||||
}
|
}
|
||||||
|
|
||||||
example.com:8448 {
|
example.com:8448 {
|
||||||
@@ -102,6 +105,8 @@ example.com:8448 {
|
|||||||
AllowEncodedSlashes NoDecode
|
AllowEncodedSlashes NoDecode
|
||||||
ProxyPass /_matrix http://127.0.0.1:8008/_matrix nocanon
|
ProxyPass /_matrix http://127.0.0.1:8008/_matrix nocanon
|
||||||
ProxyPassReverse /_matrix http://127.0.0.1:8008/_matrix
|
ProxyPassReverse /_matrix http://127.0.0.1:8008/_matrix
|
||||||
|
ProxyPass /_synapse/client http://127.0.0.1:8008/_synapse/client nocanon
|
||||||
|
ProxyPassReverse /_synapse/client http://127.0.0.1:8008/_synapse/client
|
||||||
</VirtualHost>
|
</VirtualHost>
|
||||||
|
|
||||||
<VirtualHost *:8448>
|
<VirtualHost *:8448>
|
||||||
@@ -116,6 +121,14 @@ example.com:8448 {
|
|||||||
|
|
||||||
**NOTE**: ensure the `nocanon` options are included.
|
**NOTE**: ensure the `nocanon` options are included.
|
||||||
|
|
||||||
|
**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:
|
||||||
|
|
||||||
|
```
|
||||||
|
<IfModule security2_module>
|
||||||
|
SecRuleEngine off
|
||||||
|
</IfModule>
|
||||||
|
```
|
||||||
|
|
||||||
### HAProxy
|
### HAProxy
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -125,6 +138,7 @@ frontend https
|
|||||||
# Matrix client traffic
|
# Matrix client traffic
|
||||||
acl matrix-host hdr(host) -i matrix.example.com
|
acl matrix-host hdr(host) -i matrix.example.com
|
||||||
acl matrix-path path_beg /_matrix
|
acl matrix-path path_beg /_matrix
|
||||||
|
acl matrix-path path_beg /_synapse/client
|
||||||
|
|
||||||
use_backend matrix if matrix-host matrix-path
|
use_backend matrix if matrix-host matrix-path
|
||||||
|
|
||||||
@@ -145,3 +159,17 @@ client IP addresses are recorded correctly.
|
|||||||
Having done so, you can then use `https://matrix.example.com` (instead
|
Having done so, you can then use `https://matrix.example.com` (instead
|
||||||
of `https://matrix.example.com:8448`) as the "Custom server" when
|
of `https://matrix.example.com:8448`) as the "Custom server" when
|
||||||
connecting to Synapse from a client.
|
connecting to Synapse from a client.
|
||||||
|
|
||||||
|
|
||||||
|
## Health check endpoint
|
||||||
|
|
||||||
|
Synapse exposes a health check endpoint for use by reverse proxies.
|
||||||
|
Each configured HTTP listener has a `/health` endpoint which always returns
|
||||||
|
200 OK (and doesn't get logged).
|
||||||
|
|
||||||
|
## Synapse administration endpoints
|
||||||
|
|
||||||
|
Endpoints for administering your Synapse instance are placed under
|
||||||
|
`/_synapse/admin`. These require authentication through an access token of an
|
||||||
|
admin user. However as access to these endpoints grants the caller a lot of power,
|
||||||
|
we do not recommend exposing them to the public internet without good reason.
|
||||||
|
|||||||
@@ -10,6 +10,17 @@
|
|||||||
# homeserver.yaml. Instead, if you are starting from scratch, please generate
|
# homeserver.yaml. Instead, if you are starting from scratch, please generate
|
||||||
# a fresh config using Synapse by following the instructions in INSTALL.md.
|
# a fresh config using Synapse by following the instructions in INSTALL.md.
|
||||||
|
|
||||||
|
# Configuration options that take a time period can be set using a number
|
||||||
|
# followed by a letter. Letters have the following meanings:
|
||||||
|
# s = second
|
||||||
|
# m = minute
|
||||||
|
# h = hour
|
||||||
|
# d = day
|
||||||
|
# w = week
|
||||||
|
# y = year
|
||||||
|
# For example, setting redaction_retention_period: 5m would remove redacted
|
||||||
|
# messages from the database after 5 minutes, rather than 5 months.
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# Configuration file for Synapse.
|
# Configuration file for Synapse.
|
||||||
@@ -22,10 +33,23 @@
|
|||||||
|
|
||||||
## Server ##
|
## Server ##
|
||||||
|
|
||||||
# The domain name of the server, with optional explicit port.
|
# The public-facing domain of the server
|
||||||
# This is used by remote servers to connect to this server,
|
#
|
||||||
# e.g. matrix.org, localhost:8080, etc.
|
# The server_name name will appear at the end of usernames and room addresses
|
||||||
# This is also the last part of your UserID.
|
# created on this server. For example if the server_name was example.com,
|
||||||
|
# usernames on this server would be in the format @user:example.com
|
||||||
|
#
|
||||||
|
# In most cases you should avoid using a matrix specific subdomain such as
|
||||||
|
# matrix.example.com or synapse.example.com as the server_name for the same
|
||||||
|
# reasons you wouldn't use user@email.example.com as your email address.
|
||||||
|
# See https://github.com/matrix-org/synapse/blob/master/docs/delegate.md
|
||||||
|
# for information on how to host Synapse on a subdomain while preserving
|
||||||
|
# a clean server_name.
|
||||||
|
#
|
||||||
|
# The server_name cannot be changed later so it is important to
|
||||||
|
# configure this correctly before you start Synapse. It should be all
|
||||||
|
# lowercase and may contain an explicit port.
|
||||||
|
# Examples: matrix.org, localhost:8080
|
||||||
#
|
#
|
||||||
server_name: "SERVERNAME"
|
server_name: "SERVERNAME"
|
||||||
|
|
||||||
@@ -95,14 +119,16 @@ pid_file: DATADIR/homeserver.pid
|
|||||||
# For example, for room version 1, default_room_version should be set
|
# For example, for room version 1, default_room_version should be set
|
||||||
# to "1".
|
# to "1".
|
||||||
#
|
#
|
||||||
#default_room_version: "5"
|
#default_room_version: "6"
|
||||||
|
|
||||||
# The GC threshold parameters to pass to `gc.set_threshold`, if defined
|
# The GC threshold parameters to pass to `gc.set_threshold`, if defined
|
||||||
#
|
#
|
||||||
#gc_thresholds: [700, 10, 10]
|
#gc_thresholds: [700, 10, 10]
|
||||||
|
|
||||||
# Set the limit on the returned events in the timeline in the get
|
# Set the limit on the returned events in the timeline in the get
|
||||||
# and sync operations. The default value is -1, means no upper limit.
|
# and sync operations. The default value is 100. -1 means no upper limit.
|
||||||
|
#
|
||||||
|
# Uncomment the following to increase the limit to 5000.
|
||||||
#
|
#
|
||||||
#filter_timeline_limit: 5000
|
#filter_timeline_limit: 5000
|
||||||
|
|
||||||
@@ -118,38 +144,6 @@ pid_file: DATADIR/homeserver.pid
|
|||||||
#
|
#
|
||||||
#enable_search: false
|
#enable_search: false
|
||||||
|
|
||||||
# Restrict federation to the following whitelist of domains.
|
|
||||||
# N.B. we recommend also firewalling your federation listener to limit
|
|
||||||
# inbound federation traffic as early as possible, rather than relying
|
|
||||||
# purely on this application-layer restriction. If not specified, the
|
|
||||||
# default is to whitelist everything.
|
|
||||||
#
|
|
||||||
#federation_domain_whitelist:
|
|
||||||
# - lon.example.com
|
|
||||||
# - nyc.example.com
|
|
||||||
# - syd.example.com
|
|
||||||
|
|
||||||
# Prevent federation requests from being sent to the following
|
|
||||||
# blacklist IP address CIDR ranges. If this option is not specified, or
|
|
||||||
# specified with an empty list, no ip range blacklist will be enforced.
|
|
||||||
#
|
|
||||||
# As of Synapse v1.4.0 this option also affects any outbound requests to identity
|
|
||||||
# servers provided by user input.
|
|
||||||
#
|
|
||||||
# (0.0.0.0 and :: are always blacklisted, whether or not they are explicitly
|
|
||||||
# listed here, since they correspond to unroutable addresses.)
|
|
||||||
#
|
|
||||||
federation_ip_range_blacklist:
|
|
||||||
- '127.0.0.0/8'
|
|
||||||
- '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'
|
|
||||||
- '::1/128'
|
|
||||||
- 'fe80::/64'
|
|
||||||
- 'fc00::/7'
|
|
||||||
|
|
||||||
# List of ports that Synapse should listen on, their purpose and their
|
# List of ports that Synapse should listen on, their purpose and their
|
||||||
# configuration.
|
# configuration.
|
||||||
#
|
#
|
||||||
@@ -178,7 +172,7 @@ federation_ip_range_blacklist:
|
|||||||
# names: a list of names of HTTP resources. See below for a list of
|
# names: a list of names of HTTP resources. See below for a list of
|
||||||
# valid resource names.
|
# valid resource names.
|
||||||
#
|
#
|
||||||
# compress: set to true to enable HTTP comression for this resource.
|
# compress: set to true to enable HTTP compression for this resource.
|
||||||
#
|
#
|
||||||
# additional_resources: Only valid for an 'http' listener. A map of
|
# additional_resources: Only valid for an 'http' listener. A map of
|
||||||
# additional endpoints which should be loaded via dynamic modules.
|
# additional endpoints which should be loaded via dynamic modules.
|
||||||
@@ -283,7 +277,7 @@ listeners:
|
|||||||
# number of monthly active users.
|
# number of monthly active users.
|
||||||
#
|
#
|
||||||
# 'limit_usage_by_mau' disables/enables monthly active user blocking. When
|
# 'limit_usage_by_mau' disables/enables monthly active user blocking. When
|
||||||
# anabled and a limit is reached the server returns a 'ResourceLimitError'
|
# enabled and a limit is reached the server returns a 'ResourceLimitError'
|
||||||
# with error type Codes.RESOURCE_LIMIT_EXCEEDED
|
# with error type Codes.RESOURCE_LIMIT_EXCEEDED
|
||||||
#
|
#
|
||||||
# 'max_mau_value' is the hard limit of monthly active users above which
|
# 'max_mau_value' is the hard limit of monthly active users above which
|
||||||
@@ -344,6 +338,10 @@ limit_remote_rooms:
|
|||||||
#
|
#
|
||||||
#complexity_error: "This room is too complex."
|
#complexity_error: "This room is too complex."
|
||||||
|
|
||||||
|
# allow server admins to join complex rooms. Default is false.
|
||||||
|
#
|
||||||
|
#admins_can_join: true
|
||||||
|
|
||||||
# Whether to require a user to be in the room to add an alias to it.
|
# Whether to require a user to be in the room to add an alias to it.
|
||||||
# Defaults to 'true'.
|
# Defaults to 'true'.
|
||||||
#
|
#
|
||||||
@@ -393,11 +391,10 @@ retention:
|
|||||||
# min_lifetime: 1d
|
# min_lifetime: 1d
|
||||||
# max_lifetime: 1y
|
# max_lifetime: 1y
|
||||||
|
|
||||||
# Retention policy limits. If set, a user won't be able to send a
|
# Retention policy limits. If set, and the state of a room contains a
|
||||||
# 'm.room.retention' event which features a 'min_lifetime' or a 'max_lifetime'
|
# 'm.room.retention' event in its state which contains a 'min_lifetime' or a
|
||||||
# that's not within this range. This is especially useful in closed federations,
|
# 'max_lifetime' that's out of these bounds, Synapse will cap the room's policy
|
||||||
# in which server admins can make sure every federating server applies the same
|
# to these limits when running purge jobs.
|
||||||
# rules.
|
|
||||||
#
|
#
|
||||||
#allowed_lifetime_min: 1d
|
#allowed_lifetime_min: 1d
|
||||||
#allowed_lifetime_max: 1y
|
#allowed_lifetime_max: 1y
|
||||||
@@ -423,12 +420,19 @@ retention:
|
|||||||
# (e.g. every 12h), but not want that purge to be performed by a job that's
|
# (e.g. every 12h), but not want that purge to be performed by a job that's
|
||||||
# iterating over every room it knows, which could be heavy on the server.
|
# iterating over every room it knows, which could be heavy on the server.
|
||||||
#
|
#
|
||||||
|
# If any purge job is configured, it is strongly recommended to have at least
|
||||||
|
# a single job with neither 'shortest_max_lifetime' nor 'longest_max_lifetime'
|
||||||
|
# set, or one job without 'shortest_max_lifetime' and one job without
|
||||||
|
# 'longest_max_lifetime' set. Otherwise some rooms might be ignored, even if
|
||||||
|
# 'allowed_lifetime_min' and 'allowed_lifetime_max' are set, because capping a
|
||||||
|
# room's policy to these values is done after the policies are retrieved from
|
||||||
|
# Synapse's database (which is done using the range specified in a purge job's
|
||||||
|
# configuration).
|
||||||
|
#
|
||||||
#purge_jobs:
|
#purge_jobs:
|
||||||
# - shortest_max_lifetime: 1d
|
# - longest_max_lifetime: 3d
|
||||||
# longest_max_lifetime: 3d
|
|
||||||
# interval: 12h
|
# interval: 12h
|
||||||
# - shortest_max_lifetime: 3d
|
# - shortest_max_lifetime: 3d
|
||||||
# longest_max_lifetime: 1y
|
|
||||||
# interval: 1d
|
# interval: 1d
|
||||||
|
|
||||||
# Inhibits the /requestToken endpoints from returning an error that might leak
|
# Inhibits the /requestToken endpoints from returning an error that might leak
|
||||||
@@ -441,6 +445,24 @@ retention:
|
|||||||
#
|
#
|
||||||
#request_token_inhibit_3pid_errors: true
|
#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"]
|
||||||
|
|
||||||
|
|
||||||
## TLS ##
|
## TLS ##
|
||||||
|
|
||||||
@@ -607,6 +629,51 @@ acme:
|
|||||||
#tls_fingerprints: [{"sha256": "<base64_encoded_sha256_fingerprint>"}]
|
#tls_fingerprints: [{"sha256": "<base64_encoded_sha256_fingerprint>"}]
|
||||||
|
|
||||||
|
|
||||||
|
## Federation ##
|
||||||
|
|
||||||
|
# Restrict federation to the following whitelist of domains.
|
||||||
|
# N.B. we recommend also firewalling your federation listener to limit
|
||||||
|
# inbound federation traffic as early as possible, rather than relying
|
||||||
|
# purely on this application-layer restriction. If not specified, the
|
||||||
|
# default is to whitelist everything.
|
||||||
|
#
|
||||||
|
#federation_domain_whitelist:
|
||||||
|
# - lon.example.com
|
||||||
|
# - nyc.example.com
|
||||||
|
# - syd.example.com
|
||||||
|
|
||||||
|
# Prevent federation requests from being sent to the following
|
||||||
|
# blacklist IP address CIDR ranges. If this option is not specified, or
|
||||||
|
# specified with an empty list, no ip range blacklist will be enforced.
|
||||||
|
#
|
||||||
|
# As of Synapse v1.4.0 this option also affects any outbound requests to identity
|
||||||
|
# servers provided by user input.
|
||||||
|
#
|
||||||
|
# (0.0.0.0 and :: are always blacklisted, whether or not they are explicitly
|
||||||
|
# listed here, since they correspond to unroutable addresses.)
|
||||||
|
#
|
||||||
|
federation_ip_range_blacklist:
|
||||||
|
- '127.0.0.0/8'
|
||||||
|
- '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'
|
||||||
|
- '::1/128'
|
||||||
|
- 'fe80::/64'
|
||||||
|
- 'fc00::/7'
|
||||||
|
|
||||||
|
# Report prometheus metrics on the age of PDUs being sent to and received from
|
||||||
|
# the following domains. This can be used to give an idea of "delay" on inbound
|
||||||
|
# and outbound federation, though be aware that any delay can be due to problems
|
||||||
|
# at either end or with the intermediate network.
|
||||||
|
#
|
||||||
|
# By default, no domains are monitored in this way.
|
||||||
|
#
|
||||||
|
#federation_metrics_domains:
|
||||||
|
# - matrix.org
|
||||||
|
# - example.com
|
||||||
|
|
||||||
|
|
||||||
## Caching ##
|
## Caching ##
|
||||||
|
|
||||||
@@ -682,7 +749,7 @@ caches:
|
|||||||
#database:
|
#database:
|
||||||
# name: psycopg2
|
# name: psycopg2
|
||||||
# args:
|
# args:
|
||||||
# user: synapse
|
# user: synapse_user
|
||||||
# password: secretpassword
|
# password: secretpassword
|
||||||
# database: synapse
|
# database: synapse
|
||||||
# host: localhost
|
# host: localhost
|
||||||
@@ -728,6 +795,10 @@ log_config: "CONFDIR/SERVERNAME.log.config"
|
|||||||
# - one for ratelimiting redactions by room admins. If this is not explicitly
|
# - one for ratelimiting redactions by room admins. If this is not explicitly
|
||||||
# set then it uses the same ratelimiting as per rc_message. This is useful
|
# set then it uses the same ratelimiting as per rc_message. This is useful
|
||||||
# to allow room admins to deal with abuse quickly.
|
# to allow room admins to deal with abuse quickly.
|
||||||
|
# - two for ratelimiting number of rooms a user can join, "local" for when
|
||||||
|
# users are joining rooms the server is already in (this is cheap) vs
|
||||||
|
# "remote" for when users are trying to join rooms not on the server (which
|
||||||
|
# can be more expensive)
|
||||||
#
|
#
|
||||||
# The defaults are as shown below.
|
# The defaults are as shown below.
|
||||||
#
|
#
|
||||||
@@ -753,6 +824,14 @@ log_config: "CONFDIR/SERVERNAME.log.config"
|
|||||||
#rc_admin_redaction:
|
#rc_admin_redaction:
|
||||||
# per_second: 1
|
# per_second: 1
|
||||||
# burst_count: 50
|
# burst_count: 50
|
||||||
|
#
|
||||||
|
#rc_joins:
|
||||||
|
# local:
|
||||||
|
# per_second: 0.1
|
||||||
|
# burst_count: 3
|
||||||
|
# remote:
|
||||||
|
# per_second: 0.01
|
||||||
|
# burst_count: 3
|
||||||
|
|
||||||
|
|
||||||
# Ratelimiting settings for incoming federation
|
# Ratelimiting settings for incoming federation
|
||||||
@@ -814,7 +893,7 @@ media_store_path: "DATADIR/media_store"
|
|||||||
|
|
||||||
# The largest allowed upload size in bytes
|
# The largest allowed upload size in bytes
|
||||||
#
|
#
|
||||||
#max_upload_size: 10M
|
#max_upload_size: 50M
|
||||||
|
|
||||||
# Maximum number of pixels that will be thumbnailed
|
# Maximum number of pixels that will be thumbnailed
|
||||||
#
|
#
|
||||||
@@ -1142,24 +1221,6 @@ account_validity:
|
|||||||
#
|
#
|
||||||
#default_identity_server: https://matrix.org
|
#default_identity_server: https://matrix.org
|
||||||
|
|
||||||
# The list of identity servers trusted to verify third party
|
|
||||||
# identifiers by this server.
|
|
||||||
#
|
|
||||||
# Also defines the ID server which will be called when an account is
|
|
||||||
# deactivated (one will be picked arbitrarily).
|
|
||||||
#
|
|
||||||
# Note: This option is deprecated. Since v0.99.4, Synapse has tracked which identity
|
|
||||||
# server a 3PID has been bound to. For 3PIDs bound before then, Synapse runs a
|
|
||||||
# background migration script, informing itself that the identity server all of its
|
|
||||||
# 3PIDs have been bound to is likely one of the below.
|
|
||||||
#
|
|
||||||
# As of Synapse v1.4.0, all other functionality of this option has been deprecated, and
|
|
||||||
# it is now solely used for the purposes of the background migration script, and can be
|
|
||||||
# removed once it has run.
|
|
||||||
#trusted_third_party_id_servers:
|
|
||||||
# - matrix.org
|
|
||||||
# - vector.im
|
|
||||||
|
|
||||||
# Handle threepid (email/phone etc) registration and password resets through a set of
|
# Handle threepid (email/phone etc) registration and password resets through a set of
|
||||||
# *trusted* identity servers. Note that this allows the configured identity server to
|
# *trusted* identity servers. Note that this allows the configured identity server to
|
||||||
# reset passwords for accounts!
|
# reset passwords for accounts!
|
||||||
@@ -1210,7 +1271,11 @@ account_threepid_delegates:
|
|||||||
#enable_3pid_changes: false
|
#enable_3pid_changes: false
|
||||||
|
|
||||||
# Users who register on this homeserver will automatically be joined
|
# Users who register on this homeserver will automatically be joined
|
||||||
# to these rooms
|
# to these rooms.
|
||||||
|
#
|
||||||
|
# By default, any room aliases included in this list will be created
|
||||||
|
# as a publicly joinable room when the first user registers for the
|
||||||
|
# homeserver. This behaviour can be customised with the settings below.
|
||||||
#
|
#
|
||||||
#auto_join_rooms:
|
#auto_join_rooms:
|
||||||
# - "#example:example.com"
|
# - "#example:example.com"
|
||||||
@@ -1218,10 +1283,62 @@ account_threepid_delegates:
|
|||||||
# Where auto_join_rooms are specified, setting this flag ensures that the
|
# Where auto_join_rooms are specified, setting this flag ensures that the
|
||||||
# the rooms exist by creating them when the first user on the
|
# the rooms exist by creating them when the first user on the
|
||||||
# homeserver registers.
|
# homeserver registers.
|
||||||
|
#
|
||||||
|
# By default the auto-created rooms are publicly joinable from any federated
|
||||||
|
# server. Use the autocreate_auto_join_rooms_federated and
|
||||||
|
# autocreate_auto_join_room_preset settings below to customise this behaviour.
|
||||||
|
#
|
||||||
# Setting to false means that if the rooms are not manually created,
|
# Setting to false means that if the rooms are not manually created,
|
||||||
# users cannot be auto-joined since they do not exist.
|
# users cannot be auto-joined since they do not exist.
|
||||||
#
|
#
|
||||||
#autocreate_auto_join_rooms: true
|
# Defaults to true. Uncomment the following line to disable automatically
|
||||||
|
# creating auto-join rooms.
|
||||||
|
#
|
||||||
|
#autocreate_auto_join_rooms: false
|
||||||
|
|
||||||
|
# Whether the auto_join_rooms that are auto-created are available via
|
||||||
|
# federation. Only has an effect if autocreate_auto_join_rooms is true.
|
||||||
|
#
|
||||||
|
# Note that whether a room is federated cannot be modified after
|
||||||
|
# creation.
|
||||||
|
#
|
||||||
|
# Defaults to true: the room will be joinable from other servers.
|
||||||
|
# Uncomment the following to prevent users from other homeservers from
|
||||||
|
# joining these rooms.
|
||||||
|
#
|
||||||
|
#autocreate_auto_join_rooms_federated: false
|
||||||
|
|
||||||
|
# The room preset to use when auto-creating one of auto_join_rooms. Only has an
|
||||||
|
# effect if autocreate_auto_join_rooms is true.
|
||||||
|
#
|
||||||
|
# This can be one of "public_chat", "private_chat", or "trusted_private_chat".
|
||||||
|
# If a value of "private_chat" or "trusted_private_chat" is used then
|
||||||
|
# auto_join_mxid_localpart must also be configured.
|
||||||
|
#
|
||||||
|
# Defaults to "public_chat", meaning that the room is joinable by anyone, including
|
||||||
|
# federated servers if autocreate_auto_join_rooms_federated is true (the default).
|
||||||
|
# Uncomment the following to require an invitation to join these rooms.
|
||||||
|
#
|
||||||
|
#autocreate_auto_join_room_preset: private_chat
|
||||||
|
|
||||||
|
# The local part of the user id which is used to create auto_join_rooms if
|
||||||
|
# autocreate_auto_join_rooms is true. If this is not provided then the
|
||||||
|
# initial user account that registers will be used to create the rooms.
|
||||||
|
#
|
||||||
|
# The user id is also used to invite new users to any auto-join rooms which
|
||||||
|
# are set to invite-only.
|
||||||
|
#
|
||||||
|
# It *must* be configured if autocreate_auto_join_room_preset is set to
|
||||||
|
# "private_chat" or "trusted_private_chat".
|
||||||
|
#
|
||||||
|
# Note that this must be specified in order for new users to be correctly
|
||||||
|
# invited to any auto-join rooms which have been set to invite-only (either
|
||||||
|
# at the time of creation or subsequently).
|
||||||
|
#
|
||||||
|
# Note that, if the room already exists, this user must be joined and
|
||||||
|
# have the appropriate permissions to invite new members.
|
||||||
|
#
|
||||||
|
#auto_join_mxid_localpart: system
|
||||||
|
|
||||||
# When auto_join_rooms is specified, setting this flag to false prevents
|
# When auto_join_rooms is specified, setting this flag to false prevents
|
||||||
# guest accounts from being automatically joined to the rooms.
|
# guest accounts from being automatically joined to the rooms.
|
||||||
@@ -1388,16 +1505,22 @@ trusted_key_servers:
|
|||||||
|
|
||||||
## Single sign-on integration ##
|
## Single sign-on integration ##
|
||||||
|
|
||||||
|
# The following settings can be used to make Synapse use a single sign-on
|
||||||
|
# provider for authentication, instead of its internal password database.
|
||||||
|
#
|
||||||
|
# You will probably also want to set the following options to `false` to
|
||||||
|
# disable the regular login/registration flows:
|
||||||
|
# * enable_registration
|
||||||
|
# * password_config.enabled
|
||||||
|
#
|
||||||
|
# You will also want to investigate the settings under the "sso" configuration
|
||||||
|
# section below.
|
||||||
|
|
||||||
# Enable SAML2 for registration and login. Uses pysaml2.
|
# Enable SAML2 for registration and login. Uses pysaml2.
|
||||||
#
|
#
|
||||||
# At least one of `sp_config` or `config_path` must be set in this section to
|
# At least one of `sp_config` or `config_path` must be set in this section to
|
||||||
# enable SAML login.
|
# enable SAML login.
|
||||||
#
|
#
|
||||||
# (You will probably also want to set the following options to `false` to
|
|
||||||
# disable the regular login/registration flows:
|
|
||||||
# * enable_registration
|
|
||||||
# * password_config.enabled
|
|
||||||
#
|
|
||||||
# Once SAML support is enabled, a metadata file will be exposed at
|
# Once SAML support is enabled, a metadata file will be exposed at
|
||||||
# https://<server>:<port>/_matrix/saml2/metadata.xml, which you may be able to
|
# https://<server>:<port>/_matrix/saml2/metadata.xml, which you may be able to
|
||||||
# use to configure your SAML IdP with. Alternatively, you can manually configure
|
# use to configure your SAML IdP with. Alternatively, you can manually configure
|
||||||
@@ -1412,40 +1535,42 @@ saml2_config:
|
|||||||
# so it is not normally necessary to specify them unless you need to
|
# so it is not normally necessary to specify them unless you need to
|
||||||
# override them.
|
# override them.
|
||||||
#
|
#
|
||||||
#sp_config:
|
sp_config:
|
||||||
# # point this to the IdP's metadata. You can use either a local file or
|
# Point this to the IdP's metadata. You must provide either a local
|
||||||
# # (preferably) a URL.
|
# file via the `local` attribute or (preferably) a URL via the
|
||||||
# metadata:
|
# `remote` attribute.
|
||||||
# #local: ["saml2/idp.xml"]
|
#
|
||||||
# remote:
|
#metadata:
|
||||||
# - url: https://our_idp/metadata.xml
|
# local: ["saml2/idp.xml"]
|
||||||
#
|
# remote:
|
||||||
# # By default, the user has to go to our login page first. If you'd like
|
# - url: https://our_idp/metadata.xml
|
||||||
# # to allow IdP-initiated login, set 'allow_unsolicited: true' in a
|
|
||||||
# # 'service.sp' section:
|
# By default, the user has to go to our login page first. If you'd like
|
||||||
# #
|
# to allow IdP-initiated login, set 'allow_unsolicited: true' in a
|
||||||
# #service:
|
# 'service.sp' section:
|
||||||
# # sp:
|
#
|
||||||
# # allow_unsolicited: true
|
#service:
|
||||||
#
|
# sp:
|
||||||
# # The examples below are just used to generate our metadata xml, and you
|
# allow_unsolicited: true
|
||||||
# # may well not need them, depending on your setup. Alternatively you
|
|
||||||
# # may need a whole lot more detail - see the pysaml2 docs!
|
# The examples below are just used to generate our metadata xml, and you
|
||||||
#
|
# may well not need them, depending on your setup. Alternatively you
|
||||||
# description: ["My awesome SP", "en"]
|
# may need a whole lot more detail - see the pysaml2 docs!
|
||||||
# name: ["Test SP", "en"]
|
|
||||||
#
|
#description: ["My awesome SP", "en"]
|
||||||
# organization:
|
#name: ["Test SP", "en"]
|
||||||
# name: Example com
|
|
||||||
# display_name:
|
#organization:
|
||||||
# - ["Example co", "en"]
|
# name: Example com
|
||||||
# url: "http://example.com"
|
# display_name:
|
||||||
#
|
# - ["Example co", "en"]
|
||||||
# contact_person:
|
# url: "http://example.com"
|
||||||
# - given_name: Bob
|
|
||||||
# sur_name: "the Sysadmin"
|
#contact_person:
|
||||||
# email_address": ["admin@example.com"]
|
# - given_name: Bob
|
||||||
# contact_type": technical
|
# sur_name: "the Sysadmin"
|
||||||
|
# email_address": ["admin@example.com"]
|
||||||
|
# contact_type": technical
|
||||||
|
|
||||||
# Instead of putting the config inline as above, you can specify a
|
# Instead of putting the config inline as above, you can specify a
|
||||||
# separate pysaml2 configuration file:
|
# separate pysaml2 configuration file:
|
||||||
@@ -1454,7 +1579,7 @@ saml2_config:
|
|||||||
|
|
||||||
# The lifetime of a SAML session. This defines how long a user has to
|
# The lifetime of a SAML session. This defines how long a user has to
|
||||||
# complete the authentication process, if allow_unsolicited is unset.
|
# complete the authentication process, if allow_unsolicited is unset.
|
||||||
# The default is 5 minutes.
|
# The default is 15 minutes.
|
||||||
#
|
#
|
||||||
#saml_session_lifetime: 5m
|
#saml_session_lifetime: 5m
|
||||||
|
|
||||||
@@ -1509,37 +1634,22 @@ saml2_config:
|
|||||||
#
|
#
|
||||||
#grandfathered_mxid_source_attribute: upn
|
#grandfathered_mxid_source_attribute: upn
|
||||||
|
|
||||||
# Directory in which Synapse will try to find the template files below.
|
# It is possible to configure Synapse to only allow logins if SAML attributes
|
||||||
# If not set, default templates from within the Synapse package will be used.
|
# match particular values. The requirements can be listed under
|
||||||
|
# `attribute_requirements` as shown below. All of the listed attributes must
|
||||||
|
# match for the login to be permitted.
|
||||||
#
|
#
|
||||||
# DO NOT UNCOMMENT THIS SETTING unless you want to customise the templates.
|
#attribute_requirements:
|
||||||
# If you *do* uncomment it, you will need to make sure that all the templates
|
# - attribute: userGroup
|
||||||
# below are in the directory.
|
# value: "staff"
|
||||||
#
|
# - attribute: department
|
||||||
# Synapse will look for the following templates in this directory:
|
# value: "sales"
|
||||||
#
|
|
||||||
# * HTML page to display to users if something goes wrong during the
|
|
||||||
# authentication process: 'saml_error.html'.
|
|
||||||
#
|
|
||||||
# When rendering, this template is given the following variables:
|
|
||||||
# * code: an HTML error code corresponding to the error that is being
|
|
||||||
# returned (typically 400 or 500)
|
|
||||||
#
|
|
||||||
# * msg: a textual message describing the error.
|
|
||||||
#
|
|
||||||
# The variables will automatically be HTML-escaped.
|
|
||||||
#
|
|
||||||
# You can see the default templates at:
|
|
||||||
# https://github.com/matrix-org/synapse/tree/master/synapse/res/templates
|
|
||||||
#
|
|
||||||
#template_dir: "res/templates"
|
|
||||||
|
|
||||||
|
|
||||||
# OpenID Connect integration. The following settings can be used to make Synapse
|
# Enable OpenID Connect (OIDC) / OAuth 2.0 for registration and login.
|
||||||
# use an OpenID Connect Provider for authentication, instead of its internal
|
|
||||||
# password database.
|
|
||||||
#
|
#
|
||||||
# See https://github.com/matrix-org/synapse/blob/master/openid.md.
|
# See https://github.com/matrix-org/synapse/blob/master/docs/openid.md
|
||||||
|
# for some example configurations.
|
||||||
#
|
#
|
||||||
oidc_config:
|
oidc_config:
|
||||||
# Uncomment the following to enable authorization against an OpenID Connect
|
# Uncomment the following to enable authorization against an OpenID Connect
|
||||||
@@ -1608,6 +1718,19 @@ oidc_config:
|
|||||||
#
|
#
|
||||||
#skip_verification: true
|
#skip_verification: true
|
||||||
|
|
||||||
|
# Whether to fetch the user profile from the userinfo endpoint. Valid
|
||||||
|
# values are: "auto" or "userinfo_endpoint".
|
||||||
|
#
|
||||||
|
# Defaults to "auto", which fetches the userinfo endpoint if "openid" is included
|
||||||
|
# in `scopes`. Uncomment the following to always fetch the userinfo endpoint.
|
||||||
|
#
|
||||||
|
#user_profile_method: "userinfo_endpoint"
|
||||||
|
|
||||||
|
# Uncomment to allow a user logging in via OIDC to match a pre-existing account instead
|
||||||
|
# of failing. This could be used if switching from password logins to OIDC. Defaults to false.
|
||||||
|
#
|
||||||
|
#allow_existing_users: true
|
||||||
|
|
||||||
# An external module can be provided here as a custom solution to mapping
|
# An external module can be provided here as a custom solution to mapping
|
||||||
# attributes returned from a OIDC provider onto a matrix user.
|
# attributes returned from a OIDC provider onto a matrix user.
|
||||||
#
|
#
|
||||||
@@ -1649,17 +1772,47 @@ oidc_config:
|
|||||||
#
|
#
|
||||||
#display_name_template: "{{ user.given_name }} {{ user.last_name }}"
|
#display_name_template: "{{ user.given_name }} {{ user.last_name }}"
|
||||||
|
|
||||||
|
# Jinja2 templates for extra attributes to send back to the client during
|
||||||
|
# login.
|
||||||
|
#
|
||||||
|
# Note that these are non-standard and clients will ignore them without modifications.
|
||||||
|
#
|
||||||
|
#extra_attributes:
|
||||||
|
#birthdate: "{{ user.birthdate }}"
|
||||||
|
|
||||||
|
|
||||||
# Enable CAS for registration and login.
|
|
||||||
|
# Enable Central Authentication Service (CAS) for registration and login.
|
||||||
#
|
#
|
||||||
#cas_config:
|
cas_config:
|
||||||
# enabled: true
|
# Uncomment the following to enable authorization against a CAS server.
|
||||||
# server_url: "https://cas-server.com"
|
# Defaults to false.
|
||||||
# service_url: "https://homeserver.domain.com:8448"
|
#
|
||||||
# #displayname_attribute: name
|
#enabled: true
|
||||||
# #required_attributes:
|
|
||||||
# # name: value
|
# The URL of the CAS authorization endpoint.
|
||||||
|
#
|
||||||
|
#server_url: "https://cas-server.com"
|
||||||
|
|
||||||
|
# The public URL of the homeserver.
|
||||||
|
#
|
||||||
|
#service_url: "https://homeserver.domain.com:8448"
|
||||||
|
|
||||||
|
# The attribute of the CAS response to use as the display name.
|
||||||
|
#
|
||||||
|
# If unset, no displayname will be set.
|
||||||
|
#
|
||||||
|
#displayname_attribute: name
|
||||||
|
|
||||||
|
# It is possible to configure Synapse to only allow logins if CAS attributes
|
||||||
|
# match particular values. All of the keys in the mapping below must exist
|
||||||
|
# and the values must match the given value. Alternately if the given value
|
||||||
|
# is None then any value is allowed (the attribute just must exist).
|
||||||
|
# All of the listed attributes must match for the login to be permitted.
|
||||||
|
#
|
||||||
|
#required_attributes:
|
||||||
|
# userGroup: "staff"
|
||||||
|
# department: None
|
||||||
|
|
||||||
|
|
||||||
# Additional settings to use with single-sign on systems such as OpenID Connect,
|
# Additional settings to use with single-sign on systems such as OpenID Connect,
|
||||||
@@ -1748,12 +1901,60 @@ sso:
|
|||||||
#template_dir: "res/templates"
|
#template_dir: "res/templates"
|
||||||
|
|
||||||
|
|
||||||
# The JWT needs to contain a globally unique "sub" (subject) claim.
|
# JSON web token integration. The following settings can be used to make
|
||||||
|
# Synapse JSON web tokens for authentication, instead of its internal
|
||||||
|
# password database.
|
||||||
|
#
|
||||||
|
# Each JSON Web Token needs to contain a "sub" (subject) claim, which is
|
||||||
|
# used as the localpart of the mxid.
|
||||||
|
#
|
||||||
|
# Additionally, the expiration time ("exp"), not before time ("nbf"),
|
||||||
|
# and issued at ("iat") claims are validated if present.
|
||||||
|
#
|
||||||
|
# Note that this is a non-standard login type and client support is
|
||||||
|
# expected to be non-existent.
|
||||||
|
#
|
||||||
|
# See https://github.com/matrix-org/synapse/blob/master/docs/jwt.md.
|
||||||
#
|
#
|
||||||
#jwt_config:
|
#jwt_config:
|
||||||
# enabled: true
|
# Uncomment the following to enable authorization using JSON web
|
||||||
# secret: "a secret"
|
# tokens. Defaults to false.
|
||||||
# algorithm: "HS256"
|
#
|
||||||
|
#enabled: true
|
||||||
|
|
||||||
|
# This is either the private shared secret or the public key used to
|
||||||
|
# decode the contents of the JSON web token.
|
||||||
|
#
|
||||||
|
# Required if 'enabled' is true.
|
||||||
|
#
|
||||||
|
#secret: "provided-by-your-issuer"
|
||||||
|
|
||||||
|
# The algorithm used to sign the JSON web token.
|
||||||
|
#
|
||||||
|
# Supported algorithms are listed at
|
||||||
|
# https://pyjwt.readthedocs.io/en/latest/algorithms.html
|
||||||
|
#
|
||||||
|
# Required if 'enabled' is true.
|
||||||
|
#
|
||||||
|
#algorithm: "provided-by-your-issuer"
|
||||||
|
|
||||||
|
# The issuer to validate the "iss" claim against.
|
||||||
|
#
|
||||||
|
# Optional, if provided the "iss" claim will be required and
|
||||||
|
# validated for all JSON web tokens.
|
||||||
|
#
|
||||||
|
#issuer: "provided-by-your-issuer"
|
||||||
|
|
||||||
|
# A list of audiences to validate the "aud" claim against.
|
||||||
|
#
|
||||||
|
# Optional, if provided the "aud" claim will be required and
|
||||||
|
# validated for all JSON web tokens.
|
||||||
|
#
|
||||||
|
# Note that if the "aud" claim is included in a JSON web token then
|
||||||
|
# validation will fail without configuring audiences.
|
||||||
|
#
|
||||||
|
#audiences:
|
||||||
|
# - "provided-by-your-issuer"
|
||||||
|
|
||||||
|
|
||||||
password_config:
|
password_config:
|
||||||
@@ -1844,8 +2045,8 @@ email:
|
|||||||
#
|
#
|
||||||
#notif_from: "Your Friendly %(app)s homeserver <noreply@example.com>"
|
#notif_from: "Your Friendly %(app)s homeserver <noreply@example.com>"
|
||||||
|
|
||||||
# app_name defines the default value for '%(app)s' in notif_from. It
|
# app_name defines the default value for '%(app)s' in notif_from and email
|
||||||
# defaults to 'Matrix'.
|
# subjects. It defaults to 'Matrix'.
|
||||||
#
|
#
|
||||||
#app_name: my_branded_matrix_server
|
#app_name: my_branded_matrix_server
|
||||||
|
|
||||||
@@ -1875,9 +2076,7 @@ email:
|
|||||||
# Directory in which Synapse will try to find the template files below.
|
# Directory in which Synapse will try to find the template files below.
|
||||||
# If not set, default templates from within the Synapse package will be used.
|
# If not set, default templates from within the Synapse package will be used.
|
||||||
#
|
#
|
||||||
# DO NOT UNCOMMENT THIS SETTING unless you want to customise the templates.
|
# Do not uncomment this setting unless you want to customise the templates.
|
||||||
# If you *do* uncomment it, you will need to make sure that all the templates
|
|
||||||
# below are in the directory.
|
|
||||||
#
|
#
|
||||||
# Synapse will look for the following templates in this directory:
|
# Synapse will look for the following templates in this directory:
|
||||||
#
|
#
|
||||||
@@ -1890,9 +2089,13 @@ email:
|
|||||||
# * The contents of password reset emails sent by the homeserver:
|
# * The contents of password reset emails sent by the homeserver:
|
||||||
# 'password_reset.html' and 'password_reset.txt'
|
# 'password_reset.html' and 'password_reset.txt'
|
||||||
#
|
#
|
||||||
# * HTML pages for success and failure that a user will see when they follow
|
# * An HTML page that a user will see when they follow the link in the password
|
||||||
# the link in the password reset email: 'password_reset_success.html' and
|
# reset email. The user will be asked to confirm the action before their
|
||||||
# 'password_reset_failure.html'
|
# password is reset: 'password_reset_confirmation.html'
|
||||||
|
#
|
||||||
|
# * HTML pages for success and failure that a user will see when they confirm
|
||||||
|
# the password reset flow using the page above: 'password_reset_success.html'
|
||||||
|
# and 'password_reset_failure.html'
|
||||||
#
|
#
|
||||||
# * The contents of address verification emails sent during registration:
|
# * The contents of address verification emails sent during registration:
|
||||||
# 'registration.html' and 'registration.txt'
|
# 'registration.html' and 'registration.txt'
|
||||||
@@ -1914,6 +2117,73 @@ email:
|
|||||||
#
|
#
|
||||||
#template_dir: "res/templates"
|
#template_dir: "res/templates"
|
||||||
|
|
||||||
|
# Subjects to use when sending emails from Synapse.
|
||||||
|
#
|
||||||
|
# The placeholder '%(app)s' will be replaced with the value of the 'app_name'
|
||||||
|
# setting above, or by a value dictated by the Matrix client application.
|
||||||
|
#
|
||||||
|
# If a subject isn't overridden in this configuration file, the value used as
|
||||||
|
# its example will be used.
|
||||||
|
#
|
||||||
|
#subjects:
|
||||||
|
|
||||||
|
# Subjects for notification emails.
|
||||||
|
#
|
||||||
|
# On top of the '%(app)s' placeholder, these can use the following
|
||||||
|
# placeholders:
|
||||||
|
#
|
||||||
|
# * '%(person)s', which will be replaced by the display name of the user(s)
|
||||||
|
# that sent the message(s), e.g. "Alice and Bob".
|
||||||
|
# * '%(room)s', which will be replaced by the name of the room the
|
||||||
|
# message(s) have been sent to, e.g. "My super room".
|
||||||
|
#
|
||||||
|
# See the example provided for each setting to see which placeholder can be
|
||||||
|
# used and how to use them.
|
||||||
|
#
|
||||||
|
# Subject to use to notify about one message from one or more user(s) in a
|
||||||
|
# room which has a name.
|
||||||
|
#message_from_person_in_room: "[%(app)s] You have a message on %(app)s from %(person)s in the %(room)s room..."
|
||||||
|
#
|
||||||
|
# Subject to use to notify about one message from one or more user(s) in a
|
||||||
|
# room which doesn't have a name.
|
||||||
|
#message_from_person: "[%(app)s] You have a message on %(app)s from %(person)s..."
|
||||||
|
#
|
||||||
|
# Subject to use to notify about multiple messages from one or more users in
|
||||||
|
# a room which doesn't have a name.
|
||||||
|
#messages_from_person: "[%(app)s] You have messages on %(app)s from %(person)s..."
|
||||||
|
#
|
||||||
|
# Subject to use to notify about multiple messages in a room which has a
|
||||||
|
# name.
|
||||||
|
#messages_in_room: "[%(app)s] You have messages on %(app)s in the %(room)s room..."
|
||||||
|
#
|
||||||
|
# Subject to use to notify about multiple messages in multiple rooms.
|
||||||
|
#messages_in_room_and_others: "[%(app)s] You have messages on %(app)s in the %(room)s room and others..."
|
||||||
|
#
|
||||||
|
# Subject to use to notify about multiple messages from multiple persons in
|
||||||
|
# multiple rooms. This is similar to the setting above except it's used when
|
||||||
|
# the room in which the notification was triggered has no name.
|
||||||
|
#messages_from_person_and_others: "[%(app)s] You have messages on %(app)s from %(person)s and others..."
|
||||||
|
#
|
||||||
|
# Subject to use to notify about an invite to a room which has a name.
|
||||||
|
#invite_from_person_to_room: "[%(app)s] %(person)s has invited you to join the %(room)s room on %(app)s..."
|
||||||
|
#
|
||||||
|
# Subject to use to notify about an invite to a room which doesn't have a
|
||||||
|
# name.
|
||||||
|
#invite_from_person: "[%(app)s] %(person)s has invited you to chat on %(app)s..."
|
||||||
|
|
||||||
|
# Subject for emails related to account administration.
|
||||||
|
#
|
||||||
|
# On top of the '%(app)s' placeholder, these one can use the
|
||||||
|
# '%(server_name)s' placeholder, which will be replaced by the value of the
|
||||||
|
# 'server_name' setting in your Synapse configuration.
|
||||||
|
#
|
||||||
|
# Subject to use when sending a password reset email.
|
||||||
|
#password_reset: "[%(server_name)s] Password reset"
|
||||||
|
#
|
||||||
|
# Subject to use when sending a verification email to assert an address's
|
||||||
|
# ownership.
|
||||||
|
#email_validation: "[%(server_name)s] Validate your email"
|
||||||
|
|
||||||
|
|
||||||
# Password providers allow homeserver administrators to integrate
|
# Password providers allow homeserver administrators to integrate
|
||||||
# their Synapse installation with existing authentication methods
|
# their Synapse installation with existing authentication methods
|
||||||
@@ -1973,6 +2243,26 @@ spam_checker:
|
|||||||
# example_stop_events_from: ['@bad:example.com']
|
# example_stop_events_from: ['@bad:example.com']
|
||||||
|
|
||||||
|
|
||||||
|
## Rooms ##
|
||||||
|
|
||||||
|
# Controls whether locally-created rooms should be end-to-end encrypted by
|
||||||
|
# default.
|
||||||
|
#
|
||||||
|
# Possible options are "all", "invite", and "off". They are defined as:
|
||||||
|
#
|
||||||
|
# * "all": any locally-created room
|
||||||
|
# * "invite": any room created with the "private_chat" or "trusted_private_chat"
|
||||||
|
# room creation presets
|
||||||
|
# * "off": this option will take no effect
|
||||||
|
#
|
||||||
|
# The default value is "off".
|
||||||
|
#
|
||||||
|
# Note that this option will only affect rooms created after it is set. It
|
||||||
|
# will also not affect rooms created by other servers.
|
||||||
|
#
|
||||||
|
#encryption_enabled_by_default_for_room_type: invite
|
||||||
|
|
||||||
|
|
||||||
# Uncomment to allow non-server-admin users to create groups on this server
|
# Uncomment to allow non-server-admin users to create groups on this server
|
||||||
#
|
#
|
||||||
#enable_group_creation: true
|
#enable_group_creation: true
|
||||||
@@ -2138,7 +2428,7 @@ spam_checker:
|
|||||||
#
|
#
|
||||||
# Options for the rules include:
|
# Options for the rules include:
|
||||||
#
|
#
|
||||||
# user_id: Matches agaisnt the creator of the alias
|
# user_id: Matches against the creator of the alias
|
||||||
# room_id: Matches against the room ID being published
|
# room_id: Matches against the room ID being published
|
||||||
# alias: Matches against any current local or canonical aliases
|
# alias: Matches against any current local or canonical aliases
|
||||||
# associated with the room
|
# associated with the room
|
||||||
@@ -2184,7 +2474,7 @@ opentracing:
|
|||||||
# This is a list of regexes which are matched against the server_name of the
|
# This is a list of regexes which are matched against the server_name of the
|
||||||
# homeserver.
|
# homeserver.
|
||||||
#
|
#
|
||||||
# By defult, it is empty, so no servers are matched.
|
# By default, it is empty, so no servers are matched.
|
||||||
#
|
#
|
||||||
#homeserver_whitelist:
|
#homeserver_whitelist:
|
||||||
# - ".*"
|
# - ".*"
|
||||||
@@ -2204,3 +2494,62 @@ opentracing:
|
|||||||
#
|
#
|
||||||
# logging:
|
# logging:
|
||||||
# false
|
# false
|
||||||
|
|
||||||
|
|
||||||
|
## Workers ##
|
||||||
|
|
||||||
|
# Disables sending of outbound federation transactions on the main process.
|
||||||
|
# Uncomment if using a federation sender worker.
|
||||||
|
#
|
||||||
|
#send_federation: false
|
||||||
|
|
||||||
|
# It is possible to run multiple federation sender workers, in which case the
|
||||||
|
# work is balanced across them.
|
||||||
|
#
|
||||||
|
# This configuration must be shared between all federation sender workers, and if
|
||||||
|
# changed all federation sender workers must be stopped at the same time and then
|
||||||
|
# started, to ensure that all instances are running with the same config (otherwise
|
||||||
|
# events may be dropped).
|
||||||
|
#
|
||||||
|
#federation_sender_instances:
|
||||||
|
# - federation_sender1
|
||||||
|
|
||||||
|
# When using workers this should be a map from `worker_name` to the
|
||||||
|
# HTTP replication listener of the worker, if configured.
|
||||||
|
#
|
||||||
|
#instance_map:
|
||||||
|
# worker1:
|
||||||
|
# host: localhost
|
||||||
|
# port: 8034
|
||||||
|
|
||||||
|
# Experimental: When using workers you can define which workers should
|
||||||
|
# handle event persistence and typing notifications. Any worker
|
||||||
|
# specified here must also be in the `instance_map`.
|
||||||
|
#
|
||||||
|
#stream_writers:
|
||||||
|
# events: worker1
|
||||||
|
# typing: worker1
|
||||||
|
|
||||||
|
# The worker that is used to run background tasks (e.g. cleaning up expired
|
||||||
|
# data). If not provided this defaults to the main process.
|
||||||
|
#
|
||||||
|
#run_background_tasks_on: worker1
|
||||||
|
|
||||||
|
|
||||||
|
# Configuration for Redis when using workers. This *must* be enabled when
|
||||||
|
# using workers (unless using old style direct TCP configuration).
|
||||||
|
#
|
||||||
|
redis:
|
||||||
|
# Uncomment the below to enable Redis support.
|
||||||
|
#
|
||||||
|
#enabled: true
|
||||||
|
|
||||||
|
# Optional host and port to use to connect to redis. Defaults to
|
||||||
|
# localhost and 6379
|
||||||
|
#
|
||||||
|
#host: localhost
|
||||||
|
#port: 6379
|
||||||
|
|
||||||
|
# Optional password if configured on the Redis instance
|
||||||
|
#
|
||||||
|
#password: <secret_password>
|
||||||
|
|||||||
@@ -3,7 +3,11 @@
|
|||||||
# This is a YAML file containing a standard Python logging configuration
|
# This is a YAML file containing a standard Python logging configuration
|
||||||
# dictionary. See [1] for details on the valid settings.
|
# dictionary. See [1] for details on the valid settings.
|
||||||
#
|
#
|
||||||
|
# Synapse also supports structured logging for machine readable logs which can
|
||||||
|
# be ingested by ELK stacks. See [2] for details.
|
||||||
|
#
|
||||||
# [1]: https://docs.python.org/3.7/library/logging.config.html#configuration-dictionary-schema
|
# [1]: https://docs.python.org/3.7/library/logging.config.html#configuration-dictionary-schema
|
||||||
|
# [2]: https://github.com/matrix-org/synapse/blob/master/docs/structured_logging.md
|
||||||
|
|
||||||
version: 1
|
version: 1
|
||||||
|
|
||||||
@@ -11,24 +15,33 @@ formatters:
|
|||||||
precise:
|
precise:
|
||||||
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
|
format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'
|
||||||
|
|
||||||
filters:
|
|
||||||
context:
|
|
||||||
(): synapse.logging.context.LoggingContextFilter
|
|
||||||
request: ""
|
|
||||||
|
|
||||||
handlers:
|
handlers:
|
||||||
file:
|
file:
|
||||||
class: logging.handlers.RotatingFileHandler
|
class: logging.handlers.TimedRotatingFileHandler
|
||||||
formatter: precise
|
formatter: precise
|
||||||
filename: /var/log/matrix-synapse/homeserver.log
|
filename: /var/log/matrix-synapse/homeserver.log
|
||||||
maxBytes: 104857600
|
when: midnight
|
||||||
backupCount: 10
|
backupCount: 3 # Does not include the current log file.
|
||||||
filters: [context]
|
|
||||||
encoding: utf8
|
encoding: utf8
|
||||||
|
|
||||||
|
# Default to buffering writes to log file for efficiency. This means that
|
||||||
|
# will be a delay for INFO/DEBUG logs to get written, but WARNING/ERROR
|
||||||
|
# logs will still be flushed immediately.
|
||||||
|
buffer:
|
||||||
|
class: logging.handlers.MemoryHandler
|
||||||
|
target: file
|
||||||
|
# The capacity is the number of log lines that are buffered before
|
||||||
|
# being written to disk. Increasing this will lead to better
|
||||||
|
# performance, at the expensive of it taking longer for log lines to
|
||||||
|
# be written to disk.
|
||||||
|
capacity: 10
|
||||||
|
flushLevel: 30 # Flush for WARNING logs as well
|
||||||
|
|
||||||
|
# A handler that writes logs to stderr. Unused by default, but can be used
|
||||||
|
# instead of "buffer" and "file" in the logger handlers.
|
||||||
console:
|
console:
|
||||||
class: logging.StreamHandler
|
class: logging.StreamHandler
|
||||||
formatter: precise
|
formatter: precise
|
||||||
filters: [context]
|
|
||||||
|
|
||||||
loggers:
|
loggers:
|
||||||
synapse.storage.SQL:
|
synapse.storage.SQL:
|
||||||
@@ -36,8 +49,23 @@ loggers:
|
|||||||
# information such as access tokens.
|
# information such as access tokens.
|
||||||
level: INFO
|
level: INFO
|
||||||
|
|
||||||
|
twisted:
|
||||||
|
# We send the twisted logging directly to the file handler,
|
||||||
|
# to work around https://github.com/matrix-org/synapse/issues/3471
|
||||||
|
# when using "buffer" logger. Use "console" to log to stderr instead.
|
||||||
|
handlers: [file]
|
||||||
|
propagate: false
|
||||||
|
|
||||||
root:
|
root:
|
||||||
level: INFO
|
level: INFO
|
||||||
handlers: [file, console]
|
|
||||||
|
# Write logs to the `buffer` handler, which will buffer them together in memory,
|
||||||
|
# then write them to a file.
|
||||||
|
#
|
||||||
|
# Replace "buffer" with "console" to log to stderr instead. (Note that you'll
|
||||||
|
# also need to update the configuration for the `twisted` logger above, in
|
||||||
|
# this case.)
|
||||||
|
#
|
||||||
|
handlers: [buffer]
|
||||||
|
|
||||||
disable_existing_loggers: false
|
disable_existing_loggers: false
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ able to be imported by the running Synapse.
|
|||||||
The Python class is instantiated with two objects:
|
The Python class is instantiated with two objects:
|
||||||
|
|
||||||
* Any configuration (see below).
|
* Any configuration (see below).
|
||||||
* An instance of `synapse.spam_checker_api.SpamCheckerApi`.
|
* An instance of `synapse.module_api.ModuleApi`.
|
||||||
|
|
||||||
It then implements methods which return a boolean to alter behavior in Synapse.
|
It then implements methods which return a boolean to alter behavior in Synapse.
|
||||||
|
|
||||||
@@ -26,11 +26,8 @@ well as some specific methods:
|
|||||||
The details of the each of these methods (as well as their inputs and outputs)
|
The details of the each of these methods (as well as their inputs and outputs)
|
||||||
are documented in the `synapse.events.spamcheck.SpamChecker` class.
|
are documented in the `synapse.events.spamcheck.SpamChecker` class.
|
||||||
|
|
||||||
The `SpamCheckerApi` class provides a way for the custom spam checker class to
|
The `ModuleApi` class provides a way for the custom spam checker class to
|
||||||
call back into the homeserver internals. It currently implements the following
|
call back into the homeserver internals.
|
||||||
methods:
|
|
||||||
|
|
||||||
* `get_state_events_in_room`
|
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
TODO: how (if at all) is this actually maintained?
|
|
||||||
@@ -1,271 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Synapse documentation build configuration file, created by
|
|
||||||
# sphinx-quickstart on Tue Jun 10 17:31:02 2014.
|
|
||||||
#
|
|
||||||
# This file is execfile()d with the current directory set to its
|
|
||||||
# containing dir.
|
|
||||||
#
|
|
||||||
# Note that not all possible configuration values are present in this
|
|
||||||
# autogenerated file.
|
|
||||||
#
|
|
||||||
# All configuration values have a default; values that are commented out
|
|
||||||
# serve to show the default.
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
||||||
sys.path.insert(0, os.path.abspath(".."))
|
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
|
||||||
|
|
||||||
# If your documentation needs a minimal Sphinx version, state it here.
|
|
||||||
# needs_sphinx = '1.0'
|
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
|
||||||
# ones.
|
|
||||||
extensions = [
|
|
||||||
"sphinx.ext.autodoc",
|
|
||||||
"sphinx.ext.intersphinx",
|
|
||||||
"sphinx.ext.coverage",
|
|
||||||
"sphinx.ext.ifconfig",
|
|
||||||
"sphinxcontrib.napoleon",
|
|
||||||
]
|
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
|
||||||
templates_path = ["_templates"]
|
|
||||||
|
|
||||||
# The suffix of source filenames.
|
|
||||||
source_suffix = ".rst"
|
|
||||||
|
|
||||||
# The encoding of source files.
|
|
||||||
# source_encoding = 'utf-8-sig'
|
|
||||||
|
|
||||||
# The master toctree document.
|
|
||||||
master_doc = "index"
|
|
||||||
|
|
||||||
# General information about the project.
|
|
||||||
project = "Synapse"
|
|
||||||
copyright = (
|
|
||||||
"Copyright 2014-2017 OpenMarket Ltd, 2017 Vector Creations Ltd, 2017 New Vector Ltd"
|
|
||||||
)
|
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
|
||||||
# |version| and |release|, also used in various other places throughout the
|
|
||||||
# built documents.
|
|
||||||
#
|
|
||||||
# The short X.Y version.
|
|
||||||
version = "1.0"
|
|
||||||
# The full version, including alpha/beta/rc tags.
|
|
||||||
release = "1.0"
|
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
|
||||||
# for a list of supported languages.
|
|
||||||
# language = None
|
|
||||||
|
|
||||||
# There are two options for replacing |today|: either, you set today to some
|
|
||||||
# non-false value, then it is used:
|
|
||||||
# today = ''
|
|
||||||
# Else, today_fmt is used as the format for a strftime call.
|
|
||||||
# today_fmt = '%B %d, %Y'
|
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
|
||||||
# directories to ignore when looking for source files.
|
|
||||||
exclude_patterns = ["_build"]
|
|
||||||
|
|
||||||
# The reST default role (used for this markup: `text`) to use for all
|
|
||||||
# documents.
|
|
||||||
# default_role = None
|
|
||||||
|
|
||||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
|
||||||
# add_function_parentheses = True
|
|
||||||
|
|
||||||
# If true, the current module name will be prepended to all description
|
|
||||||
# unit titles (such as .. function::).
|
|
||||||
# add_module_names = True
|
|
||||||
|
|
||||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
|
||||||
# output. They are ignored by default.
|
|
||||||
# show_authors = False
|
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
|
||||||
pygments_style = "sphinx"
|
|
||||||
|
|
||||||
# A list of ignored prefixes for module index sorting.
|
|
||||||
# modindex_common_prefix = []
|
|
||||||
|
|
||||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
|
||||||
# keep_warnings = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTML output ----------------------------------------------
|
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
||||||
# a list of builtin themes.
|
|
||||||
html_theme = "default"
|
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
|
||||||
# further. For a list of options available for each theme, see the
|
|
||||||
# documentation.
|
|
||||||
# html_theme_options = {}
|
|
||||||
|
|
||||||
# Add any paths that contain custom themes here, relative to this directory.
|
|
||||||
# html_theme_path = []
|
|
||||||
|
|
||||||
# The name for this set of Sphinx documents. If None, it defaults to
|
|
||||||
# "<project> v<release> documentation".
|
|
||||||
# html_title = None
|
|
||||||
|
|
||||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
|
||||||
# html_short_title = None
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top
|
|
||||||
# of the sidebar.
|
|
||||||
# html_logo = None
|
|
||||||
|
|
||||||
# The name of an image file (within the static path) to use as favicon of the
|
|
||||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
|
||||||
# pixels large.
|
|
||||||
# html_favicon = None
|
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
||||||
html_static_path = ["_static"]
|
|
||||||
|
|
||||||
# Add any extra paths that contain custom files (such as robots.txt or
|
|
||||||
# .htaccess) here, relative to this directory. These files are copied
|
|
||||||
# directly to the root of the documentation.
|
|
||||||
# html_extra_path = []
|
|
||||||
|
|
||||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
|
||||||
# using the given strftime format.
|
|
||||||
# html_last_updated_fmt = '%b %d, %Y'
|
|
||||||
|
|
||||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
|
||||||
# typographically correct entities.
|
|
||||||
# html_use_smartypants = True
|
|
||||||
|
|
||||||
# Custom sidebar templates, maps document names to template names.
|
|
||||||
# html_sidebars = {}
|
|
||||||
|
|
||||||
# Additional templates that should be rendered to pages, maps page names to
|
|
||||||
# template names.
|
|
||||||
# html_additional_pages = {}
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
# html_domain_indices = True
|
|
||||||
|
|
||||||
# If false, no index is generated.
|
|
||||||
# html_use_index = True
|
|
||||||
|
|
||||||
# If true, the index is split into individual pages for each letter.
|
|
||||||
# html_split_index = False
|
|
||||||
|
|
||||||
# If true, links to the reST sources are added to the pages.
|
|
||||||
# html_show_sourcelink = True
|
|
||||||
|
|
||||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
|
||||||
# html_show_sphinx = True
|
|
||||||
|
|
||||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
|
||||||
# html_show_copyright = True
|
|
||||||
|
|
||||||
# If true, an OpenSearch description file will be output, and all pages will
|
|
||||||
# contain a <link> tag referring to it. The value of this option must be the
|
|
||||||
# base URL from which the finished HTML is served.
|
|
||||||
# html_use_opensearch = ''
|
|
||||||
|
|
||||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
|
||||||
# html_file_suffix = None
|
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
|
||||||
htmlhelp_basename = "Synapsedoc"
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
|
||||||
|
|
||||||
latex_elements = {
|
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
|
||||||
#'papersize': 'letterpaper',
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
|
||||||
#'pointsize': '10pt',
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
|
||||||
#'preamble': '',
|
|
||||||
}
|
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
|
||||||
# (source start file, target name, title,
|
|
||||||
# author, documentclass [howto, manual, or own class]).
|
|
||||||
latex_documents = [("index", "Synapse.tex", "Synapse Documentation", "TNG", "manual")]
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
|
||||||
# the title page.
|
|
||||||
# latex_logo = None
|
|
||||||
|
|
||||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
|
||||||
# not chapters.
|
|
||||||
# latex_use_parts = False
|
|
||||||
|
|
||||||
# If true, show page references after internal links.
|
|
||||||
# latex_show_pagerefs = False
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
# latex_show_urls = False
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
# latex_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
# latex_domain_indices = True
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for manual page output ---------------------------------------
|
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
|
||||||
# (source start file, name, description, authors, manual section).
|
|
||||||
man_pages = [("index", "synapse", "Synapse Documentation", ["TNG"], 1)]
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
# man_show_urls = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for Texinfo output -------------------------------------------
|
|
||||||
|
|
||||||
# Grouping the document tree into Texinfo files. List of tuples
|
|
||||||
# (source start file, target name, title, author,
|
|
||||||
# dir menu entry, description, category)
|
|
||||||
texinfo_documents = [
|
|
||||||
(
|
|
||||||
"index",
|
|
||||||
"Synapse",
|
|
||||||
"Synapse Documentation",
|
|
||||||
"TNG",
|
|
||||||
"Synapse",
|
|
||||||
"One line description of project.",
|
|
||||||
"Miscellaneous",
|
|
||||||
)
|
|
||||||
]
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
# texinfo_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
# texinfo_domain_indices = True
|
|
||||||
|
|
||||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
|
||||||
# texinfo_show_urls = 'footnote'
|
|
||||||
|
|
||||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
|
||||||
# texinfo_no_detailmenu = False
|
|
||||||
|
|
||||||
|
|
||||||
# Example configuration for intersphinx: refer to the Python standard library.
|
|
||||||
intersphinx_mapping = {"http://docs.python.org/": None}
|
|
||||||
|
|
||||||
napoleon_include_special_with_doc = True
|
|
||||||
napoleon_use_ivar = True
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user