Outils pour utilisateurs

Outils du site


doc:formations:hebergement:service:mattermost:scripts

Ceci est une ancienne révision du document !


Cf Mattermost.

Scripts mattermost avancés

Liste complète des utilisateurs, canaux et équipes

La façon la plus simple d'obtenir ces informations semble être de passer via SQL directement:

  ionice nice mysql --database mattermost -e 'SELECT DISTINCT u.Username, t.DisplayName AS TeamName, c.DisplayName AS ChannelName, cm.SchemeUser AS User, cm.SchemeAdmin AS Admin FROM ChannelMembers AS cm JOIN Channels AS c ON (cm.ChannelId=c.Id) JOIN Users AS u ON (cm.UserId=u.Id) JOIN Teams AS t ON (c.TeamId=t.Id);' > /tmp/mattermost_teams_and_members.txt

Derniers utilisateurs actifs sur Mattermost

Pour lister les dernières sessions des utilisateurs via MySQL:

cat << EOF | mysql -u root --database mattermost
SELECT
  FROM_UNIXTIME(t1.LastActivityAt/1000,"%Y/%m/%d-%H:%i") AS lastseen,
  tu.Username
FROM Sessions AS t1
LEFT OUTER JOIN Sessions AS t2
  ON t1.UserId = t2.UserId
        AND (t1.LastActivityAt < t2.LastActivityAt
         OR (t1.LastActivityAt = t2.LastActivityAt AND t1.Id < t2.Id))
JOIN Users AS tu ON tu.Id = t1.UserId
WHERE t2.LastActivityAt IS NULL
EOF

Réduire les images stockées

Cette commande va retrouver toutes les images qui dépassent d'un cadre 1600x1600 pixels et les réduire à cette taille (via imagemagick):

cd /opt/mattermost/data
MS=1600
find . -name '*.jpg' -exec identify -format '%w %h %i\n' {} \; 2>/dev/null |
  awk '$1 > '$MS' || $2 > '$MS' {sub(/^[^ ]* [^ ]* /, ""); print}' |
  tr '\n' '\0' | xargs -0 mogrify -resize "${MS}x${MS}"

Réduire le volume stocké en éliminant les vieux fichiers attachés

En fait, pour éviter de casser la base de donnée, on les remplace par un lien symbolique vers vers un fichier quasiment vide.

#!/bin/bash
OLDESTFILES='-30 days'
EMPTYTARGET='/opt/mattermost/deleted_file.txt'
MAXSIZE='500k'
 
if [[ "$USER" == 'root' ]]; then
	runuser -u mattermost -g mattermost "$0"
	exit
fi
 
echo "Fichier retiré" > "$EMPTYTARGET"
oldestok=$(date --date="$OLDESTFILES" +%s)
 
while IFS= read -r -d $'\0' line; do
	d=${line%%.*}
	if (( $d < $oldestok)); then
		cut -d' ' -f2- <<< "$line"
		fn=$(cut -d' ' -f6- <<< "$line")
		ln -sf "$EMPTYTARGET" "$fn"
	fi
done < <( find /opt/mattermost/data -type f -size "+$MAXSIZE" -printf "%A@ %TY-%Tm-%Td %TH:%TM (%k KO) %p\0" | sort -z )

Comptes Jitsi à partir de comptes Mattermost

Cf. jitsi

Pour créer des utilisateurs jitsi à partir des pseudo des utilisateurs mattermost (le mot de passe est le même pour tout le monde!)

#!/bin/bash
set -e
 
# Common password in jitsi:
PASS=${1-utok2mi}
HOW="Username"  # "Email" serait illégal en tant que Jabber username
 
cd /root/docker-jitsi-meet
echo "SELECT $HOW FROM Users;" |
  mysql -N -u root --database mattermost | grep -v 'surveybot' | while read PSEUDO; do
echo
  echo "Setting account for $PSEUDO"
  docker-compose exec prosody /bin/bash -c "prosodyctl --config /config/prosody.cfg.lua register '$PSEUDO' meet.jitsi '$PASS'"
  break
done

Gotify pour des notifications "push" sur Android

Installation de gotify et service web GET associé

Installer gotify en version docker sur le serveur, que l'on peut tester avec un serveur web déjà en place ainsi en redirigeant un port non standard (ex. 888) vers le port 80 standard du service dans le docker.

docker run -p 888:80 --name gotify -v /var/gotify/data:/app/data gotify/server

Vérifier qu'on peut y accéder depuis à ce port en HTTP.

Dans l'interface, on crée un utilisateur (nom et mot de passe), et une fois loggué sous cet utilisateur, on crée une "Application" (étiquetée Mattermost). Cela vous donne un Token qui permet d'envoyer des notification aux utilisateurs qui se sont loggués dans l'application Gotify Android. Bien comprendre qu'un token d'application n'enverra de notifications qu'à l'utilisateur qui a crée ce token! Il n'y a pas de mécanisme d'envoi simultané à plusieurs utilisateurs.

On bride ensuite gotify en localhost en modifiant le fichier /etc/gotify/config.yml, entrée listenaddr: "127.0.0.1" (et port 80).

docker stop gotify
focker rm gotify
docker run -d -p 888:80 --restart unless-stopped --name gotify -v /var/gotify/data:/app/data gotify/server

Configurer push.mondomaine.com géré par Nginx et avec son certificat letsencrypt (cf certbot).

On utilise la définition fournie par gotify pour nginx, à laquelle on a ajouté une section de proxy pour recoder une demande de notification GET en POST:

Puis ajouter une section dans nginx:

upstream gotify {
  # Set the port to the one you are using in gotify
  server 127.0.0.1:888;
}

server {

  # Here goes your domain / subdomain
  server_name push.yaknou.com;

  location /notify {
	# Recode incoming GET as gotify POST expectation
	#  curl 'http://127.0.0.1:888/message?token=GOTIFYAPPTOKEN' -F "title=whatever" -F "message=somemore"
        set $token    $arg_token;
        set $title    $arg_title;
        set $message  $arg_message;
        set $priority $arg_priority;
        proxy_method POST;
        proxy_set_header Content-Type "application/x-www-form-urlencoded";
        proxy_set_body 'title=$token&message=$message&priority=$priority';
        proxy_pass http://gotify/message?token=$token;
        set $args '';
  }

  location / {
      # We set up the reverse proxy
      proxy_pass         http://gotify;
      proxy_http_version 1.1;

      # Ensuring it can use websockets
      proxy_set_header   Upgrade $http_upgrade;
      proxy_set_header   Connection "upgrade";
      proxy_set_header   X-Real-IP $remote_addr;
      proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Proto http;
      proxy_redirect     http:// $scheme://;

      # The proxy must preserve the host because gotify verifies the host with the origin
      # for WebSocket connections
      proxy_set_header   Host $http_host;

      # These sets the timeout so that the websocket can stay alive
      proxy_connect_timeout   7m;
      proxy_send_timeout      7m;
      proxy_read_timeout      7m;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/visio.yaknou.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/visio.yaknou.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = push.yaknou.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    server_name push.yaknou.com ;
    listen 80;
    return 404; # managed by Certbot
}

Ainsi on peut maintenant déclencher une notification push Android via une requete web HTTPS GET:

https://push.mondomaine.com/notify?token=A973Z75XvGbyEUU&message=booom&title=topmoumoute&priority=9
doc/formations/hebergement/service/mattermost/scripts.1670410901.txt.gz · Dernière modification : 2022/12/07 11:01 de jeremie