## Changer l'URL d'une équipe
Cette opération n'est pas supportée officiellement par Mattermost et demande une manipulation en base de données de production.
Cette méthode passant par Traefik, elle ne fonctionnera pas pour les clics sur un « ancien lien » directement dans Mattermost, car tout se fait côté client. Il faut ouvrir le lien dans un nouvel onglet. C'est donc plutôt destiné aux liens externes qu'aux liens internes. Les cas d'utilisations sont limités, mais vraisemblables.
Depuis que la gestion des redirections est gérée [côté Traefik](https://gitlab.utc.fr/picasoft/projets/services/traefik/-/merge_requests/2) plutôt que côté [labels Mattermost](https://gitlab.utc.fr/picasoft/projets/services/mattermost/-/commit/670ac9f3145d24292f2cb7f91550cf35070921d9), il est possible de changer l'URL d'une équipe qui le demande en toute transparence et sans interruption de service.
Cette opération se fait en deux temps.
### Changement en base de données
On se connecte à la base de données sur la machine où tourne Mattermost :
```bash
# Le nom du conteneur peut changer, voir le fichier Compose de Mattermost
docker exec -it mattermost-db bash
# Shell PostgreSQL avec utilisateur mattermost
psql -U mattermost
```
Mattermost est bien fait de ce côté là : la chaîne servant à construire l'URL est stockée à un seul endroit et fait référence. Changer cette valeur est sans effet de bord, à part celui de casser les liens avant le changement (voir section suivante).
Exemple : on souhaite changer le nom de l'équipe `rencontres-sc21` en `rencontres-scenari`. On commence par chercher l'identifiant de l'équipe :
```sql
SELECT id, name FROM teams WHERE name='rencontres-sc21';
id | name
----------------------------+----------------
u8muibe6gfdx5xqauh7u83535o | rencontres-sc21
```
On met à jour ce nom :
```sql
UPDATE teams SET name='rencontres-scenari' WHERE id='u8muibe6gfdx5xqauh7u83535o';
UPDATE 1
```
On aurait pu directement faire un `UPDATE` avec un `WHERE` sur `name`, mais sait-on jamais, mieux vaut s'en tenir à l'identifiant, clé primaire assurée d'être unique, et vérifier qu'il n'y a pas de doublon.
À partir de ce moment, l'URL `https://team.picasoft.net/rencontres-scenari` est active et correspond à l'ancienne équipe `https://team.picasoft.net/rencontres-sc21`.
### Mettre en place une redirection
Il faut modifier la [configuration dynamique de Traefik](https://gitlab.utc.fr/picasoft/projets/services/traefik/-/blob/master/dynamic_config/traefik_dynamic.yaml). Le mieux est de le faire directement sur la machine, afin de tester/debug.
En effet, Mattermost utilise le middleware `mattermost`, de type [chain](https://doc.traefik.io/traefik/middlewares/http/chain/).
Middlewares ? Chain ?
Pour rappel, Traefik peut appliquer des opérations entre le moment où il reçoit la requête et le moment où il la transmet à Mattermost. Ce sont des middlewares. Le type `chain` permet d'enchaîner plusieurs middlewares.
Il suffira pour l'occasion de créer un nouveau middleware :
```yaml
mm-redirect-scenari:
redirectRegex:
regex: "https://team.picasoft.net/rencontres-sc21(.*)"
replacement: "https://team.picasoft.net/rencontres-scenari${1}"
permanent: true
```
Astuce : pour être certain·es que ça fonctionne, tu peux tester avec un exemple sur ce [bac à sable Go](https://go.dev/play/p/mWU9p-wk2ru).
Il faut ensuite ajouter le middleware fraîchement créé au middleware Mattermost :
```yaml
mattermost:
chain:
middlewares:
- mm-redirect-scenari
```
Et sauvegarder le fichier. Le middleware est immédiatement appliqué sans besoin de redémarrage.
Si ça ne fonctionne pas, modifier par essai/erreur.
S'aider du [[technique:adminserv:traefik:dashboard|dashboard Traefik]] en cas de doute : est-ce-que le middleware est bien pris en compte ? etc.
Plus qu'à commit, pousser.