# Matrix

Il y a 3 logiciels principaux + des bridges:
 * **Synapse**, le serveur 
 * **Element**, le client web
 * **Matrix-authentication-service**, une brique d'auth pour matrix 2.0 (element X)

Les clients sont listé ici: `https://matrix.org/clients/` Tous ne supporte pas le sso ni le chiffrement. Les trois suivant fonctionnent.

**Fluffy chat** : Client android et ios plutot complet `https://gitlab.com/famedly/fluffychat`   
**Fractal** : Pour Linux: client GTK moderne (il y a son cousin en QT6, mais fractal est mieux)  
**Element web** : l'officiel, `client.matrix.fede.re`, il y a aussi l'app dans les apps store   

# Synapse

Synapse est installé via dnf. via le repo suivant: https://obs.infoserver.lv/project/monitor/matrix-synapse 

Sa config est dans `/etc/synapse/homeserver.yaml`

Un example de config: `https://github.com/matrix-org/synapse/blob/master/docs/sample_config.yaml`

Si il y a un problème de connexion à la base de donnée:

 - verifier si postgresql fonctionne
 - verifier que le fichier `/var/lib/pgsql/data/pg_hba.conf` contient 
```
host    synapse         synapse_user    ::1/128                 md5
```
### SSO (avec openid avant Matrix-authentication-service)

```
oidc_providers:
  - idp_id: keycloak
    idp_name: "PPSfleet"
    issuer: "https://auth.ppsfleet.navy/realms/Ppsfleet"
    client_id: "synapse"
    client_secret: "****"
    scopes: ["openid", "profile"]
    allow_existing_users: true # important so it will not create new account
    user_mapping_provider:
      config:
        localpart_template: "{{ user.preferred_username }}"
        display_name_template: "{{ user.name }}"
    backchannel_logout_enabled: true # Optional
```

# Element

Element est installé dans `/srv/www/client.matrix.fede.re/current`

# Matrix-authentication-service

La conf est dans `/etc/containers/systemd/matrix-auth.container`. Pour gerer:

```
systemctl start/stop matrix-auth
```

Le fichier est équivalent à cette commande podman:

```
podman run -e MAS_CONFIG=/app/config/config.yaml -v /etc/matrix-auth/config.yaml:/app/config/config.yaml:Z -p 127.0.0.1:9292:9292 -p 127.0.0.1:9291:9291 --name matrix-auth ghcr.io/element-hq/matrix-authentication-service
```

# Les bridges

Les bridges sont installé via podman dans `/opt/matrix-bridges/<bridge>` avec l'user `matrix-bridges`


## Facebook

### Install

https://docs.mau.fi/bridges/python/setup/docker.html?bridge=facebook

### Run
Commande pour run le docker facebook:  
```
podman run --name matrix-facebook -d -p 127.0.0.1:29319:29319 -v /srv/matrix-bridges/facebook:/data:z dock.mau.dev/mautrix/facebook:latest
```

## Whatsapp

```
podman stop matrix-whatsapp
podman rename matrix-whatsapp matrix-whatsapp-old
podman pull dock.mau.dev/mautrix/whatsapp:latest
podman run --name matrix-whatsapp -d -p 127.0.0.1:29318:29318 -v /opt/matrix-bridges/whatsapp:/data:z dock.mau.dev/mautrix/whatsapp:latest
```

## Telegram

```
podman pull dock.mau.dev/mautrix/telegram:latest
podman run --name matrix-telegram -d -p 127.0.0.1:29317:29317 -v /opt/matrix-bridges/telegram:/data:z dock.mau.dev/mautrix/telegram:latest
```
## Discord

https://gitlab.com/mx-puppet/discord/mx-puppet-discord


## Instagram

https://docs.mau.fi/bridges/general/docker-setup.html?bridge=instagram

Le `docker-compose.yml` ne sert finalement pas.

### Docker network

```
podman network create matrix-instagram
```

### Postgres

Pas de `sqlite` :/

```
podman run -d --name matrix-instagram-postgres -e POSTGRES_PASSWORD='*****' --network=matrix-instagram --restart always postgres:14
```
<!-- -p 127.0.0.1:5435:5432 -->

### Run

```
podman run -d --name matrix-instagram --restart unless-stopped -v /srv/matrix-bridges/instagram:/data:z --network=matrix-instagram dock.mau.dev/mautrix/instagram:latest
```


## Whatsapp to telegram

```
## canal whatsapp management room
doin <whatsapp-room-id> set-pl @tjiho:fede.re 100
# inviter le bridge telegram dans le groupe whatsapp puis
doin <whatsapp-room-id> set-pl @telegrambot:fede.re  100

## dans la room whatsapp
!tg create
```