<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Matrix on Nicolas Guilloux</title><link>https://nicolasguilloux.eu/tags/matrix/</link><description>Recent content in Matrix on Nicolas Guilloux</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Thu, 08 Apr 2021 00:00:00 +0000</lastBuildDate><atom:link href="https://nicolasguilloux.eu/tags/matrix/index.xml" rel="self" type="application/rss+xml"/><item><title>Le Bridge Signal pour Matrix</title><link>https://nicolasguilloux.eu/articles/mautrix-signal/</link><pubDate>Thu, 08 Apr 2021 00:00:00 +0000</pubDate><guid>https://nicolasguilloux.eu/articles/mautrix-signal/</guid><description>&lt;img src="https://nicolasguilloux.eu/" alt="Featured image of post Le Bridge Signal pour Matrix" /&gt;&lt;div class="paragraph"&gt;
&lt;p&gt;Matrix est un protocole de messagerie instantanée. La suite de ce ticket considère que vous connaissez les bases et notamment le glossaire. Je vous conseille fortement d’aller lire le tutoriel précédent :
&lt;a href="../matrix"&gt;Matrix sur NixOS&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_signal_messenger"&gt;Signal Messenger&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;&lt;a href="https://gitlab.com/NicolasGuilloux/nixos-configuration/-/blob/master/server/matrix/signal.nix" target="_blank" rel="noopener"&gt;&lt;span class="image"&gt;&lt;img src="https://img.shields.io/badge/Gitlab-Mautrix%20Signal-orange" alt="Gitlab"/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Le bridge Signal supporte les conversations de groupe et les messages directs. Toutefois, toute conversation chiffrée ne sera pas supportée.&lt;br/&gt;
La petite particularité sur ce bridge est que Signal ne dispose pas d’une API. Ainsi, il va falloir utiliser une image Docker qui va simuler un accès Web à Signal.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Voici la configuration que je préconise :&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code&gt;{ config, lib, ... }:

let
 bridgeFolder = &amp;#34;/var/lib/mautrix-signal&amp;#34;;

 toListIfExists = path:
 if (lib.pathExists path) then
 [ path ]
 else
 [];
in {
 # Signal daemon
 virtualisation.oci-containers.containers.signald = {
 image = &amp;#34;docker.io/finn/signald&amp;#34;;
 volumes = [ &amp;#34;${bridgeFolder}/signald:/signald&amp;#34; ];
 extraOptions = [ &amp;#34;--network=host&amp;#34; ];
 };

 # Signal bridge
 virtualisation.oci-containers.containers.mautrix-signal = {
 image = &amp;#34;dock.mau.dev/tulir/mautrix-signal&amp;#34;;
 extraOptions = [ &amp;#34;--network=host&amp;#34; ];
 dependsOn = [ &amp;#34;signald&amp;#34; ];
 volumes = [
 &amp;#34;${bridgeFolder}/data:/data&amp;#34;
 &amp;#34;${bridgeFolder}/signald:/signald&amp;#34;
 ];
 };

 # Add configuration to Matrix server
 services.matrix-synapse.app_service_config_files = toListIfExists &amp;#34;${bridgeFolder}/data/registration.yaml&amp;#34;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Si on résume, toutes les données sont stockées dans &lt;code&gt;/var/lib/mautrix-signal&lt;/code&gt;. On ajoute les images Docker qui permettent de lancer le bridge.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;L’image &lt;code&gt;signald&lt;/code&gt; est le daemon pour pouvoir simuler une interface Web auprès de notre application Signal. C’est nécessaire pour pouvoir récupérer les messages en toute sécurité vu que Signal ne dispose pas d’API.&lt;br/&gt;
C’est aussi pour cela qu’on doit partager le volume où sont stockées toutes les informations (comme les avatars) entre le daemon et le bridge.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;On va dès maintenant configurer ce dernier en éditant &lt;strong&gt;en tant que root&lt;/strong&gt; le fichier &lt;code&gt;/var/lib/mautrix-signal/data/config.yaml&lt;/code&gt;…​ Enfin faite votre &lt;code&gt;nixos-rebuild switch&lt;/code&gt; pour lancer le bridge.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;On va changer différentes clés dans le fichier, je vais lister ce les clés qui ont changé :&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code&gt;homeserver:
 address: http://localhost:8008
 domain: server_name
 verify_ssl: false

signal:
 socket_path: /signald/signald.sock
 outgoing_attachment_dir: /signald/attachments
 avatar_dir: /signald/avatars
 data_dir: /signald/data

bridge:
 permissions:
 &amp;#34;*&amp;#34;: user
 &amp;#34;@pseudo:server_name&amp;#34;: admin&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;homeserver.address&lt;/code&gt; : Votre serveur Matrix, pas besoin de passer par internet, il est disponible en local&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;homeserver.domain&lt;/code&gt; : C’est le &lt;code&gt;server_name&lt;/code&gt;, vous devriez maintenant savoir ce que c’est :)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;homeserver.verify_ssl&lt;/code&gt; : Comme on est dans une boucle locale, pas besoin de vérifier le SSL&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;signal.socket-path&lt;/code&gt; : Socket pour dialoguer avec le daemon&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;signal.outgoing_attachment_dir&lt;/code&gt; : Répertoire du daemon où sont mis les pièces jointes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;signal.avatar_dir&lt;/code&gt; : Répertoire du daemon où sont mis les avatars&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;signal.data_dir&lt;/code&gt; : Répertoire du daemon où sont mis les autres données utiles aux bridges&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;bridge.permissions&lt;/code&gt; : Ce sont les permissions. Pour ma part, j’ai mis &lt;code&gt;&amp;#34;*&amp;#34;: user&lt;/code&gt; pour que tous les utilisateurs puissent utiliser le bridge, et enfin &lt;code&gt;&amp;#34;@pseudo:server_name&amp;#34;: admin&lt;/code&gt; pour que votre utilisateur puisse l’administrer&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Une fois ça fait, pensez à redémarrer votre image docker &lt;code&gt;docker restart mautrix-signal&lt;/code&gt; et faites ensuite un petit &lt;code&gt;nixos-rebuild switch&lt;/code&gt;. Normalement, &lt;code&gt;matrix-synapse&lt;/code&gt; se redémarrera car le fichier &lt;code&gt;registration.yaml&lt;/code&gt; existera.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Vous pouvez maintenant constater que vous pouvez parler au bot dans votre client Matrix en ouvrant une conversation avec &lt;code&gt;@signalbot:server_name&lt;/code&gt;.&lt;br/&gt;
Celui-ci devrait accepter votre invitation. Vous pouvez alors lui demander de l’aide comme il le propose.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;A partir d’ici vous avez plusieurs choix, car vous pouvez :&lt;/p&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Créer un compte de zéro en utilisant la commande &lt;code&gt;register +33xxxxxxxxx&lt;/code&gt;. Si vous n’avez pas signal sur votre téléphone, cela permettra de tout recevoir sur Matrix directement.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lier votre compte déjà existant, relié à votre téléphone, et forward tous les messages à Matrix en tapant &lt;code&gt;link&lt;/code&gt; et en scannant le QR Code.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Une fois connecté, attendez un peu et vous allez recevoir plein d’invitations :) Bien joué, tout devrait fonctionner !&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Le Bridge Telegram pour Matrix</title><link>https://nicolasguilloux.eu/articles/mautrix-telegram/</link><pubDate>Mon, 05 Apr 2021 00:00:00 +0000</pubDate><guid>https://nicolasguilloux.eu/articles/mautrix-telegram/</guid><description>&lt;img src="https://nicolasguilloux.eu/" alt="Featured image of post Le Bridge Telegram pour Matrix" /&gt;&lt;div class="paragraph"&gt;
&lt;p&gt;Matrix est un protocole de messagerie instantanée. La suite de ce ticket considère que vous connaissez les bases et notamment le glossaire. Je vous conseille fortement d’aller lire le tutoriel précédent :
&lt;a href="../matrix"&gt;Matrix sur NixOS&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_telegram_messenger"&gt;Telegram Messenger&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;&lt;a href="https://gitlab.com/NicolasGuilloux/nixos-configuration/-/blob/master/server/matrix/telegram.nix" target="_blank" rel="noopener"&gt;&lt;span class="image"&gt;&lt;img src="https://img.shields.io/badge/Gitlab-Mautrix%20Telegram-orange" alt="Gitlab"/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Le bridge de Telegram supporte quasiment toutes les fonctionnalités. La configuration est quasiment la même que pour
&lt;a href="../mautrix-facebook"&gt;Mautrix Facebook&lt;/a&gt;
hormis un léger changement au niveau de la configuration d’une API.&lt;br/&gt;
Je n’ai volontairement pas suivi la configuration proposée par NixOS car je n’ai jamais réussi à la faire fonctionner, et je souhaite avoir une installation cohérente. Comme NixOS ne propose pas de module pour Mautrix Facebook, Mautrix Telegram et Mautrix Signal, je préfère les configurer de la même manière.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Voici la configuration que je préconise :&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code&gt;{ config, lib, ... }:

let
 bridgeFolder = &amp;#34;/var/lib/mautrix-telegram&amp;#34;;

 toListIfExists = path:
 if (lib.pathExists path) then
 [ path ]
 else
 [];
in {
 # Telegram bridge
 virtualisation.oci-containers.containers.mautrix-telegram = {
 image = &amp;#34;dock.mau.dev/tulir/mautrix-telegram&amp;#34;;
 extraOptions = [ &amp;#34;--network=host&amp;#34; ];
 volumes = [ &amp;#34;${bridgeFolder}/data:/data&amp;#34; ];
 };

 # Add configuration to Matrix server
 services.matrix-synapse.app_service_config_files = toListIfExists &amp;#34;${bridgeFolder}/data/registration.yaml&amp;#34;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Si on résume, toutes les données sont stockées dans &lt;code&gt;/var/lib/mautrix-telegram&lt;/code&gt;. On ajoute l’image docker qui permet de lancer le bridge.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;On va dès maintenant le configurer en éditant &lt;strong&gt;en tant que root&lt;/strong&gt; le fichier &lt;code&gt;/var/lib/mautrix-telegram/data/config.yaml&lt;/code&gt;…​ Enfin faite votre &lt;code&gt;nixos-rebuild switch&lt;/code&gt; pour lancer le bridge.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Dans un premier temps, il faut faire une application sur le site de Telegram pour récupérer un ID et un hash qui serviront au bridge pour interagir avec l’API. Pour ce faire, allez sur cette &lt;a href="https://core.telegram.org/api/obtaining_api_id#obtaining" target="_blank" rel="noopener"&gt;page d’aide de Telegram&lt;/a&gt; et suivez les instructions pour récupérer le &lt;code&gt;api_id&lt;/code&gt; et le &lt;code&gt;api_hash&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;On va changer différentes clés dans le fichier, je vais lister ce les clés qui ont changé :&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code&gt;homeserver:
 address: http://localhost:8008
 domain: server_name
 verify_ssl: false

telegram:
 api_id: #ApiId#
 api_hash: #ApiHash#

bridge:
 permissions:
 &amp;#34;*&amp;#34;: user
 &amp;#34;@pseudo:server_name&amp;#34;: admin&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;homeserver.address&lt;/code&gt; : Votre serveur Matrix, pas besoin de passer par internet, il est disponible en local&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;homeserver.domain&lt;/code&gt; : C’est le &lt;code&gt;server_name&lt;/code&gt;, vous devriez maintenant savoir ce que c’est :)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;homeserver.verify_ssl&lt;/code&gt; : Comme on est dans une boucle locale, pas besoin de vérifier le SSL&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;telegram.api_id&lt;/code&gt; : ID fourni par Telegram sur le site&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;telegram.api_hash&lt;/code&gt; : Hash fourni par Telegram sur le site&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;bridge.permissions&lt;/code&gt; : Ce sont les permissions. Pour ma part, j’ai mis &lt;code&gt;&amp;#34;*&amp;#34;: user&lt;/code&gt; pour que tous les utilisateurs puissent utiliser le bridge, et enfin &lt;code&gt;&amp;#34;@pseudo:server_name&amp;#34;: admin&lt;/code&gt; pour que votre utilisateur puisse l’administrer&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Une fois ça fait, pensez à redémarrer votre image docker &lt;code&gt;docker restart mautrix-telegram&lt;/code&gt; et faites ensuite un petit &lt;code&gt;nixos-rebuild switch&lt;/code&gt;. Normalement, &lt;code&gt;matrix-synapse&lt;/code&gt; se redémarrera car le fichier &lt;code&gt;registration.yaml&lt;/code&gt; existera.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Vous pouvez maintenant constater que vous pouvez parler au bot dans votre client Matrix en ouvrant une conversation avec &lt;code&gt;@telegrambot:server_name&lt;/code&gt;.&lt;br/&gt;
Celui-ci devrait accepter votre invitation. Vous pouvez alors lui demander de l’aide comme il le propose. Pour lier votre compte, faites &lt;code&gt;!tg login&lt;/code&gt; et suivez les instructions.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Une fois connecté, attendez un peu et vous allez recevoir plein d’invitations :) Bien joué, tout devrait fonctionner !&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Le Bridge Facebook pour Matrix</title><link>https://nicolasguilloux.eu/articles/mautrix-facebook/</link><pubDate>Mon, 29 Mar 2021 00:00:00 +0000</pubDate><guid>https://nicolasguilloux.eu/articles/mautrix-facebook/</guid><description>&lt;img src="https://nicolasguilloux.eu/" alt="Featured image of post Le Bridge Facebook pour Matrix" /&gt;&lt;div class="paragraph"&gt;
&lt;p&gt;Matrix est un protocole de messagerie instantanée. La suite de ce ticket considère que vous connaissez les bases et notamment le glossaire. Je vous conseille fortement d’aller lire le tutoriel précédent :
&lt;a href="../matrix"&gt;Matrix sur NixOS&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_facebook_messenger"&gt;Facebook Messenger&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;&lt;a href="https://gitlab.com/NicolasGuilloux/nixos-configuration/-/blob/master/server/matrix/facebook.nix" target="_blank" rel="noopener"&gt;&lt;span class="image"&gt;&lt;img src="https://img.shields.io/badge/Gitlab-Mautrix%20Facebook-orange" alt="Gitlab"/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Bon, qu’on se le dise, j’aimerai bien partir de Facebook mais beaucoup de personnes ne veulent pas par simplicité. Même si ça m’embête pour des raisons évidentes, je dois rester dessus car j’ai vraiment des personnes que j’aime beaucoup qui refusent de passer sur d’autres plateformes.&lt;br/&gt;
C’est d’ailleurs un intérêt de ce bridge : je vais désinstaller toutes les applications Facebook, ma seule interaction sera via Matrix.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Dans un premier temps, on va préparer notre base de données afin d’y stocker les données utiles au bridge. Pour le moment, celui-ci ne supporte que PostgreSQL. Ca tombe bien, on a déjà une BDD disponible via le serveur Synapse. Aussi, on va pouvoir facilement créer un user et une base.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code&gt;sudo -u postgres psql
CREATE ROLE &amp;#34;mautrixfacebook&amp;#34; WITH LOGIN PASSWORD &amp;#39;VotreMotDePasseUnique&amp;#39;;
CREATE DATABASE &amp;#34;mautrixfacebook&amp;#34; WITH OWNER &amp;#34;mautrixfacebook&amp;#34; TEMPLATE template0 LC_COLLATE = &amp;#34;C&amp;#34; LC_CTYPE = &amp;#34;C&amp;#34;;
\q&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Une fois fait, on va pouvoir préparer notre module qui va démarrer l’image docker du bridge. On va aussi câbler ce bridge à notre instance Matrix.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code&gt;{ config, lib, ... }:

let
 bridgeFolder = &amp;#34;/var/lib/mautrix-facebook&amp;#34;;

 toListIfExists = path:
 if (lib.pathExists path) then
 [ path ]
 else
 [];
in {
 # Facebook bridge
 virtualisation.oci-containers.containers.mautrix-facebook = {
 image = &amp;#34;dock.mau.dev/tulir/mautrix-facebook&amp;#34;;
 extraOptions = [ &amp;#34;--network=host&amp;#34; ];
 volumes = [ &amp;#34;${bridgeFolder}/data:/data&amp;#34; ];
 };

 # Add configuration to Matrix server
 services.matrix-synapse.app_service_config_files = toListIfExists &amp;#34;${bridgeFolder}/data/registration.yaml&amp;#34;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Si on résume, toutes les données sont stockées dans &lt;code&gt;/var/lib/mautrix-facebook&lt;/code&gt;. On ajoute l’image docker qui permet de lancer le bridge.&lt;br/&gt;
La partie où on relie notre bridge à notre serveur est commentée pour le moment car le fichier en question sera généré par le bridge, et donc n’existe pas avant d’avoir bien parametré le bridge.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;On va dès maintenant le configurer en éditant &lt;strong&gt;en tant que root&lt;/strong&gt; le fichier &lt;code&gt;/var/lib/mautrix-facebook/data/config.yaml&lt;/code&gt;…​ Enfin faite votre &lt;code&gt;nixos-rebuild switch&lt;/code&gt; pour lancer le bridge.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;On va changer différentes clés dans le fichier, je vais lister les clés qui ont changé :&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code&gt;homeserver:
 address: http://localhost:8008
 domain: server_name
 verify_ssl: false

appservice:
 database: postgres://mautrixfacebook:VotreMotDePasseUnique@127.0.0.1/mautrixfacebook

bridge:
 permissions:
 &amp;#34;*&amp;#34;: user
 &amp;#34;@pseudo:server_name&amp;#34;: admin&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;homeserver.address&lt;/code&gt; : Votre serveur Matrix, pas besoin de passer par internet, il est disponible en local&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;homeserver.domain&lt;/code&gt; : C’est le &lt;code&gt;server_name&lt;/code&gt;, vous devriez maintenant savoir ce que c’est :)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;homeserver.verify_ssl&lt;/code&gt; : Comme on est dans une boucle locale, pas besoin de vérifier le SSL&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;appservice.database&lt;/code&gt; : Lien vers *votre base de données. Pensez à changer le mot de passe pour celui que vous avez utilisé au dessus.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;bridge.permissions&lt;/code&gt; : Ce sont les permissions. Pour ma part, j’ai mis &lt;code&gt;&amp;#34;*&amp;#34;: user&lt;/code&gt; pour que tous les utilisateurs puissent utiliser le bridge, et enfin &lt;code&gt;&amp;#34;@pseudo:server_name&amp;#34;: admin&lt;/code&gt; pour que votre utilisateur puisse l’administrer&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Une fois ça fait, pensez à redémarrer votre image docker &lt;code&gt;docker restart mautrix-facebook&lt;/code&gt; et faites ensuite un petit &lt;code&gt;nixos-rebuild switch&lt;/code&gt;. Normalement, &lt;code&gt;matrix-synapse&lt;/code&gt; se redémarrera car le fichier &lt;code&gt;registration.yaml&lt;/code&gt; existera.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Vous pouvez maintenant constater que vous pouvez parler au bot dans votre client Matrix en ouvrant une conversation avec &lt;code&gt;@facebookbot:server_name&lt;/code&gt;.&lt;br/&gt;
Celui-ci devrait accepter votre invitation. Vous pouvez alors lui demander de l’aide comme il le propose. Pour lier votre compte, faites &lt;code&gt;login &amp;lt;email&amp;gt;&lt;/code&gt; avec l’email de votre compte Facebook bien entendu ! Suivez ce qu’il vous dit, il va vous demander votre mot de passe et potentiellement votre code de double authentification.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Une fois connecté, attendez un peu et vous allez recevoir plein d’invitations :) Bien joué, tout devrait fonctionner !&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Matrix sur NixOS</title><link>https://nicolasguilloux.eu/articles/matrix/</link><pubDate>Fri, 26 Mar 2021 00:00:00 +0000</pubDate><guid>https://nicolasguilloux.eu/articles/matrix/</guid><description>&lt;img src="https://nicolasguilloux.eu/" alt="Featured image of post Matrix sur NixOS" /&gt;&lt;div class="paragraph"&gt;
&lt;p&gt;Comme beaucoup de personnes, j’ai beaucoup de messageries qui ont su évoluer (ou pas) dans le temps. Et chacune de ces messageries apporte ses avantages et ses inconvénients, et la plupart des gens ne veulent pas toutes les avoir. Et j’en fais partie !&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Aussi, j’ai toujours reluqué &lt;a href="https://matrix.org" target="_blank" rel="noopener"&gt;Matrix&lt;/a&gt; de loin. Les seules fois où j’avais abordé ce standard, j’ai été très déçu à cause de la lenteur de celui-ci et aussi le fait que ce soit extrêmement intimidant au niveau sécurité.&lt;/p&gt;
&lt;/div&gt;
&lt;div id="beeper" class="paragraph"&gt;
&lt;p&gt;&lt;span class="image center"&gt;&lt;img src="beeper.png" alt="beeper"/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Finalement, j’ai décidé de me lancer en entendant parler de &lt;a href="https://www.beeper.com" target="_blank" rel="noopener"&gt;Beeper&lt;/a&gt; qui permettait de centraliser plein de protocoles au même endroit. J’ai été déçu de voir que c’était très payant pour une utilisation domestique. Et j’ai remarqué par mon don incroyable de lecture de la seule et unique page disponible que Beeper était une application basée sur Matrix et la notion de bridges. Donc, en théorie, on peut faire la même chose sans payer.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_quest_ce_que_matrix"&gt;Qu’est-ce que Matrix&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Matrix est un standard OpenSource pour construire une messagerie sécurisée en temps réel et décentralisée. Beaucoup de buzz words, on va expliquer tout ça.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;C’est un &lt;strong&gt;standard&lt;/strong&gt;, ce qui veut dire que Matrix n’est pas un logiciel mais simplement une liste de fonctionnalités à implémenter afin de supporter le protocole. C’est un peu comme si on parlait d’un mixeur, qui est la fonctionnalité, ce qui ne l’empêche pas d’avoir un nom donné par la marque ou par les utilisateurs. Le mixeur de mes parents s’appelle Bob.&lt;br/&gt;
Une &lt;strong&gt;messagerie sécurisée en temps réel&lt;/strong&gt;, c’est assez simple à comprendre.&lt;br/&gt;
Pour le côté &lt;strong&gt;décentralisé&lt;/strong&gt;, ça veut dire que un seul et unique serveur n’est pas souverain du réseau. Ainsi, installer un serveur chez vous permettra d’avoir accès au service sur votre réseau. Matrix implémente aussi un système pour faire dialoguer les serveurs entre eux, comme ça votre serveur ne reste pas dans son coin et pourra dialoguer avec le monde extérieur.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;On a parlé plus haut des bridges, et ça c’est une des fonctionnalités de Matrix. Le principe est qu’on peut ajouter un genre de plugin qui joue le rôle d’interface avec quelque chose d’autre. Ouais c’est un peu abstrait, mais concrètement un bridge peut se charger en temps réel de relayer les messages d’une autre messagerie par exemple.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_installation_du_serveur"&gt;Installation du serveur&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;J’ai rassemblé tous mes efforts pour que tout fonctionne dans un dossier de mon installation NixOS. Il peut varier dans le temps, j’actualiserais le tutoriel et les liens vers ma configuration en fonction des updates.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_le_serveur_synapse"&gt;Le serveur Synapse&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;&lt;a href="https://gitlab.com/NicolasGuilloux/nixos-configuration/-/blob/master/server/matrix/server.nix" target="_blank" rel="noopener"&gt;&lt;span class="image"&gt;&lt;img src="https://img.shields.io/badge/Gitlab-Synapse-orange" alt="Gitlab"/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Tout commence d’abord par installer &lt;a href="https://matrix.org/docs/projects/server/synapse"&gt;Synapse&lt;/a&gt; qui est un serveur Matrix. Matrix étant un standard, Synapse est une implémentation de celui-ci. Si vous êtes déjà perdu, relisez le point précédent ;)&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Ici, NixOS nous a bien facilité la tâche vu qu’une configuration est disponible, donc on peut aller très vite.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code&gt;services.matrix-synapse = {
 enable = true;
 server_name = &amp;#34;matrix.nicolasguilloux.eu&amp;#34;;
 registration_shared_secret = &amp;#34;UnSecretTemporaire&amp;#34;;
 # enable_registration = true;

 listeners = [
 {
 port = 8008;
 bind_address = &amp;#34;::1&amp;#34;;
 type = &amp;#34;http&amp;#34;;
 tls = false;
 x_forwarded = true;
 resources = [
 {
 names = [ &amp;#34;client&amp;#34; &amp;#34;federation&amp;#34; ];
 compress = false;
 }
 ];
 }
 ];
};

# For the registration of a user
services.matrix-synapse.registration_shared_secret = &amp;#34;UnSecretTemporaire&amp;#34;;
environment.systemPackages = [ pkgs.matrix-synapse ];&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Il faut s’assurer que l’option &lt;code&gt;server_name&lt;/code&gt; correspond bien à l’adresse finale du serveur. C’est important pour faire dialoguer le monde extérieur avec notre instance. Si jamais vous vous lancez dans l’installation et que cette adresse est fausse, il faudra tout recommencer.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Ici, on n’utilise qu’un seul port : le &lt;code&gt;8008&lt;/code&gt;. C’est celui conseillé dans la documentation. Vous remarquerez qu’il n’y a pas de SSL, c’est parce que mon serveur sera exposé à travers un Reverse Proxy géré par Nginx. On va voir ça après.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;L’option &lt;code&gt;registration_shared_secret&lt;/code&gt; est là uniquement pour enregistrer votre utilisateur administrateur. Il faudra bien penser à l’enlever, car elle permet de créer des utilisateurs un peu comme on veut en utilisant le dit mot de passe.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Et enfin, pas besoin d’importer le paquet de Synapse dans ceux de système hormis pour l’inscription d’un nouvel utilisateur via un terminal.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_la_base_de_données"&gt;La base de données&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;&lt;a href="https://gitlab.com/NicolasGuilloux/nixos-configuration/-/blob/master/server/matrix/database.nix" target="_blank" rel="noopener"&gt;&lt;span class="image"&gt;&lt;img src="https://img.shields.io/badge/Gitlab-BDD-orange" alt="Gitlab"/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Il faudra aussi configurer une base de données PostgreSQL pour le serveur.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code&gt;# Manually configure PostgreSQL
# ref: https://www.foxypossibilities.com/2018/02/04/running-matrix-synapse-on-nixos/
services.postgresql.enable = true;
services.postgresql.initialScript = pkgs.writeText &amp;#34;synapse-init.sql&amp;#34; &amp;#39;&amp;#39;
 CREATE ROLE &amp;#34;matrix-synapse&amp;#34; WITH LOGIN PASSWORD &amp;#39;${config.secrets.matrix.database}&amp;#39;;
 CREATE DATABASE &amp;#34;matrix-synapse&amp;#34; WITH OWNER &amp;#34;matrix-synapse&amp;#34;
 TEMPLATE template0
 LC_COLLATE = &amp;#34;C&amp;#34;
 LC_CTYPE = &amp;#34;C&amp;#34;;
&amp;#39;&amp;#39;;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Ici, mon mot de passe est défini bien au chaud dans la config. Pensez à mettre votre mot de passe. Vous pouvez aussi faire cette étape à la mano en allant tater &lt;code&gt;sudo -u postgres psql&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_création_de_notre_admin"&gt;Création de notre admin&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Avant d’exposer sur Internet, on va déjà créer notre utilisateur admin puis désactiver la possibilité de s’enregistrer en utilisant les lignes de commandes. Comme ça, on ferme une porte !&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Ici, rappelez vous la &lt;code&gt;registration_shared_secret&lt;/code&gt; mis plus haut et simplement tapez la commande suivante&lt;/p&gt;
&lt;/div&gt;
&lt;div class="quoteblock"&gt;
&lt;blockquote&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;register_new_matrix_user --shared-secret &amp;#34;UnSecretTemporaire&amp;#34; &lt;a href="http://localhost:8008" class="bare"&gt;http://localhost:8008&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;On suit donc tout ce qu’il nous dit comme il faut en prenant soin de mettre votre utilisateur Admin.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_le_reverse_proxy"&gt;Le Reverse Proxy&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;&lt;a href="https://gitlab.com/NicolasGuilloux/nixos-configuration/-/blob/master/server/matrix/nginx.nix" target="_blank" rel="noopener"&gt;&lt;span class="image"&gt;&lt;img src="https://img.shields.io/badge/Gitlab-Nginx-orange" alt="Gitlab"/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;On va maintenant configurer notre Reverse Proxy pour qu’il puisse être accessible du monde extérieur. C’est important aussi pour pouvoir dialoguer avec les autres serveurs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlight"&gt;&lt;code&gt;let
 listenPort = port: ssl: {
 addr = &amp;#34;0.0.0.0&amp;#34;;
 port = port;
 ssl = ssl;
 };
in
{
 # Open port
 networking.firewall.allowedTCPPorts = [ 8448 ];

 # Reverse proxy
 services.nginx.virtualHosts.&amp;#34;matrix.nicolasguilloux.eu&amp;#34; = {
 enableACME = true;
 forceSSL = true;

 listen = [
 (listenPort 80 false)
 (listenPort 443 true)
 (listenPort 8448 true)
 ];

 locations.&amp;#34;/_matrix&amp;#34; = {
 proxyPass = &amp;#34;http://[::1]:8008&amp;#34;;
 };
 };
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Ici, on voit que nous redirigeons tout vers notre serveur Synapse. On peut aussi voir qu’on utilise le port 8448. Il est important car c’est ce port qui est utilisé par la fédération des serveurs Matrix. Ainsi, un serveur lambda ira questionner notre serveur via ce port uniquement.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Une fois tout installé, vous pouvez d’ailleurs &lt;a href="https://federationtester.matrix.org" target="_blank" rel="noopener"&gt;tester votre serveur&lt;/a&gt; pour voir s’il est bien accessible par la fédération.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Si vous avez tout bien fait, normalement vous devez pouvoir vous connecter sur &lt;a href="https://app.element.io/#/login"&gt;Element.io&lt;/a&gt;, modifier le serveur d’accueil (le fameux &lt;code&gt;server_name&lt;/code&gt;) et vous connecter.&lt;br/&gt;
Vous remarquerez alors que votre pseudo est &lt;code&gt;pseudo:server_name&lt;/code&gt;. Par exemple, pour ma part, c’est &lt;code&gt;nover:matrix.nicolasguilloux.eu&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_les_bridges"&gt;Les Bridges&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Une fois votre serveur fonctionnel, vous pouvez jouir de toutes les fonctionnalités de Matrix de base. Vous pouvez donc rejoindre des salons et discuter avec des personnes mêmes si elles ne sont pas sur votre serveur grâce à la magie de la fédération.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;On va maintenant pouvoir ajouter des bridges qui vont être les interfaces entre un autre protocole et celui de Matrix. En plus simple : ça va permettre d’envoyer des messages en utilisant Matrix vers des destinataires comme Signal ou encore Messenger.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Ici, je ne vais passer en revue que les bridges que j’ai implémenté sur mon serveur. On notera que la plupart ont été conçu par la même personne et donc ont le préfix &lt;code&gt;mautrix&lt;/code&gt;. On peut donc constater qu’ils se configurent quasiment de la même manière.&lt;br/&gt;
Je vais aussi essayer de trier l’ordre des bridges ci-dessous en fonction de leur difficulté à installer. Ça permettra de monter progressivement en difficulté.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;&lt;a href="../mautrix-facebook"&gt;&lt;span class="image"&gt;&lt;img src="https://img.shields.io/badge/mautrix-facebook-blue" alt="mautrix facebook blue"/&gt;&lt;/span&gt;&lt;/a&gt;
&lt;a href="../mautrix-telegram"&gt;&lt;span class="image"&gt;&lt;img src="https://img.shields.io/badge/mautrix-telegram-blue" alt="mautrix telegram blue"/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item></channel></rss>