diff --git a/pillar/role/matrix.sls b/pillar/role/matrix.sls index fca5a3d..d718e5f 100644 --- a/pillar/role/matrix.sls +++ b/pillar/role/matrix.sls @@ -1,14 +1,74 @@ -{% if salt['grains.get']('include_secrets', True) %} include: + {% if salt['grains.get']('include_secrets', True) %} - secrets.role.matrix -{% endif %} + {% endif %} + - role.common.nginx profile: matrix: - discord_client_id: 672058964707377152 - discord_appservice_id: 330d1b6dcdf6a2217454f8227d2a960030d341a8baca5fa5c40f4081b6f40acd - discord_homeserver_token: c86278c9ee856a30120578811404ab9f87ab14e4ee245811cf008c78eb1d0c82 - discord_appservice_token: f23cb935c48801d921142fc0011d952b7108874eaae9182e5f229cdf9a1e81ab + database_host: postgresql.infra.opensuse.org + database_name: matrix + database_user: matrix + appservices: + discord: + repo: https://github.com/Half-Shot/matrix-appservice-discord.git + port: 9001 + client_id: 672058964707377152 + appservice_id: 330d1b6dcdf6a2217454f8227d2a960030d341a8baca5fa5c40f4081b6f40acd + webhook: + repo: https://github.com/turt2live/matrix-appservice-webhooks + port: 9002 + appservice_id: f4de7550133374c703c4cd64c5898cf1b82b65d4a5c2aca93863ee1fb859df91 + irc: + repo: https://github.com/matrix-org/matrix-appservice-irc + port: 9003 + appservice_id: 1deb544b666b3aba1d9d49d3d4785eeb2fb2befa24e0743c91e6290866003c33 + telegram: + appservice_id: oepzkscngbyqvopzn773ns7whfxyfslgjhy7mumy7syurqp3f4kvb4sgufz9nfsw + api_id: 1331253 + +nginx: + ng: + servers: + managed: + chat.opensuse.org.conf: + config: + - server: + - server_name: chat.opensuse.org + - listen: + - 80 + - default_server + - root: /var/www/riot-web + - gzip_vary: 'on' + - gzip_min_length: 1000 + - gzip_comp_level: 5 + - gzip_types: + - text/plain + - text/xml + - text/x-js + - application/json + - text/css + - application/x-javascript + - application/javascript + - expires: $expires + - location /: + - index: + - index.html + - index.htm + - location ~* \.(?:ttf|otf|eot|woff)$: + - add_header: Access-Control-Allow-Origin "*" + - access_log: /var/log/nginx/chat.access.log combined + - error_log: /var/log/nginx/chat.error.log + - server: + - server_name: dimension.opensuse.org + - listen: + - 80 + - root: /var/www/html + - index: index.html + - location /: + - proxy_set_header X-Forwarded-For: $proxy_add_x_forwarded_for + - proxy_pass: http://localhost:8184 + enabled: True sudoers: included_files: diff --git a/pillar/secrets/role/matrix.sls b/pillar/secrets/role/matrix.sls index f70d999..672ce2f 100644 --- a/pillar/secrets/role/matrix.sls +++ b/pillar/secrets/role/matrix.sls @@ -362,93 +362,1389 @@ profile: iDxtdmWgY2kllYYu7mBjR7Lmy3R4vqJDF0RQioyj =0XBC -----END PGP MESSAGE----- - discord_bot_token: | + appservices: + discord: + homeserver_token: | + -----BEGIN PGP MESSAGE----- + + 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 + =BADs + -----END PGP MESSAGE----- + appservice_token: | + -----BEGIN PGP MESSAGE----- + + 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 + =Pel3 + -----END PGP MESSAGE----- + bot_token: | + -----BEGIN PGP MESSAGE----- + + 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 + =RZbL + -----END PGP MESSAGE----- + irc: + homeserver_token: | + -----BEGIN PGP MESSAGE----- + + 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 + =umxT + -----END PGP MESSAGE----- + appservice_token: | + -----BEGIN PGP MESSAGE----- + + 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 + =0c9n + -----END PGP MESSAGE----- + bot_password: | + -----BEGIN PGP MESSAGE----- + + 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 + =YYAO + -----END PGP MESSAGE----- + pass_enc_key: + -----BEGIN PGP MESSAGE----- + + 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 + Wo6ypyJd8xqZ7SvroGZZl+E= + =EbP5 + -----END PGP MESSAGE----- + webhook: + homeserver_token: | + -----BEGIN PGP MESSAGE----- + + hQQOA7A9CHm0S6RyEA/+IYjFOPGGr/4jpCUsFgc51+P1vbMMq8FU0SJYeHd/3CZH + KjGDNl1rhrZrPPu2bWgz7Yy0NSFHlSReuAzbBMHvwqJMLikUYi4qqbV+aKUDn+Gr + sAbfR4DPRTLcVAJBRBGknuW7nY9hihRlDFIUYoEO2sW06A3pX4377DRWC6iWlGFW + CLRC3TUxTdSemhfZ0r7360T4Ularo5wl9yLIIL0rgTmgNSqhVgY61yWDTBXG4B/I + xrbwyzqht1f9D8DDA5pu07qK6ypAcmTnc7lSGWOtCaud7rvsv+4DLpW7VCZy9rXQ + jgFmYifiXSEEctZHZiSAaxXXRF9JubkvEhWFHjhbHGdeqeLBq8waojLnd+bhQ6pZ + KgRAVqGWSt6fjhEiEmR9YePzEe6K95tF8Ud+9zBWrrers3F5IcQzfauSFlgRIOQ5 + GkuFutviKMY5Z91ArGPsjSM4lCS/KuHj8uTRIZcFSvC1+kIHWr2Hh+A80wvjqLIF + W5I7eRBIgM7C+cmRtjA5OfavLarD8NtldhOMWAS8sq9RPIOw9v9up96yiKSt1Krw + kGi+eefGoG+EVFVsRerFmnuoH/vz4S67OArYbsK8YRt/qQOc2MWd0W36WsBhV36R + k1bbMpGyGn58+x1rD1Ho8QYVbd6gdFI8i/jhfHYh70rifKwS7Tb3UVQXZq4P/CMP + /jqHAmKlA7DOR2JETFFuhnfRoFsNVM6q6TCqj2/VPP/9oC6iI5DVi1pcggAkzFQ3 + 10uoWtJ1n6PyCiAGlRMyszGB43KdQP+/NLeSqjPFpSMJ6glbkbRaklRXuQEbdxfW + LCvlu6FrtPBgQCXXcNoxVfOuviwZZRListedlpo3B++ej+ekhmUs3FhgE91YCWf5 + mavyDP0S16VbDstcanhCm9lENgGf/bg4HvA+lx23dySYkdnFlN2mzg4NypaX6YPU + iO98GzRrYL/0q7gNznOB7RY4Q+UKbZMsm16DFM28xiXg8GfM+chVm470N+/TvdhC + uNEpClr80lY6tamMEeR/hW27634vKD2rzPP6wd0we/X40hzEoY+9T9UrfpAZ11vq + 58YSq8/X14/p/EF1SfD06wHV18qOKMpLIiMNduP/C8AdhRASMMkXtrj0E07wL4tn + Z155/Dh+eRuOM323QqGvTLXgi0EtGtMBGqFMLC1LKR+p430Bzw0Fe1ymuQDXtlme + ox0PqBr5py6cJJ4AWHpRMaA9T0obNoA7TFxJMYRmxS+T2f0Exldd65+W4ww9Ib+j + EuXXnHk/iqAzxvdTVfPlgYoCHDy0hHUcveulxPAVMrdwqZP3flxJhZvUW8TMRPzC + hrpjzfHEFzgTyXeGqXPFFtpn5c53Rmrik8czrUZRvzfRhQIMA8amgupjyC8cAQ// + X41mJpV3w6CLoOdHv2NEfwVRbatRhiLj5Ex7rA2QziI2E5Xryrv9CDV1rqZkd4Of + 10PdsVlqweQpjYjj9uMzo9LFF5lSiFyjFMadd0l13pFR+2f6M63K3hrTA4O9wG1L + I1Hb60yaGPkps1ZRUUJgEb66O0FxF7rVEceJiJL70U+7VmI+IgDI8qf0xMIE+2oK + pLM2ZgGdkyoetWwzWVavQxfwbqSgIQ/U1d2MsqPfJcVMHG559nx1VKijO9Wf87IX + ost9DjBx7sn6wx5TNjoNiY1OkQ4QAuYL9WwZ6KadQAl01I/RW7NHvb6tNnKxlKSf + 5QIC13qs6xWu+uwkztdOia39BZWKf+lOdOMypquMZ2oRmAIUmXZTgkDkZ9TMiNhd + cUv21VBaQG5hfz9J8pKvo9LtwSXZpgdyIFyd7s+6gSi7oo24X3ZQvtnC/aM38h+h + Zf60SG/Khs4m4SwOQc94zYJ7agSAB3Kmmq0EJ09KlU20/WDkYMt36Pe+py1mNzfe + LIVJAeYG/M4c6pkhwSnWpqvhBYXG8N3GcK6JHAGhJ/kw/Po8yT3KjiTN+GiyYsbi + cROSnekfKj0Gz1DqbKnER0kz8Zd5ov4yrX6AkbnKute5uyPaED7ET6b9wrv36E2/ + ki55DSt/0xh/VemuqGbv49bpPbrQ4qeuIRbIDsIGLdeFAQ4DslgfDDfB4G8QA/9p + 1Ai8fpPSzv0jSX4ZqG11wbF85jepKx84yhywdlTUbmAEhd6keL8oXSd/mUY7UvSu + k77aCQXVmQdaM18l60dAYncDa0UiaaU9BXwgwSeANN4+R3T838cQcquKRCRmNLRF + ZT3921NWSy+6+4eYhn5+93/TjIXwY9vqBej1uR+QCAQAgVn7w9iB2e+c3zTeLT1X + gilIY3B13f8tiJvjUUlw6aaSnCTNtux4T1yLilFrkZNGPB+YhBGaK1X2HaKjKiog + XJ0XvL8pYPu7W7Vfk6nhpndsHN+/0K+P/yJqjalIGrqee0T5sdG+st2GEE8/66wK + bnBWzGGKAKY7n7tDsdw4jvKFAg4DiLcKbyvsTOYQCACqJ4H3cpIbp0W41bbTL5pH + XP3eZt0JrWuj1vUBRzVsIi3eIeDBW/ISu6Jd3mxCKOvmbWmMIlP1dtkoJEt/dotb + e+KnI9TB45V3+vKWWXgZoqNvnUx2EPEiexjawgraogfONXTyPTUANrohGNIvXmQI + 6hSkgYrqADKIuziuzNuIktKajXZ9MgapL+RzSyPlBRtZeDxeDttoYIHMnUKCwUeU + Uozg4kTSh9UuPyFuhZmXT59rNRiHzUaoLgD260p452/+34b4Mj9puUvjbtIkk0e3 + p8oegpNXtNBnzrwxdzEqS9wVAUmmjITl8TPMmmp08Y9/3TLu6yUg9Pg/qHmu+UFe + CAC35+RTpSog5eAmBg8OXFNloKmpLtRIG+7tpqDDHeqWyoCKik2gOqJJ5+lhIrcu + HljmuzZ/5RwlQ1NC3CVbrZEcm5iBiwUFCfdrAG6o4udaVwCKeU3lC5LdreF6fQO5 + 8LhsAxhVlPuqz/58cTnzsjHE0pSg2cS3u9OLvt3zmkA5BbB3KqZNRnl3sYpUCYUI + YE6CWGE5xd+lw83ip9aBLAEbKuTsFqrb3QbMYVcF2aeIXl41xHEIHkEtwqr6cvH1 + FCdhnx8rJjyxnHsXnaCKPNFsklYVj7wWa5ws6FZUAEBnjep9ApZJDOaJqbkH6u8c + exN5udSkn6h9x+MHXulwPflkhQIMA1tQWD9t5xGsAQ/+I4dSSmW6CkwBu7vuEamA + BMo1g6vyPV3BC1t4FM8n4IG9v+fZ9Vw3FheK0KdNaYCrAVoj7Prqtx3aO7fwAnxx + reb2y6+Nlb3NWK/Z1C9ZzA2+LwgnnW7xZRLTFD1p+zTsWvn5FCP26e0PKkCscIxS + 7g4XbCXyFP2rXQtkPgd7mpoj/AX0NV/CUMZl3QYJKoLNaYHkqz4jKYNeQyFMuDvZ + 97WbXcQILtMaTdcpR+48MCyroUaUfpF/ggiG8YOVO1yoFS5G9W/MqpWqlbnoQ3Y/ + ZjWqLNVjzwy2XT2fLvnNCZK+X9i60jnrvJouVK4HbyAvzY65biTsmJIrCZSN0QpD + tjlzKn9aj13r/Qv3HxYnPMHF4sOtnCMYieUNujKnsZe6pphiX0O6+hbUMxZ6ix9h + YRJOWaxhm33ZK3BqgTy6KjysR+e8fmbSD7C/4HCkWBv5kqoGKVO/08HnVGr577b9 + 4yynPY8KdmTQs/0xv39Exvx+U05lO9ELnk+OxgAW8YogMnxgeuM2P7pdCnXX+Q9X + 0DvlPSY3paUYd5LdQonGya22Arosy/VekbRMb1SjBAHUAVKYBGd2oKvSw5xS7XVw + Y504JamNSCfoPBP94LUq7dBLY1UDhW8ovv88ru5VOHRcudVhq8T9TKb6L5xRjckx + vSh9Gd6y82RK+Dga0+yTpaSFAgwDcaIHBQt0xN0BD/9lDqlOGT8awQty1liesJwE + gPjiB93Pr5KbdNTRyBVYQRJ1UUnXzrRDXgw18SKFqwx9NVbGLY+nrGIIRqRYS5Rb + pN8d+Jrn3n+CBErIXnRNZYDTTtctZedvDGCtGwjzLNrNBmhePGw/0Q4vP58qvAML + DL1y4ScwXQwCSBgJIs7XwWwvC4bLhiJBh6B+s7Mjn2jZC8pUqfb/gliyumrQ9Lrz + hnXvY7MwE82Q1Nw6Q5JZ98/j4Idv1vpFs/4P/kazjmKIlieFQBS/KjAT8hI/iiZq + t08QdLVdz/FOuQfGjFzuJQeCZKWRI3cVyqIY9PXvcYyZlL/cJQwjr5Mb4ruhxfPk + l5po0fSpsT7PMmb6DDHqmBcOsQjSOhJp/FhfvMHq9+2wYJaQl28Iu39B45ZMv31B + PPzOoAugz4ZNSTjLpBN+qWb0H2mt5UmLhri96C3lMnlRTIyvhzZw8lFEQO6mOKep + v6alLzwpDa2J1atZ5kvTEz6OQsOYVRUe/J9IKbgdA7V6hAzgboia3RQIz93I0o8Q + OGsDk6czAx2tOjHv+cCcy/vJqvNYkx61SPTZYGQPhF+YIAkAoaDGthh/kq1KyEZb + 79A1Ik+uHEXUkeu7+aBZdv6khtEuyPLlcTM5fW+QI45T1EG9KO3LG8zg76C0NF7n + d9BD/x/tq39UHk6NYGDXgIUCDAOs8M4KG6xpkQEP/31laFBaLd2uAUnUb9+TSYgS + aXd52Bb4jAVAf5kj3o4bEgZ/wrgDrid67G7OoU3ita5PpuyCPGyOvMp5HoV01FQl + SpwPMAERGQpHOSigUHEe7pQGzCxGtSIt0OCsbRD6QD+Qqe1iwAwaswz7ZaSPxq4v + 1J1VbYYXws+pEmgdCZC7XtPvGFR4t73Zv5qP0QxG5RLYeIagHZ3GAXx9pc4sU2cx + IZEZZORcNUNhrbnDBAXkqkbD/wkS+rD3W7692hW4xOl06um+uyLdaZUBe0W6oP6s + OIjiweyTYk3UlZTY6eUHG6B84kPPlw9UuHwcOdU2cZRpBAMfY1p6oMnXXaMkVf6I + Ws/wcB3WMGV1/iPutdG3SXR5xAUAoVsp5oVs+4B8WD9eK+4+uZCRfVqoEMhpzoxE + AhZOtFgWcjh5D8lYfQv3vEw6ovHz2VdOQo/GJkuHbddjLAzactEgfnl8FgXWm7U7 + 70wgzcvExQ1YTFkb3yMldv8CWR7HCLJc2sV8XB2KWErTgeBBYnH2og6l5yoXwUBO + WVTfBbRnDpXyOzYR05xsaGECDiPWkqEAEsXihMo6/SXnMf0XKuDNqG+QAdhKRn9D + pMMaRX6FDM/hDPkfp1mDX6hJa0dWk00gs0RsXo7xj1sZASTJVlL4f1wzazSkWoxn + Sqa7nRzKaBWSqNgh6Qrn0nUBiHHuoodAX7bd6B0bNag66pEQMUCNBaNHvDlZV+4q + v1A6oOCHdmbkLOaA3Dpv83GDuktku7ZsQ6j7a806/02viUpZfxGxfwqAs5dnqdmB + WuY5EnIJE1ArYh4pWWRNXjnZQ0WxeXS++4DCid1R8p85b+jYGbQ= + =TiYK + -----END PGP MESSAGE----- + appservice_token: | + -----BEGIN PGP MESSAGE----- + + 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 + =/rY2 + -----END PGP MESSAGE----- + secret: | + -----BEGIN PGP MESSAGE----- + + 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 + =WgeA + -----END PGP MESSAGE----- + telegram: + appservice_token: | + -----BEGIN PGP MESSAGE----- + + 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 + =ll66 + -----END PGP MESSAGE----- + homeserver_token: | + -----BEGIN PGP MESSAGE----- + + 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 + =100I + -----END PGP MESSAGE----- + api_hash: | + -----BEGIN PGP MESSAGE----- + + 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 + x6Fck13oJXpFcS6l + =nEQ7 + -----END PGP MESSAGE----- + bot_token: | + -----BEGIN PGP MESSAGE----- + + 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 + rtLjx7e1A+WsoJznXw6biIoeL/kmlQTMcJM= + =VdGx + -----END PGP MESSAGE----- + + +postgres: + users: + matrix: + password: | -----BEGIN PGP MESSAGE----- - - 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 - =qlTU + + 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 + AxM0TdAgfxSl20j3klXQr1FgVyRHnKsLT4Q4Vo+6elToRlWGG41br0g+V8fmn7aC + V0HuKsesKXDknkNziDHksPVXrcTIDeFqZk/2fkzHtP66IdnA9OIpdXKAmHRXNX7g + WPLECiiBuvO/vwgcwKPckUUzNs9raneN3LUswESxOuQ4Q/hBYDeL+i+T04wO4YpQ + Di3V2ZrkDaC/YrZxW4CXrAU2jZSsqVQKcLvBK5JIWh+sLtGHDNy6A7yiOCkR8Y7z + fROQ+6nXSnbEdeEpHcieXVMGAB2G2k/cEI8R4wUX0RKU3wzVN1oY3gF0mZ4JEPYm + VstK+uMXYw461/TAJhwtgMYMscUZJXsewwu+XZe36OugI7SbIjdOSP0wxyOcJnLD + 0XCguFetmEkpBLklL9c2tPnM2kl1Oj5xdUkzfhWtdI4ntC2fMSUn25tTbzJFjP1E + Yhkd//tqXXouqhNL63TlrXFbkLOLxuztzMDeKFl3EHEYtfHME7RAj6GJRJMYeZNM + Gq3eFJ40AuFk87LDAjhuSDlKDommP4Edh+8hN0bJa8GhSmTN94yGjGwTnHOLmt3N + I/zVsXg7lglsGzn6bGPsEIMNMNEvthefQgpw2Tsufeo7pIZE0S6+GTULii8G4Tfa + PGsT0iNwijr9XqLwDUdX0lsBLYheEe66vN9WTRQhNNA6P2B0TLc7E+hbWL6C9jFm + inCiecY0nZl8sePXjA/xqJzxdiX/CxaTm83DtgLF3zg5uNcrqkdVkI6H9jXtVFo7 + Nr9jgTj8aWqx+6Cz + =wQrm -----END PGP MESSAGE----- diff --git a/salt/profile/matrix/appservice.sls b/salt/profile/matrix/appservice.sls new file mode 100644 index 0000000..9d2bca6 --- /dev/null +++ b/salt/profile/matrix/appservice.sls @@ -0,0 +1,102 @@ +{% set appservices = salt['pillar.get']('profile:matrix:appservices') %} + +appservice_pgks: + pkg.installed: + - pkgs: + - git + - nodejs10 + - npm10 + - nodejs-common + - make + - gcc + - gcc-c++ + +{% for dir, data in appservices.items() %} +/var/lib/matrix-synapse/{{ dir }}: + file.directory: + - user: synapse + +{{ data.repo }}: + git.latest: + - branch: {{ data.get('branch', 'master') }} + - target: /var/lib/matrix-synapse/{{ dir }} + - rev: {{ data.get('branch', 'master') }} + - user: synapse + + +{{ dir }}_conf_file: + file.managed: + - name: /var/lib/matrix-synapse/{{ dir }}/config.yaml + - source: salt://profile/matrix/files/config-{{ dir }}.yaml + - template: jinja + - user: synapse + - require: + - file: /var/lib/matrix-synapse/{{ dir }} + - require_in: + - service: {{ dir }}_service + - watch_in: + - module: {{ dir }}_restart + +{{ dir }}_appservice_file: + file.managed: + - name: /var/lib/matrix-synapse/{{ dir }}/{{ dir }}-registration.yaml + - source: salt://profile/matrix/files/appservice-{{ dir }}.yaml + - user: synapse + - template: jinja + - require: + - file: /var/lib/matrix-synapse/{{ dir }} + - watch_in: + - module: {{ dir }}_restart + +synapse_appservice_{{ dir }}_file: + file.managed: + - name: /etc/matrix-synapse/appservices/appservice-{{ dir }}.yaml + - source: salt://profile/matrix/files/appservice-{{ dir }}.yaml + - template: jinja + - require: + - file: /var/lib/matrix-synapse/{{ dir }} + - watch_in: + - module: {{ dir }}_restart + +{{ dir }}_boostrap: + cmd.run: + - name: npm install + - cwd: /var/lib/matrix-synapse/{{ dir }} + - runas: synapse + - env: + - NODE_VERSION: 10 + +{{ dir }}_build: + cmd.run: + - name: npm run build + - cwd: /var/lib/matrix-synapse/{{ dir }} + - runas: synapse + - env: + - NODE_VERSION: 10 + +{{ dir }}_systemd_file: + file.managed: + - name: /etc/systemd/system/{{ dir }}.service + - template: jinja + - context: + dir: {{ dir }} + port: {{ data.get('port') }} + - source: salt://profile/matrix/files/appservice.service + - require_in: + - service: {{ dir }}_service + +{{ dir }}_service: + service.running: + - name: {{ dir }} + - enable: True + - require: + - service: synapse_service + +{{ dir }}_restart: + module.wait: + - name: service.restart + - m_name: {{ dir }} + - require: + - service: synapse_service + - service: {{ dir }}_service +{% endfor %} diff --git a/salt/profile/matrix/config.sls b/salt/profile/matrix/config.sls index 45cae55..44d45e8 100644 --- a/salt/profile/matrix/config.sls +++ b/salt/profile/matrix/config.sls @@ -1,4 +1,29 @@ -{% set roles = salt['grains.get']('roles', []) %} +riot_dependencies: + pkg.installed: + - pkgs: + - riot-web + +riot_conf_dir: + file.directory: + - name: /etc/riot-web/ + +riot_conf_file: + file.managed: + - name: /etc/riot-web/config.json + - source: salt://profile/matrix/files/config-riot.json + - require: + - file: riot_conf_dir + +riot_custom_background_dir: + file.directory: + - name: /var/www/riot-web/themes/riot/img/backgrounds/ + +riot_custom_background: + file.managed: + - name: /var/www/riot-web/themes/riot/img/backgrounds/valley.jpg + - source: salt://profile/matrix/files/valley.jpg + - require: + - file: riot_custom_background_dir synapse_conf_dir: file.directory: @@ -20,16 +45,6 @@ synapse_conf_file: - watch_in: - module: synapse_restart -synapse_appservice_discord_file: - file.managed: - - name: /etc/matrix-synapse/appservices/appservice-discord.yaml - - source: salt://profile/matrix/files/appservice-discord.yaml - - template: jinja - - require: - - file: /var/lib/matrix-synapse/discord - - watch_in: - - module: discord_restart - synapse_log_conf_file: file.managed: - name: /etc/matrix-synapse/log.yaml @@ -44,5 +59,13 @@ synapse_log_conf_file: /etc/matrix-synapse/signing.key: file.managed: - contents_pillar: profile:matrix:signing_key - - mode: 600 - - user: synapse + - mode: 640 + - user: root + - group: synapse + +/etc/matrix-synapse/irc_password.pem: + file.managed: + - contents_pillar: profile:matrix:appservices:irc:pass_enc_key + - mode: 640 + - user: root + - group: synapse diff --git a/salt/profile/matrix/dimension.sls b/salt/profile/matrix/dimension.sls new file mode 100644 index 0000000..4f9f29a --- /dev/null +++ b/salt/profile/matrix/dimension.sls @@ -0,0 +1,62 @@ +/var/lib/matrix-synapse/dimension: + file.directory: + - user: synapse + +https://github.com/turt2live/matrix-dimension.git: + git.latest: + - branch: master + - target: /var/lib/matrix-synapse/dimension + - rev: master + - user: synapse + +dimension_conf_file: + file.managed: + - name: /var/lib/matrix-synapse/dimension/config/production.yaml + - source: salt://profile/matrix/files/config-dimension.yaml + - template: jinja + - user: synapse + - require: + - file: /var/lib/matrix-synapse/dimension + - require_in: + - service: dimension_service + - watch_in: + - module: dimension_restart + +dimension_boostrap: + cmd.run: + - name: npm install + - cwd: /var/lib/matrix-synapse/dimension + - runas: synapse + - env: + - NODE_VERSION: 10 + +dimension_build: + cmd.run: + - name: npm run build + - cwd: /var/lib/matrix-synapse/dimension + - runas: synapse + - env: + - NODE_VERSION: 10 + +dimension_systemd_file: + file.managed: + - name: /etc/systemd/system/dimension.service + - template: jinja + - source: salt://profile/matrix/files/dimension.service + - require_in: + - service: dimension_service + +dimension_service: + service.running: + - name: dimension + - enable: True + - require: + - service: synapse_service + +dimension_restart: + module.wait: + - name: service.restart + - m_name: dimension + - require: + - service: synapse_service + - service: dimension_service diff --git a/salt/profile/matrix/discord.sls b/salt/profile/matrix/discord.sls deleted file mode 100644 index 596ba38..0000000 --- a/salt/profile/matrix/discord.sls +++ /dev/null @@ -1,70 +0,0 @@ -{% set roles = salt['grains.get']('roles', []) %} - -discord_pgks: - pkg.installed: - - pkgs: - - git - - nodejs10 - - npm10 - - nodejs-common - - make - - gcc - - gcc-c++ - -/var/lib/matrix-synapse/discord: - file.directory: - - user: synapse - -https://github.com/Half-Shot/matrix-appservice-discord.git: - git.latest: - - branch: master - - target: /var/lib/matrix-synapse/discord/ - - rev: master - - user: synapse - -discord_conf_file: - file.managed: - - name: /var/lib/matrix-synapse/discord/config.yaml - - source: salt://profile/matrix/files/config-discord.yaml - - template: jinja - - user: synapse - - require: - - file: /var/lib/matrix-synapse/discord - - require_in: - - service: discord_service - - watch_in: - - module: discord_restart - -discord_appservice_file: - file.managed: - - name: /var/lib/matrix-synapse/discord/discord-registration.yaml - - source: salt://profile/matrix/files/appservice-discord.yaml - - user: synapse - - template: jinja - - require: - - file: /var/lib/matrix-synapse/discord - - watch_in: - - module: discord_restart - -discord_boostrap: - cmd.run: - - name: npm install - - cwd: /var/lib/matrix-synapse/discord - - runas: synapse - - env: - - NODE_VERSION: 10 - -discord_build: - cmd.run: - - name: npm run build - - cwd: /var/lib/matrix-synapse/discord - - runas: synapse - - env: - - NODE_VERSION: 10 - -discord_systemd_file: - file.managed: - - name: /etc/systemd/system/discord.service - - source: salt://profile/matrix/files/discord.service - - require_in: - - service: discord_service diff --git a/salt/profile/matrix/files/appservice-discord.yaml b/salt/profile/matrix/files/appservice-discord.yaml index 081314b..94b8ba5 100644 --- a/salt/profile/matrix/files/appservice-discord.yaml +++ b/salt/profile/matrix/files/appservice-discord.yaml @@ -1,6 +1,6 @@ -id: {{ pillar['profile']['matrix']['discord_appservice_id'] }} -hs_token: {{ pillar['profile']['matrix']['discord_homeserver_token'] }} -as_token: {{ pillar['profile']['matrix']['discord_appservice_token'] }} +id: {{ pillar['profile']['matrix']['appservices']['discord']['appservice_id'] }} +hs_token: {{ pillar['profile']['matrix']['appservices']['discord']['homeserver_token'] }} +as_token: {{ pillar['profile']['matrix']['appservices']['discord']['appservice_token'] }} namespaces: users: - exclusive: true @@ -9,7 +9,7 @@ namespaces: - exclusive: true regex: '#_discord_.*' rooms: [] -url: 'http://localhost:9005' +url: 'http://localhost:9001' sender_localpart: _discord_bot rate_limited: false protocols: diff --git a/salt/profile/matrix/files/appservice-irc.yaml b/salt/profile/matrix/files/appservice-irc.yaml new file mode 100644 index 0000000..5239e90 --- /dev/null +++ b/salt/profile/matrix/files/appservice-irc.yaml @@ -0,0 +1,14 @@ +id: {{ pillar['profile']['matrix']['appservices']['irc']['appservice_id'] }} +hs_token: {{ pillar['profile']['matrix']['appservices']['irc']['homeserver_token'] }} +as_token: {{ pillar['profile']['matrix']['appservices']['irc']['appservice_token'] }} +namespaces: + users: + - exclusive: true + regex: '@freenode_.*:opensuse\.org' + aliases: [] + rooms: [] +url: 'http://localhost:9003' +sender_localpart: appservice-irc +rate_limited: false +protocols: + - irc diff --git a/salt/profile/matrix/files/appservice-telegram.yaml b/salt/profile/matrix/files/appservice-telegram.yaml new file mode 100644 index 0000000..bf0aa69 --- /dev/null +++ b/salt/profile/matrix/files/appservice-telegram.yaml @@ -0,0 +1,14 @@ +id: {{ pillar['profile']['matrix']['telegram']['appservice_id'] }} +as_token: {{ pillar['profile']['matrix']['telegram']['appservice_token'] }} +hs_token: {{ pillar['profile']['matrix']['telegram']['homeserver_token'] }} +namespaces: + users: + - exclusive: true + regex: '@telegram_.+:opensuse.org' + group_id: +telegram:opensuse.org + aliases: + - exclusive: true + regex: '#telegram_.+:opensuse.org' +url: http://localhost:29317 +sender_localpart: telegrambot +rate_limited: false diff --git a/salt/profile/matrix/files/appservice-webhook.yaml b/salt/profile/matrix/files/appservice-webhook.yaml new file mode 100644 index 0000000..8bf1e86 --- /dev/null +++ b/salt/profile/matrix/files/appservice-webhook.yaml @@ -0,0 +1,13 @@ +id: {{ pillar['profile']['matrix']['appservices']['webhook']['appservice_id'] }} +hs_token: {{ pillar['profile']['matrix']['appservices']['webhook']['homeserver_token'] }} +as_token: {{ pillar['profile']['matrix']['appservices']['webhook']['appservice_token'] }} +namespaces: + users: + - exclusive: true + regex: '@_webhook.*' + aliases: [] + rooms: [] +url: 'http://localhost:9002' # you may need to change this (this should point at the bridge) +sender_localpart: _webhook +rate_limited: false +protocols: null diff --git a/salt/profile/matrix/files/appservice.service b/salt/profile/matrix/files/appservice.service new file mode 100644 index 0000000..2efe2ea --- /dev/null +++ b/salt/profile/matrix/files/appservice.service @@ -0,0 +1,16 @@ +[Unit] +Description=Matrix Appservice {{ dir }} + +[Service] +Type=simple +Restart=on-failure +RestartSec=3 + +User=synapse +Group=synapse +WorkingDirectory=/var/lib/matrix-synapse/{{ dir }}/ +Environment="NODE_VERSION=10" +ExecStart=/usr/bin/npm start -c config.yaml -f {{ dir }}-registration.yaml -p {{ port }} + +[Install] +WantedBy=multi-user.target diff --git a/salt/profile/matrix/files/config-dimension.yaml b/salt/profile/matrix/files/config-dimension.yaml new file mode 100644 index 0000000..e1b1016 --- /dev/null +++ b/salt/profile/matrix/files/config-dimension.yaml @@ -0,0 +1,102 @@ +# The web settings for the service (API and UI). +# It is best to have this run on localhost and use a reverse proxy to access Dimension. +web: + port: 8184 + address: '127.0.0.1' + +# Homeserver configuration +homeserver: + # The domain name of the homeserver. This is used in many places, such as with go-neb + # setups, to identify the homeserver. + name: "opensuse.org" + + # The URL that Dimension, go-neb, and other services provisioned by Dimension should + # use to access the homeserver with. + clientServerUrl: "https://matrix.opensuse.org" + + # The URL that Dimension should use when trying to communicate with federated APIs on + # the homeserver. If not supplied or left empty Dimension will try to resolve the address + # through the normal federation process. + #federationUrl: "https://t2bot.io:8448" + + # The URL that Dimension will redirect media requests to for downloading media such as + # stickers. If not supplied or left empty Dimension will use the clientServerUrl. + #mediaUrl: "https://t2bot.io" + + # The access token Dimension should use for miscellaneous access to the homeserver, and + # for tracking custom sticker pack updates. This should be a user configured on the homeserver + # and be dedicated to Dimension (create a user named "dimension" on your homeserver). For + # information on how to acquire an access token, visit https://t2bot.io/docs/access_tokens + # accessToken: "something" + +# These users can modify the integrations this Dimension supports. +# To access the admin interface, open Dimension in Riot and click the settings icon. +admins: + - "@hellcp:opensuse.org" + +# IPs and CIDR ranges listed here will be blocked from being widgets. +# Note: Widgets may still be embedded with restricted content, although not through Dimension directly. +widgetBlacklist: + - 10.0.0.0/8 + - 172.16.0.0/12 + - 192.168.0.0/16 + - 127.0.0.0/8 + +database: + # Where the database for Dimension is + file: "dimension.db" + + # Where to store misc information for the utility bot account. + botData: "dimension.bot.json" + +# Display settings that apply to self-hosted go-neb instances +goneb: + # The avatars to set for each bot. Usually these don't need to be changed, however if your homeserver + # is not able to reach t2bot.io then you should specify your own here. To not use an avatar for a bot, + # make the bot's avatar an empty string. + avatars: + giphy: "mxc://t2bot.io/c5eaab3ef0133c1a61d3c849026deb27" + imgur: "mxc://t2bot.io/6749eaf2b302bb2188ae931b2eeb1513" + github: "mxc://t2bot.io/905b64b3cd8e2347f91a60c5eb0832e1" + wikipedia: "mxc://t2bot.io/7edfb54e9ad9e13fec0df22636feedf1" + travisci: "mxc://t2bot.io/7f4703126906fab8bb27df34a17707a8" + rss: "mxc://t2bot.io/aace4fcbd045f30afc1b4e5f0928f2f3" + google: "mxc://t2bot.io/636ad10742b66c4729bf89881a505142" + guggy: "mxc://t2bot.io/e7ef0ed0ba651aaf907655704f9a7526" + echo: "mxc://t2bot.io/3407ff2db96b4e954fcbf2c6c0415a13" + circleci: "mxc://t2bot.io/cf7d875845a82a6b21f5f66de78f6bee" + jira: "mxc://t2bot.io/f4a38ebcc4280ba5b950163ca3e7c329" + +# Settings for interacting with Telegram. Currently only applies for importing +# sticker packs from Telegram. +telegram: + # Talk to @BotFather on Telegram to get a token + botToken: "{{ pillar['profile']['matrix']['telegram']['bot_token'] }}" + +# Custom sticker pack options. +# Largely based on https://github.com/turt2live/matrix-sticker-manager +stickers: + # Whether or not to allow people to add custom sticker packs + enabled: true + + # The sticker manager bot to promote + stickerBot: "@stickers:t2bot.io" + + # The sticker manager URL to promote + managerUrl: "https://stickers.t2bot.io" + +# Settings for how Dimension is represented to the public +dimension: + # This is where Dimension is accessible from clients. Be sure to set this + # to your own Dimension instance. + publicUrl: "https://dimension.opensuse.org" + +# Settings for controlling how logging works +logging: + file: logs/dimension.log + console: true + consoleLevel: info + fileLevel: verbose + rotate: + size: 52428800 # bytes, default is 50mb + count: 5 diff --git a/salt/profile/matrix/files/config-discord.yaml b/salt/profile/matrix/files/config-discord.yaml index 2e4dced..66e4a69 100644 --- a/salt/profile/matrix/files/config-discord.yaml +++ b/salt/profile/matrix/files/config-discord.yaml @@ -33,8 +33,8 @@ bridge: disableHereMentions: true # Authentication configuration for the discord bot. auth: - clientID: "{{ pillar['profile']['matrix']['discord_client_id'] }}" - botToken: "{{ pillar['profile']['matrix']['discord_bot_token'] }}" + clientID: "{{ pillar['profile']['matrix']['appservices']['discord']['client_id'] }}" + botToken: "{{ pillar['profile']['matrix']['appservices']['discord']['bot_token'] }}" logging: # What level should the logger output to the console at. console: "warn" #silly, verbose, info, http, warn, error, silent @@ -50,15 +50,14 @@ logging: enable: - "DiscordBot" database: - userStorePath: "user-store.db" - roomStorePath: "room-store.db" + connString: "postgresql://{{ pillar['profile']['matrix']['database_user'] }}:{{ pillar['postgres']['users']['matrix']['password'] }}@{{ pillar['profile']['matrix']['database_host'] }}/discord_bridge" # You may either use SQLite or Postgresql for the bridge database, which contains # important mappings for events and user puppeting configurations. # Use the filename option for SQLite, or connString for Postgresql. # If you are migrating, see https://github.com/Half-Shot/matrix-appservice-discord/blob/master/docs/howto.md#migrate-to-postgres-from-sqlite # WARNING: You will almost certainly be fine with sqlite unless your bridge # is in heavy demand and you suffer from IO slowness. - filename: "discord.db" + # filename: "discord.db" # connString: "postgresql://user:password@localhost/database_name" room: # Set the default visibility of alias rooms, defaults to "public". diff --git a/salt/profile/matrix/files/config-irc.yaml b/salt/profile/matrix/files/config-irc.yaml new file mode 100644 index 0000000..c095d91 --- /dev/null +++ b/salt/profile/matrix/files/config-irc.yaml @@ -0,0 +1,505 @@ +# Configuration specific to AS registration. Unless other marked, all fields +# are *REQUIRED*. +homeserver: + # The URL to the home server for client-server API calls, also used to form the + # media URLs as displayed in bridged IRC channels: + url: "https://matrix.opensuse.org:8448" + # + # The URL of the homeserver hosting media files. This is only used to transform + # mxc URIs to http URIs when bridging m.room.[file|image] events. Optional. By + # default, this is the homeserver URL, specified above. + # + # media_url: "http://media.repo:8008" + + # Drop Matrix messages which are older than this number of seconds, according to + # the event's origin_server_ts. + # If the bridge is down for a while, the homeserver will attempt to send all missed + # events on reconnection. These events may be hours old, which can be confusing to + # IRC users if they are then bridged. This option allows these old messages to be + # dropped. + # CAUTION: This is a very coarse heuristic. Federated homeservers may have different + # clock times and hence produce different origin_server_ts values, which may be old + # enough to cause *all* events from the homeserver to be dropped. + # Default: 0 (don't ever drop) + # dropMatrixMessagesAfterSecs: 300 # 5 minutes + + # The 'domain' part for user IDs on this home server. Usually (but not always) + # is the "domain name" part of the HS URL. + domain: "opensuse.org" + + # Should presence be enabled for matrix clients on this bridge. If disabled on the + # homeserver then it should also be disabled here to avoid excess traffic. + # Default: true + enablePresence: true + + # Which port should the appservice bind to. Takes priority over the one provided in the + # command line! Optional. + # bindPort: 9999 + + # Use this option to force the appservice to listen on another hostname for transactions. + # This is NOT your synapse hostname. E.g. use 127.0.0.1 to only listen locally. Optional. + # bindHostname: 0.0.0.0 + +# Configuration specific to the IRC service +ircService: + servers: + # The address of the server to connect to. + chat.freenode.net: + # A human-readable short name. This is used to label IRC status rooms + # where matrix users control their connections. + # E.g. 'ExampleNet IRC Bridge status'. + # It is also used in the Third Party Lookup API as the instance `desc` + # property, where each server is an instance. + name: "Freenode" + + # additionalAddresses: [ "irc2.example.com" ] + # + # [DEPRECATED] Use `name`, above, instead. + # A human-readable description string + # description: "Example.com IRC network" + + # An ID for uniquely identifying this server amongst other servers being bridged. + # networkId: "example" + + # URL to an icon used as the network icon whenever this network appear in + # a network list. (Like in the riot room directory, for instance.) + # icon: https://example.com/images/hash.png + + # The port to connect to. Optional. + port: 6697 + # Whether to use SSL or not. Default: false. + ssl: true + # Whether or not IRC server is using a self-signed cert or not providing CA Chain + sslselfsign: false + # Should the connection attempt to identify via SASL (if a server or user password is given) + # If false, this will use PASS instead. If SASL fails, we do not fallback to PASS. + sasl: false + # Whether to allow expired certs when connecting to the IRC server. + # Usually this should be off. Default: false. + allowExpiredCerts: false + # A specific CA to trust instead of the default CAs. Optional. + #ca: | + # -----BEGIN CERTIFICATE----- + # ... + # -----END CERTIFICATE----- + + # + # The connection password to send for all clients as a PASS (or SASL, if enabled above) command. Optional. + # password: 'pa$$w0rd' + # + # Whether or not to send connection/error notices to real Matrix users. Default: true. + sendConnectionMessages: true + + quitDebounce: + # Whether parts due to net-splits are debounced for delayMs, to allow + # time for the netsplit to resolve itself. A netsplit is detected as being + # a QUIT rate higher than quitsPerSecond. Default: false. + enabled: false + # The maximum number of quits per second acceptable above which a netsplit is + # considered ongoing. Default: 5. + quitsPerSecond: 5 + # The time window in which to wait before bridging a QUIT to Matrix that occurred during + # a netsplit. Debouncing is jittered randomly between delayMinMs and delayMaxMs so that the HS + # is not sent many requests to leave rooms all at once if a netsplit occurs and many + # people to not rejoin. + # If the user with the same IRC nick as the one who sent the quit rejoins a channel + # they are considered back online and the quit is not bridged, so long as the rejoin + # occurs before the randomly-jittered timeout is not reached. + # Default: 3600000, = 1h + delayMinMs: 3600000 # 1h + # Default: 7200000, = 2h + delayMaxMs: 7200000 # 2h + + # A map for conversion of IRC user modes to Matrix power levels. This enables bridging + # of IRC ops to Matrix power levels only, it does not enable the reverse. If a user has + # been given multiple modes, the one that maps to the highest power level will be used. + modePowerMap: + o: 50 + v: 1 + + botConfig: + # Enable the presence of the bot in IRC channels. The bot serves as the entity + # which maps from IRC -> Matrix. You can disable the bot entirely which + # means IRC -> Matrix chat will be shared by active "M-Nick" connections + # in the room. If there are no users in the room (or if there are users + # but their connections are not on IRC) then nothing will be bridged to + # Matrix. If you're concerned about the bot being treated as a "logger" + # entity, then you may want to disable the bot. If you want IRC->Matrix + # but don't want to have TCP connections to IRC unless a Matrix user speaks + # (because your client connection limit is low), then you may want to keep + # the bot enabled. Default: true. + # NB: If the bot is disabled, you SHOULD have matrix-to-IRC syncing turned + # on, else there will be no users and no bot in a channel (meaning no + # messages to Matrix!) until a Matrix user speaks which makes a client + # join the target IRC channel. + # NBB: The bridge bot IRC client will still join the target IRC network so + # it can service bridge-specific queries from the IRC-side e.g. so + # real IRC clients have a way to change their Matrix display name. + # See https://github.com/matrix-org/matrix-appservice-irc/issues/55 + enabled: true + # The nickname to give the AS bot. + nick: "openSUSEBot" + # The password to give to NickServ or IRC Server for this nick. Optional. + password: "{{ pillar['profile']['matrix']['appservices']['irc']['bot_password'] }}" + # + # Join channels even if there are no Matrix users on the other side of + # the bridge. Set to false to prevent the bot from joining channels which have no + # real matrix users in them, even if there is a mapping for the channel. + # Default: true + joinChannelsIfNoUsers: true + + # Configuration for PMs / private 1:1 communications between users. + privateMessages: + # Enable the ability for PMs to be sent to/from IRC/Matrix. + # Default: true. + enabled: true + # Prevent Matrix users from sending PMs to the following IRC nicks. + # Optional. Default: []. + # exclude: ["Alice", "Bob"] # NOT YET IMPLEMENTED + + # Should created Matrix PM rooms be federated? If false, only users on the + # HS attached to this AS will be able to interact with this room. + # Optional. Default: true. + federate: true + + # Configuration for mappings not explicitly listed in the 'mappings' + # section. + dynamicChannels: + # Enable the ability for Matrix users to join *any* channel on this IRC + # network. + # Default: false. + enabled: false + # Should the AS create a room alias for the new Matrix room? The form of + # the alias can be modified via 'aliasTemplate'. Default: true. + createAlias: true + # Should the AS publish the new Matrix room to the public room list so + # anyone can see it? Default: true. + published: false + # What should the join_rule be for the new Matrix room? If 'public', + # anyone can join the room. If 'invite', only users with an invite can + # join the room. Note that if an IRC channel has +k or +i set on it, + # join_rules will be set to 'invite' until these modes are removed. + # Default: "public". + joinRule: public + # This will set the m.room.related_groups state event in newly created rooms + # with the given groupId. This means flares will show up on IRC users in those rooms. + # This should be set to the same thing as namespaces.users.group_id in irc_registration. + # This does not alter existing rooms. + # Leaving this option empty will not set the event. + groupId: +freenode:opensuse.org + # Should created Matrix rooms be federated? If false, only users on the + # HS attached to this AS will be able to interact with this room. + # Default: true. + federate: true + # Force this room version when creating IRC channels. Beware if the homeserver doesn't + # support the room version then the request will fail. By default, no version is requested. + # roomVersion: "1" + # The room alias template to apply when creating new aliases. This only + # applies if createAlias is 'true'. The following variables are exposed: + # $SERVER => The IRC server address (e.g. "irc.example.com") + # $CHANNEL => The IRC channel (e.g. "#python") + # This MUST have $CHANNEL somewhere in it. + # Default: '#irc_$SERVER_$CHANNEL' + aliasTemplate: "#freenode_$CHANNEL" + # A list of user IDs which the AS bot will send invites to in response + # to a !join. Only applies if joinRule is 'invite'. Default: [] + # whitelist: + # - "@foo:example.com" + # - "@bar:example.com" + # + # Prevent the given list of channels from being mapped under any + # circumstances. + # exclude: ["#foo", "#bar"] + + # excludedUsers: + # - regex: "@.*:evilcorp.com" + # kickReason: "We don't like Evilcorp" + + # Configuration for controlling how Matrix and IRC membership lists are + # synced. + membershipLists: + # Enable the syncing of membership lists between IRC and Matrix. This + # can have a significant effect on performance on startup as the lists are + # synced. This must be enabled for anything else in this section to take + # effect. Default: false. + enabled: true + + # Syncing membership lists at startup can result in hundreds of members to + # process all at once. This timer drip feeds membership entries at the + # specified rate. Default: 10000. (10s) + floodDelayMs: 10000 + + global: + ircToMatrix: + # Get a snapshot of all real IRC users on a channel (via NAMES) and + # join their virtual matrix clients to the room. + initial: true + # Make virtual matrix clients join and leave rooms as their real IRC + # counterparts join/part channels. Default: false. + incremental: true + + matrixToIrc: + # Get a snapshot of all real Matrix users in the room and join all of + # them to the mapped IRC channel on startup. Default: false. + initial: true + # Make virtual IRC clients join and leave channels as their real Matrix + # counterparts join/leave rooms. Make sure your 'maxClients' value is + # high enough! Default: false. + incremental: true + + # Apply specific rules to Matrix rooms. Only matrix-to-IRC takes effect. + # rooms: + # - room: "!fuasirouddJoxtwfge:localhost" + # matrixToIrc: + # initial: false + # incremental: false + + # Apply specific rules to IRC channels. Only IRC-to-matrix takes effect. + # channels: + # - channel: "#foo" + # ircToMatrix: + # initial: false + # incremental: false + + # mappings: + # 1:many mappings from IRC channels to room IDs on this IRC server. + # The matrix room must already exist. Your matrix client should expose + # the room ID in a "settings" page for the room. + # "#thepub": + # roomIds: ["!kieouiJuedJoxtVdaG:localhost"] + # Channel key/password to use. Optional. If provided, matrix users do + # not need to know the channel key in order to join the channel. + # key: "secret" + + # Configuration for virtual matrix users. The following variables are + # exposed: + # $NICK => The IRC nick + # $SERVER => The IRC server address (e.g. "irc.example.com") + matrixClients: + # The user ID template to use when creating virtual matrix users. This + # MUST have $NICK somewhere in it. + # Optional. Default: "@$SERVER_$NICK". + # Example: "@irc.example.com_Alice:example.com" + userTemplate: "@freenode_$NICK" + # The display name to use for created matrix clients. This should have + # $NICK somewhere in it if it is specified. Can also use $SERVER to + # insert the IRC domain. + # Optional. Default: "$NICK (IRC)". Example: "Alice (IRC)" + displayName: "$NICK [Freenode]" + # Number of tries a client can attempt to join a room before the request + # is discarded. You can also use -1 to never retry or 0 to never give up. + # Optional. Default: -1 + joinAttempts: -1 + + # Configuration for virtual IRC users. The following variables are exposed: + # $LOCALPART => The user ID localpart ("alice" in @alice:localhost) + # $USERID => The user ID + # $DISPLAY => The display name of this user, with excluded characters + # (e.g. space) removed. If the user has no display name, this + # falls back to $LOCALPART. + ircClients: + # The template to apply to every IRC client nick. This MUST have either + # $DISPLAY or $USERID or $LOCALPART somewhere in it. + # Optional. Default: "M-$DISPLAY". Example: "M-Alice". + nickTemplate: "$DISPLAY[m]" + # True to allow virtual IRC clients to change their nick on this server + # by issuing !nick commands to the IRC AS bot. + # This is completely freeform: it will NOT follow the nickTemplate. + allowNickChanges: true + # The max number of IRC clients that will connect. If the limit is + # reached, the client that spoke the longest time ago will be + # disconnected and replaced. + # Optional. Default: 30. + maxClients: 30 + # IPv6 configuration. + ipv6: + # Optional. Set to true to force IPv6 for outgoing connections. + only: false + # Optional. The IPv6 prefix to use for generating unique addresses for each + # connected user. If not specified, all users will connect from the same + # (default) address. This may require additional OS-specific work to allow + # for the node process to bind to multiple different source addresses + # Linux kernels 4.3+ support sysctl net.ipv6.ip_nonlocal_bind=1 + # Older kernels will need IP_FREEBIND, which requires an LD_PRELOAD with the library + # https://github.com/matrix-org/freebindfree as Node does not expose setsockopt. + # prefix: "2001:0db8:85a3::" # modify appropriately + # + # The maximum amount of time in seconds that the client can exist + # without sending another message before being disconnected. Use 0 to + # not apply an idle timeout. This value is ignored if this IRC server is + # mirroring matrix membership lists to IRC. Default: 172800 (48 hours) + idleTimeout: 10800 + # The number of millseconds to wait between consecutive reconnections if a + # client gets disconnected. Setting to 0 will cause the scheduling to be + # disabled, i.e. it will be scheduled immediately (with jitter. + # Otherwise, the scheduling interval will be used such that one client + # reconnect for this server will be handled every reconnectIntervalMs ms using + # a FIFO queue. + # Default: 5000 (5 seconds) + reconnectIntervalMs: 5000 + # The number of concurrent reconnects if a user has been disconnected unexpectedly + # (e.g. a netsplit). You should set this to a reasonably high number so that + # bridges are not waiting an eternity to reconnect all its clients if + # we see a massive number of disconnect. This is unrelated to the reconnectIntervalMs + # setting above which is for connecting on restart of the bridge. Set to 0 to + # immediately try to reconnect all users. + # Default: 50 + concurrentReconnectLimit: 50 + # The number of lines to allow being sent by the IRC client that has received + # a large block of text to send from matrix. If the number of lines that would + # be sent is > lineLimit, the text will instead be uploaded to matrix and the + # resulting URI is treated as a file. As such, a link will be sent to the IRC + # side instead of potentially spamming IRC and getting the IRC client kicked. + # Default: 3. + lineLimit: 3 + # A list of user modes to set on every IRC client. For example, "RiG" would set + # +R, +i and +G on every IRC connection when they have successfully connected. + # User modes vary wildly depending on the IRC network you're connecting to, + # so check before setting this value. Some modes may not work as intended + # through the bridge e.g. caller ID as there is no way to /ACCEPT. + # Default: "" (no user modes) + # userModes: "R" + # Set information about the bridged channel in the room state, so that client's may + # present relevant UI to the user. MSC2346 + bridgeInfoState: + enabled: true + initial: true + # Configuration for an ident server. If you are running a public bridge it is + # advised you setup an ident server so IRC mods can ban specific matrix users + # rather than the application service itself. + ident: + # True to listen for Ident requests and respond with the + # matrix user's user_id (converted to ASCII, respecting RFC 1413). + # Default: false. + enabled: false + # The port to listen on for incoming ident requests. + # Ports below 1024 require root to listen on, and you may not want this to + # run as root. Instead, you can get something like an Apache to yank up + # incoming requests to 113 to a high numbered port. Set the port to listen + # on instead of 113 here. + # Default: 113. + port: 1113 + # The address to listen on for incoming ident requests. + # Default: 0.0.0.0 + address: "::" + + # Configuration for logging. Optional. Default: console debug level logging + # only. + logging: + # Level to log on console/logfile. One of error|warn|info|debug + level: "debug" + # The file location to log to. This is relative to the project directory. + logfile: "debug.log" + # The file location to log errors to. This is relative to the project + # directory. + errfile: "errors.log" + # Whether to log to the console or not. + toConsole: true + # The max number of files to keep. Files will be overwritten eventually due + # to rotations. + maxFiles: 5 + + # Metrics will then be available via GET /metrics on the bridge listening port (-p). + metrics: + # Whether to actually enable the metric endpoint. Default: false + enabled: true + # When collecting remote user active times, which "buckets" should be used. Defaults are given below. + # The bucket name is formed of a duration and a period. (h=hours,d=days,w=weeks). + remoteUserAgeBuckets: + - "1h" + - "1d" + - "1w" + + # Configuration options for the debug HTTP API. To access this API, you must + # append ?access_token=$APPSERVICE_TOKEN (from the registration file) to the requests. + # + # The debug API exposes the following endpoints: + # + # GET /irc/$domain/user/$user_id => Return internal state for the IRC client for this user ID. + # + # POST /irc/$domain/user/$user_id => Issue a raw IRC command down this connection. + # Format: new line delimited commands as per IRC protocol. + # + debugApi: + # True to enable the HTTP API endpoint. Default: false. + enabled: false + # The port to host the HTTP API. + port: 11100 + + # Configuration for the provisioning API. + # + # GET /_matrix/provision/link + # GET /_matrix/provision/unlink + # GET /_matrix/provision/listlinks + # + # provisioning: + # True to enable the provisioning HTTP endpoint. Default: false. + # enabled: false + # The number of seconds to wait before giving up on getting a response from + # an IRC channel operator. If the channel operator does not respond within the + # allotted time period, the provisioning request will fail. + # Default: 300 seconds (5 mins) + # requestTimeoutSeconds: 300 + # A file defining the provisioning rules for rooms. Format is documented + # in rules.sample.yaml. Leave undefined to not specify any rules. + # ruleFile: "./provisioning.rules.yaml" + # Watch the file for changes, and apply the rules. Default: false + # enableReload: true + + # WARNING: The bridge needs to send plaintext passwords to the IRC server, it cannot + # send a password hash. As a result, passwords (NOT hashes) are stored encrypted in + # the database. + # + # To generate a .pem file: + # $ openssl genpkey -out passkey.pem -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:2048 + # + # The path to the RSA PEM-formatted private key to use when encrypting IRC passwords + # for storage in the database. Passwords are stored by using the admin room command + # `!storepass server.name passw0rd. When a connection is made to IRC on behalf of + # the Matrix user, this password will be sent as the server password (PASS command). + passwordEncryptionKeyPath: "/etc/matrix-synapse/irc_password.pem" + + # Config for Matrix -> IRC bridging + matrixHandler: + # Cache this many matrix events in memory to be used for m.relates_to messages (usually replies). + eventCacheSize: 4096 + + ircHandler: + # How many /leave requests can be ongoing at a time. + # This is used to stem the flow of requests in case of a mass quit/leave, which might + # slow down the homeserver. + leaveConcurrency: 10 + # Should we attempt to match an IRC side mention (nickaname match) + # with the nickname's owner's matrixId, if we are bridging them? + # "on" - Defaults to enabled, users can choose to disable. + # "off" - Defaults to disabled, users can choose to enable. + # "force-off" - Disabled, cannot be enabled. + mapIrcMentionsToMatrix: "on" # This can be "on", "off", "force-off". +# Options here are generally only applicable to large-scale bridges and may have +# consequences greater than other options in this configuration file. +advanced: + # The maximum number of HTTP(S) sockets to maintain. Usually this is unlimited + # however for large bridges it is important to rate limit the bridge to avoid + # accidentally overloading the homeserver. Defaults to 1000, which should be + # enough for the vast majority of use cases. + maxHttpSockets: 1000 + # Max size of an appservice transaction payload, in bytes. Defaults to 10Mb + maxTxnSize: 10000000 + +# Capture information to a sentry.io instance +# sentry: + # enabled: false + # dsn: "https://@sentry.io/" + # Optional. A tag to specify the production environment. Not set by default + # environment: "" + # Optional. A tag to specify the server name. Not set by default + # serverName: "" + +# Use an external database to store bridge state. +database: + # database engine (must be 'postgres' or 'nedb'). Default: nedb + engine: "postgres" + # Either a PostgreSQL connection string, or a path to the NeDB storage directory. + # For postgres, it must start with postgres:// + # For NeDB, it must start with nedb://. The path is relative to the project directory. + connectionString: "postgresql://{{ pillar['profile']['matrix']['database_user'] }}:{{ pillar['postgres']['users']['matrix']['password'] }}@{{ pillar['profile']['matrix']['database_host'] }}/irc_bridge" diff --git a/salt/profile/matrix/files/config-riot.json b/salt/profile/matrix/files/config-riot.json new file mode 100644 index 0000000..f5c9da2 --- /dev/null +++ b/salt/profile/matrix/files/config-riot.json @@ -0,0 +1,58 @@ +{ + "default_server_config": { + "m.homeserver": { + "base_url": "https://matrix.opensuse.org", + "server_name": "opensuse.org" + }, + "m.identity_server": { + "base_url": "https://vector.im" + } + }, + "disable_custom_urls": false, + "disable_guests": false, + "disable_login_language_selector": false, + "disable_3pid_login": false, + "brand": "Riot", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "bug_report_endpoint_url": "https://riot.im/bugreports/submit", + "defaultCountryCode": "GB", + "showLabsSettings": true, + "features": { + "feature_pinning": "enable", + "feature_custom_status": "labs", + "feature_custom_tags": "labs", + "feature_state_counters": "labs" + }, + "default_federate": true, + "default_theme": "light", + "roomDirectory": { + "servers": [ + "opensuse.org" + ] + }, + "welcomeUserId": "@riot-bot:matrix.org", + "piwik": { + "url": "https://beans.opensuse.org/", + "whitelistedHSUrls": ["https://opensuse.org"], + "whitelistedISUrls": ["https://vector.im", "https://opensuse.org"], + "siteId": 1 + }, + "enable_presence_by_hs_url": { + "https://opensuse.org": false, + "https://matrix.opensuse.org": false + }, + "settingDefaults": { + "breadcrumbs": true + }, + "jitsi": { + "preferredDomain": "jitsi.opensuse.org" + } +} diff --git a/salt/profile/matrix/files/config-telegram.yaml b/salt/profile/matrix/files/config-telegram.yaml new file mode 100644 index 0000000..12f6399 --- /dev/null +++ b/salt/profile/matrix/files/config-telegram.yaml @@ -0,0 +1,419 @@ +# Homeserver details +homeserver: + # The address that this appservice can use to connect to the homeserver. + address: https://matrix.opensuse.org + # The domain of the homeserver (for MXIDs, etc). + domain: opensuse.org + # Whether or not to verify the SSL certificate of the homeserver. + # Only applies if address starts with https:// + verify_ssl: true + +# Application service host/registration related details +# Changing these values requires regeneration of the registration. +appservice: + # The address that the homeserver can use to connect to this appservice. + address: http://localhost:29317 + + # The hostname and port where this appservice should listen. + hostname: 0.0.0.0 + port: 29317 + # The maximum body size of appservice API requests (from the homeserver) in mebibytes + # Usually 1 is enough, but on high-traffic bridges you might need to increase this to avoid 413s + max_body_size: 1 + + # The full URI to the database. SQLite and Postgres are fully supported. + # Other DBMSes supported by SQLAlchemy may or may not work. + # Format examples: + # SQLite: sqlite:///filename.db + # Postgres: postgres://username:password@hostname/dbname + database: postgresql://{{ pillar['profile']['matrix']['database_user'] }}:{{ pillar['postgres']['users']['matrix']['password'] }}@{{ pillar['profile']['matrix']['database_host'] }}/telegram_bridge + + # Public part of web server for out-of-Matrix interaction with the bridge. + # Used for things like login if the user wants to make sure the 2FA password isn't stored in + # the HS database. + public: + # Whether or not the public-facing endpoints should be enabled. + enabled: false + # The prefix to use in the public-facing endpoints. + prefix: /public + # The base URL where the public-facing endpoints are available. The prefix is not added + # implicitly. + external: https://example.com/public + + # Provisioning API part of the web server for automated portal creation and fetching information. + # Used by things like Dimension (https://dimension.t2bot.io/). + provisioning: + # Whether or not the provisioning API should be enabled. + enabled: true + # The prefix to use in the provisioning API endpoints. + prefix: /_matrix/provision/v1 + # The shared secret to authorize users of the API. + # Set to "generate" to generate and save a new token. + shared_secret: generate + + # The unique ID of this appservice. + id: {{ pillar['profile']['matrix']['telegram']['appservice_id'] }} + # Username of the appservice bot. + bot_username: telegrambot + # Display name and avatar for bot. Set to "remove" to remove display name/avatar, leave empty + # to leave display name/avatar as-is. + bot_displayname: Telegram + bot_avatar: mxc://maunium.net/tJCRmUyJDsgRNgqhOgoiHWbX + + # Community ID for bridged users (changes registration file) and rooms. + # Must be created manually. + # + # Example: "+telegram:example.com". Set to false to disable. + community_id: "+telegram:opensuse.org" + + # Authentication tokens for AS <-> HS communication. Autogenerated; do not modify. + as_token: "{{ pillar['profile']['matrix']['telegram']['appservice_token'] }}" + hs_token: "{{ pillar['profile']['matrix']['telegram']['homeserver_token'] }}" + +# Prometheus telemetry config. Requires prometheus-client to be installed. +# metrics: + # enabled: false + # listen_port: 8000 + +# Manhole config. +# manhole: + # Whether or not opening the manhole is allowed. + # enabled: false + # The path for the unix socket. + # path: /var/tmp/mautrix-telegram.manhole + # The list of UIDs who can be added to the whitelist. + # If empty, any UIDs can be specified in the open-manhole command. + # whitelist: + # - 0 + +# Bridge config +bridge: + # Localpart template of MXIDs for Telegram users. + # {userid} is replaced with the user ID of the Telegram user. + username_template: "telegram_{userid}" + # Localpart template of room aliases for Telegram portal rooms. + # {groupname} is replaced with the name part of the public channel/group invite link ( https://t.me/{} ) + alias_template: "telegram_{groupname}" + # Displayname template for Telegram users. + # {displayname} is replaced with the display name of the Telegram user. + displayname_template: "{displayname} [Telegram]" + + # Set the preferred order of user identifiers which to use in the Matrix puppet display name. + # In the (hopefully unlikely) scenario that none of the given keys are found, the numeric user + # ID is used. + # + # If the bridge is working properly, a phone number or an username should always be known, but + # the other one can very well be empty. + # + # Valid keys: + # "full name" (First and/or last name) + # "full name reversed" (Last and/or first name) + # "first name" + # "last name" + # "username" + # "phone number" + displayname_preference: + - full name + - username + - phone number + # Maximum length of displayname + displayname_max_length: 100 + + # Maximum number of members to sync per portal when starting up. Other members will be + # synced when they send messages. The maximum is 10000, after which the Telegram server + # will not send any more members. + # Defaults to no local limit (-> limited to 10000 by server) + max_initial_member_sync: -1 + # Whether or not to sync the member list in channels. + # If no channel admins have logged into the bridge, the bridge won't be able to sync the member + # list regardless of this setting. + sync_channel_members: true + # Whether or not to skip deleted members when syncing members. + skip_deleted_members: true + # Whether or not to automatically synchronize contacts and chats of Matrix users logged into + # their Telegram account at startup. + startup_sync: true + # Number of most recently active dialogs to check when syncing chats. + # Set to 0 to remove limit. + sync_dialog_limit: 30 + # Whether or not to sync and create portals for direct chats at startup. + sync_direct_chats: false + # The maximum number of simultaneous Telegram deletions to handle. + # A large number of simultaneous redactions could put strain on your homeserver. + max_telegram_delete: 10 + # Whether or not to automatically sync the Matrix room state (mostly unpuppeted displaynames) + # at startup and when creating a bridge. + sync_matrix_state: true + # Allow logging in within Matrix. If false, the only way to log in is using the out-of-Matrix + # login website (see appservice.public config section) + allow_matrix_login: true + # Whether or not to bridge plaintext highlights. + # Only enable this if your displayname_template has some static part that the bridge can use to + # reliably identify what is a plaintext highlight. + plaintext_highlights: false + # Whether or not to make portals of publicly joinable channels/supergroups publicly joinable on Matrix. + public_portals: false + # Whether or not to use /sync to get presence, read receipts and typing notifications when using + # your own Matrix account as the Matrix puppet for your Telegram account. + sync_with_custom_puppets: true + # Shared secret for https://github.com/devture/matrix-synapse-shared-secret-auth + # + # If set, custom puppets will be enabled automatically for local users + # instead of users having to find an access token and run `login-matrix` + # manually. + login_shared_secret: null + # Set to false to disable link previews in messages sent to Telegram. + telegram_link_preview: true + # Use inline images instead of a separate message for the caption. + # N.B. Inline images are not supported on all clients (e.g. Riot iOS). + inline_images: false + # Maximum size of image in megabytes before sending to Telegram as a document. + image_as_file_size: 10 + # Maximum size of Telegram documents in megabytes to bridge. + max_document_size: 100 + # Enable experimental parallel file transfer, which makes uploads/downloads much faster by + # streaming from/to Matrix and using many connections for Telegram. + # Note that generating HQ thumbnails for videos is not possible with streamed transfers. + parallel_file_transfer: false + # Whether or not created rooms should have federation enabled. + # If false, created portal rooms will never be federated. + federate_rooms: true + # Settings for converting animated stickers. + animated_sticker: + # Format to which animated stickers should be converted. + # disable - No conversion, send as-is (gzipped lottie) + # png - converts to non-animated png (fastest), + # gif - converts to animated gif, but loses transparency + # webm - converts to webm video, requires ffmpeg executable with vp9 codec and webm container support + target: webm + # Arguments for converter. All converters take width and height. + # GIF converter takes background as a hex color. + args: + width: 256 + height: 256 + fps: 30 + + # Overrides for base power levels. + initial_power_level_overrides: + user: {} + group: {} + + # Whether to bridge Telegram bot messages as m.notices or m.texts. + bot_messages_as_notices: true + bridge_notices: + # Whether or not Matrix bot messages (type m.notice) should be bridged. + default: false + # List of user IDs for whom the previous flag is flipped. + # e.g. if bridge_notices.default is false, notices from other users will not be bridged, but + # notices from users listed here will be bridged. + # exceptions: + # - "@importantbot:example.com" + + # Some config options related to Telegram message deduplication. + # The default values are usually fine, but some debug messages/warnings might recommend you + # change these. + deduplication: + # Whether or not to check the database if the message about to be sent is a duplicate. + pre_db_check: false + # The number of latest events to keep when checking for duplicates. + # You might need to increase this on high-traffic bridge instances. + cache_queue_length: 20 + + # The formats to use when sending messages to Telegram via the relay bot. + # Text msgtypes (m.text, m.notice and m.emote) support HTML, media msgtypes don't. + # + # Available variables: + # $sender_displayname - The display name of the sender (e.g. Example User) + # $sender_username - The username (Matrix ID localpart) of the sender (e.g. exampleuser) + # $sender_mxid - The Matrix ID of the sender (e.g. @exampleuser:example.com) + # $message - The message content + message_formats: + m.text: "$sender_displayname: $message" + m.notice: "$sender_displayname: $message" + m.emote: "* $sender_displayname $message" + m.file: "$sender_displayname sent a file: $message" + m.image: "$sender_displayname sent an image: $message" + m.audio: "$sender_displayname sent an audio file: $message" + m.video: "$sender_displayname sent a video: $message" + m.location: "$sender_displayname sent a location: $message" + # Telegram doesn't have built-in emotes, this field specifies how m.emote's from authenticated + # users are sent to telegram. All fields in message_formats are supported. Additionally, the + # Telegram user info is available in the following variables: + # $displayname - Telegram displayname + # $username - Telegram username (may not exist) + # $mention - Telegram @username or displayname mention (depending on which exists) + emote_format: "* $mention $formatted_body" + + # The formats to use when sending state events to Telegram via the relay bot. + # + # Variables from `message_formats` that have the `sender_` prefix are available without the prefix. + # In name_change events, `$prev_displayname` is the previous displayname. + # + # Set format to an empty string to disable the messages for that event. + state_event_formats: + join: "" + leave: "" + name_change: "" + + # Filter rooms that can/can't be bridged. Can also be managed using the `filter` and + # `filter-mode` management commands. + # + # Filters do not affect direct chats. + # An empty blacklist will essentially disable the filter. + filter: + # Filter mode to use. Either "blacklist" or "whitelist". + # If the mode is "blacklist", the listed chats will never be bridged. + # If the mode is "whitelist", only the listed chats can be bridged. + mode: blacklist + # The list of group/channel IDs to filter. + list: [] + + # The prefix for commands. Only required in non-management rooms. + command_prefix: "!tg" + + # Permissions for using the bridge. + # Permitted values: + # relaybot - Only use the bridge via the relaybot, no access to commands. + # user - Relaybot level + access to commands to create bridges. + # puppeting - User level + logging in with a Telegram account. + # full - Full access to use the bridge, i.e. previous levels + Matrix login. + # admin - Full access to use the bridge and some extra administration commands. + # Permitted keys: + # * - All Matrix users + # domain - All users on that homeserver + # mxid - Specific user + permissions: + "*": "relaybot" + # "public.example.com": "user" + # "example.com": "full" + # "@admin:example.com": "admin" + "@hellcp:opensuse.org": "admin" + + # Options related to the message relay Telegram bot. + relaybot: + private_chat: + # List of users to invite to the portal when someone starts a private chat with the bot. + # If empty, private chats with the bot won't create a portal. + invite: [] + # Whether or not to bridge state change messages in relaybot private chats. + state_changes: true + # When private_chat_invite is empty, this message is sent to users /starting the + # relaybot. Telegram's "markdown" is supported. + message: This is a Matrix bridge relaybot and does not support direct chats + # List of users to invite to all group chat portals created by the bridge. + group_chat_invite: [] + # Whether or not the relaybot should not bridge events in unbridged group chats. + # If false, portals will be created when the relaybot receives messages, just like normal + # users. This behavior is usually not desirable, as it interferes with manually bridging + # the chat to another room. + ignore_unbridged_group_chat: true + # Whether or not to allow creating portals from Telegram. + authless_portals: true + # Whether or not to allow Telegram group admins to use the bot commands. + whitelist_group_admins: true + # Whether or not to ignore incoming events sent by the relay bot. + ignore_own_incoming_events: true + # List of usernames/user IDs who are also allowed to use the bot commands. + # whitelist: + # - myusername + # - 12345678 + +# Telegram config +telegram: + # Get your own API keys at https://my.telegram.org/apps + api_id: {{ pillar['profile']['matrix']['telegram']['api_id'] }} + api_hash: {{ pillar['profile']['matrix']['telegram']['api_hash'] }} + # (Optional) Create your own bot at https://t.me/BotFather + bot_token: {{ pillar['profile']['matrix']['telegram']['bot_token'] }} + + # Telethon connection options. + connection: + # The timeout in seconds to be used when connecting. + timeout: 120 + # How many times the reconnection should retry, either on the initial connection or when + # Telegram disconnects us. May be set to a negative or null value for infinite retries, but + # this is not recommended, since the program can get stuck in an infinite loop. + retries: 5 + # The delay in seconds to sleep between automatic reconnections. + retry_delay: 1 + # The threshold below which the library should automatically sleep on flood wait errors + # (inclusive). For instance, if a FloodWaitError for 17s occurs and flood_sleep_threshold + # is 20s, the library will sleep automatically. If the error was for 21s, it would raise + # the error instead. Values larger than a day (86400) will be changed to a day. + flood_sleep_threshold: 60 + # How many times a request should be retried. Request are retried when Telegram is having + # internal issues, when there is a FloodWaitError less than flood_sleep_threshold, or when + # there's a migrate error. May take a negative or null value for infinite retries, but this + # is not recommended, since some requests can always trigger a call fail (such as searching + # for messages). + request_retries: 5 + + # Device info sent to Telegram. + device_info: + # "auto" = OS name+version. + device_model: auto + # "auto" = Telethon version. + system_version: auto + # "auto" = mautrix-telegram version. + app_version: auto + lang_code: en + system_lang_code: en + + # Custom server to connect to. + server: + # Set to true to use these server settings. If false, will automatically + # use production server assigned by Telegram. Set to false in production. + enabled: false + # The DC ID to connect to. + dc: 2 + # The IP to connect to. + ip: 149.154.167.40 + # The port to connect to. 443 may not work, 80 is better and both are equally secure. + port: 80 + + # Telethon proxy configuration. + # You must install PySocks from pip for proxies to work. + proxy: + # Allowed types: disabled, socks4, socks5, http, mtproxy + type: disabled + # Proxy IP address and port. + address: 127.0.0.1 + port: 1080 + # Whether or not to perform DNS resolving remotely. Only for socks/http proxies. + rdns: true + # Proxy authentication (optional). Put MTProxy secret in password field. + username: "" + password: "" + +# Python logging configuration. +# +# See section 16.7.2 of the Python documentation for more info: +# https://docs.python.org/3.6/library/logging.config.html#configuration-dictionary-schema +logging: + version: 1 + formatters: + colored: + (): mautrix_telegram.util.ColorFormatter + format: "[%(asctime)s] [%(levelname)s@%(name)s] %(message)s" + normal: + format: "[%(asctime)s] [%(levelname)s@%(name)s] %(message)s" + handlers: + file: + class: logging.handlers.RotatingFileHandler + formatter: normal + filename: ./mautrix-telegram.log + maxBytes: 10485760 + backupCount: 10 + console: + class: logging.StreamHandler + formatter: colored + loggers: + mau: + level: DEBUG + telethon: + level: INFO + aiohttp: + level: INFO + root: + level: DEBUG + handlers: [file, console] diff --git a/salt/profile/matrix/files/config-webhook.yaml b/salt/profile/matrix/files/config-webhook.yaml new file mode 100644 index 0000000..346d2db --- /dev/null +++ b/salt/profile/matrix/files/config-webhook.yaml @@ -0,0 +1,37 @@ +# Configuration specific to the application service. All fields (unless otherwise marked) are required. +homeserver: + # The domain for the client-server API calls. + url: "https://matrix.opensuse.org:8448" + + # The domain part for user IDs on this home server. Usually, but not always, this is the same as the + # home server's URL. + domain: "opensuse.org" + +# Configuration specific to the bridge. All fields (unless otherwise marked) are required. +webhookBot: + # The localpart to use for the bot. May require re-registering the application service. + localpart: "_webhook" + + # Appearance options for the Matrix bot + appearance: + displayName: "Webhooks" + avatarUrl: "https://i.imgur.com/IDOBtEJ.png" # webhook icon + +# Provisioning API options +provisioning: + # Your secret for the API. Required for all provisioning API requests. + secret: '{{ pillar['profile']['matrix']['appservices']['webhook']['secret'] }}' + +# Configuration related to the web portion of the bridge. Handles the inbound webhooks +web: + hookUrlBase: 'http://localhost:9002/' + +logging: + file: logs/webhook.log + console: true + consoleLevel: info + fileLevel: verbose + writeFiles: true + rotate: + size: 52428800 # bytes, default is 50mb + count: 5 diff --git a/salt/profile/matrix/files/dimension.service b/salt/profile/matrix/files/dimension.service new file mode 100644 index 0000000..22cae0d --- /dev/null +++ b/salt/profile/matrix/files/dimension.service @@ -0,0 +1,16 @@ +[Unit] +Description=Matrix Dimension + +[Service] +Type=simple +Restart=on-failure +RestartSec=3 + +User=synapse +Group=synapse +WorkingDirectory=/var/lib/matrix-synapse/dimension/ +Environment="NODE_VERSION=10 NODE_ENV=production" +ExecStart=/usr/bin/npm run start:app + +[Install] +WantedBy=multi-user.target diff --git a/salt/profile/matrix/files/discord.service b/salt/profile/matrix/files/discord.service deleted file mode 100644 index 3a4694f..0000000 --- a/salt/profile/matrix/files/discord.service +++ /dev/null @@ -1,16 +0,0 @@ -[Unit] -Description=Matrix Appservice Discord - -[Service] -Type=simple -Restart=on-failure -RestartSec=3 - -User=synapse -Group=synapse -WorkingDirectory=/var/lib/matrix-synapse/discord/ -Environment="NODE_VERSION=10" -ExecStart=/usr/bin/npm start - -[Install] -WantedBy=multi-user.target diff --git a/salt/profile/matrix/files/homeserver.yaml b/salt/profile/matrix/files/homeserver.yaml index cbcba7f..34449e9 100644 --- a/salt/profile/matrix/files/homeserver.yaml +++ b/salt/profile/matrix/files/homeserver.yaml @@ -553,13 +553,23 @@ acme: ## Database ## -database: +#database: # The database engine name - name: "sqlite3" + #name: "sqlite3" # Arguments to pass to the engine - args: + #args: # Path to the database - database: "/var/lib/matrix-synapse/homeserver.db" + #database: "/var/lib/matrix-synapse/homeserver.db" + +database: + name: psycopg2 + args: + user: {{ pillar['profile']['matrix']['database_user'] }} + password: {{ pillar['postgres']['users']['matrix']['password'] }} + database: {{ pillar['profile']['matrix']['database_name'] }} + host: {{ pillar['profile']['matrix']['database_host'] }} + cp_min: 5 + cp_max: 10 # Number of events to cache in memory. # @@ -1095,10 +1105,15 @@ report_stats: true # - "m.room.name" +{% set appservices = salt['pillar.get']('profile:matrix:appservices') %} + # A list of application service config files to use # app_service_config_files: - - /etc/matrix-synapse/appservices/appservice-discord.yaml + {% for dir, data in appservices.items() %} + - /etc/matrix-synapse/appservices/appservice-{{ dir }}.yaml + {% endfor %} + - /etc/matrix-synapse/appservices/appservice-telegram.yaml # Uncomment to enable tracking of application service IP addresses. Implicitly # enables MAU tracking for application service users. @@ -1365,11 +1380,11 @@ password_config: email: # The hostname of the outgoing SMTP server to use. Defaults to 'localhost'. # - #smtp_host: mail.server + smtp_host: localhost # The port on the mail server for outgoing SMTP. Defaults to 25. # - #smtp_port: 587 + smtp_port: 25 # Username/password for authentication to the SMTP server. By default, no # authentication is attempted. diff --git a/salt/profile/matrix/files/telegram.service b/salt/profile/matrix/files/telegram.service new file mode 100644 index 0000000..b58eb62 --- /dev/null +++ b/salt/profile/matrix/files/telegram.service @@ -0,0 +1,15 @@ +[Unit] +Description=Matrix Appservice Telegram + +[Service] +Type=simple +Restart=on-failure +RestartSec=3 + +User=synapse +Group=synapse +WorkingDirectory=/var/lib/matrix-synapse/telegram/ +ExecStart=python3 -m mautrix_telegram -c config.yaml -f telegram-registration.yaml + +[Install] +WantedBy=multi-user.target diff --git a/salt/profile/matrix/files/valley.jpg b/salt/profile/matrix/files/valley.jpg new file mode 100644 index 0000000..4732a29 Binary files /dev/null and b/salt/profile/matrix/files/valley.jpg differ diff --git a/salt/profile/matrix/init.sls b/salt/profile/matrix/init.sls index b749fbc..08ab61b 100644 --- a/salt/profile/matrix/init.sls +++ b/salt/profile/matrix/init.sls @@ -1,5 +1,3 @@ -{% set roles = salt['grains.get']('roles', []) %} - synapse_service: service.running: - name: synapse @@ -11,18 +9,3 @@ synapse_restart: - m_name: synapse - require: - service: synapse_service - -discord_service: - service.running: - - name: discord - - enable: True - - require: - - service: synapse_service - -discord_restart: - module.wait: - - name: service.restart - - m_name: discord - - require: - - service: synapse_service - - service: discord_service diff --git a/salt/profile/matrix/synapse.sls b/salt/profile/matrix/synapse.sls index 107cbf7..bf5cb3f 100644 --- a/salt/profile/matrix/synapse.sls +++ b/salt/profile/matrix/synapse.sls @@ -1,5 +1,3 @@ -{% set roles = salt['grains.get']('roles', []) %} - synapse_dependencies: pkg.installed: - pkgs: diff --git a/salt/profile/matrix/telegram.sls b/salt/profile/matrix/telegram.sls new file mode 100644 index 0000000..f9042e2 --- /dev/null +++ b/salt/profile/matrix/telegram.sls @@ -0,0 +1,66 @@ +telegram_pgks: + pkg.installed: + - pkgs: + - python3-mautrix-telegram + # Required for webm for stickers + - ffmpeg + +/var/lib/matrix-synapse/telegram: + file.directory: + - user: synapse + +telegram_conf_file: + file.managed: + - name: /var/lib/matrix-synapse/telegram/config.yaml + - source: salt://profile/matrix/files/config-telegram.yaml + - template: jinja + - user: synapse + - require: + - file: /var/lib/matrix-synapse/telegram + - require_in: + - service: telegram_service + - watch_in: + - module: telegram_restart + +telegram_appservice_file: + file.managed: + - name: /var/lib/matrix-synapse/telegram/telegram-registration.yaml + - source: salt://profile/matrix/files/appservice-telegram.yaml + - user: synapse + - template: jinja + - require: + - file: /var/lib/matrix-synapse/telegram + - watch_in: + - module: telegram_restart + +synapse_appservice_telegram_file: + file.managed: + - name: /etc/matrix-synapse/appservices/appservice-telegram.yaml + - source: salt://profile/matrix/files/appservice-telegram.yaml + - template: jinja + - require: + - file: /var/lib/matrix-synapse/telegram + - watch_in: + - module: telegram_restart + +telegram_systemd_file: + file.managed: + - name: /etc/systemd/system/telegram.service + - source: salt://profile/matrix/files/telegram.service + - require_in: + - service: telegram_service + +telegram_service: + service.running: + - name: telegram + - enable: True + - require: + - service: synapse_service + +telegram_restart: + module.wait: + - name: service.restart + - m_name: telegram + - require: + - service: synapse_service + - service: telegram_service diff --git a/salt/role/matrix.sls b/salt/role/matrix.sls index f13b35e..7ae7418 100644 --- a/salt/role/matrix.sls +++ b/salt/role/matrix.sls @@ -1,5 +1,7 @@ include: - profile.matrix.synapse - profile.matrix.init - - profile.matrix.discord + - profile.matrix.appservice + - profile.matrix.telegram + - profile.matrix.dimension - profile.matrix.config