Galères diverses sur mon instance etherpad

Ça fait quelques heures que je tourne en rond sur le sujet, je viens voir si vous avez des pistes, vu qu’Etherpad est un logiciel utilisé par pas mal de Chatons.

J’ai une petite instance etherpad, que j’ai mis à jour hier, jusque là… tout va bien (enfin en gros). Une de mes utilisatrices m’a demandé si je pouvais ajouter Mypads, j’ai décidé de m’en occuper aujourd’hui. J’ai bien galéré, ça ne voulais pas… j’ai fini par faire npm audit fix --force qui a « fait des trucs » et m’a surtout viré tous les plugins, mais à partir de là, mypads a réussi à s’installer.

Sauf que si je crée un utilisateur manuellement pour mypad, son compte n’est pas « validé » (et je ne vois pas d’endroit où le valider dans l’administration), si bien qu’il ne peux pas se connecter. Ça marche si je laisse les inscriptions ouvertes, sauf que je préfère réserver Mypads à des personnes identifiées. Savez-vous comment contourner ça ?

Par ailleurs, je voulais mettre « delete_after » sur les pads anonymes, mais comme je suis assez sûre que mes utilisatrices n’ont pas sauvegardé tous leurs pads, je préfèrerais tout exporter en amont et stocker ça dans un coin, pour les retrouver au besoin. J’avais une commande pour exporter la liste des pads (et un script ensuite pour tout exporter en html), malheureusement pour mysql ; or on est passé à postgresql lors de la dernière migration. Et je n’arrive pas à « traduire » la requête pour que ça marche avec psql. La commande initiale était ceci :
mysql -u etherpad -h localhost -Bqe 'select key from etherpad.store' -p | awk -F: '$1 ~ /pad/ {print $2}' | sort -u

Je ne suis pas douée avec les bases de données, c’est vraiment ma bête noire… Donc toute aide est bienvenue.

1 « J'aime »

Je ne peux pas t’aider pour la partie Mypads.

Par contre pour la commande pour la base de données à priori en msql tu utilisais l’option Batch qui permet de remplace le séparateur par des tabulations, les informations d’authentification, serveur et exécution de la requête.

Avec PostGreSQL, cela devrait ressemblait à quelque chose comme cela avec le mot de passe stocké dans une variable d’environnement par exemple mais ça doit être le cas pour ton script

pgsql -U etherpad -h localhost -F $'\t' -P pager=off -c "select key from etherpad.store" | awk -F: '$1 ~ /pad/ {print $2}' | sort -u

ici pas de sélection de database ou autre mais ta ligne de commande ne le faisait déjà pas.

Le mieux est déjà de tester juste la commande pgsql pour voir si le résultat correspond à ton besoin.

Je t’invite à consulter à minima la documentation entre les commandes MySQL https://dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html et celle de PostGreSQL PostgreSQL: Documentation: 15: psql.

Merci, ça a marché, avec un peu d’adaptation :slight_smile:
psql -U etherpad etherpad_db -h localhost -F $'\t' -P pager=off -c "select key from store" | awk -F: '$1 ~ /pad/ {print $2}' | sort -u > listepad.txt
Pour ceux qui sont aussi perdus que moi : après -U la première occurrence est l’utilisateur et la seconde est le nom de la bdd, qui parfois est différent (ça doit marcher avec juste « etherpad » si les deux ont le même nom). Et la table « store » ne marchait pas avec le préfixe de la bdd. Mais, à ce stade, c’était facile de corriger avec quelques essais.

Je me retrouve donc avec une jolie liste de pad. Bon, pas de bol pour moi, mon propre serveur me vire quand je tente de tout récupérer en utilisant la fonction d’export html (« too many request ! »). Il faut modifier settings.json temporairement pour que ça marche :

   * From Etherpad 1.8.3 onwards, import and export of pads is always rate
   * limited.
   *
   * The default is to allow at most 10 requests per IP in a 90 seconds window.
   * After that the import/export request is rejected.
   *
   * See https://github.com/nfriedly/express-rate-limit for more options
   */
  "importExportRateLimiting": {
    // duration of the rate limit window (milliseconds)
    "windowMs": 90000,

    // maximum number of requests per IP to allow during the rate limit window
    "max": 10
  },

C’est plutôt clair… ici j’ai donc passé le max au nombre de pad que j’avais dans ma liste, oui c’est un peu bourrin…

Ensuite un grand wget :

for i in $(cat ../listepad.txt); do wget --random-wait "https://mondomaindepad.org/p/$i/export/html" -O "$i.html"; done

Et penser à remettre les paramètres de settings.json à une valeur moins élevée.

Je ne sais pas si ça servira à d’autres, mais c’est là au besoin. C’est quand même le genre de manip qu’on a rarement besoin de faire :slight_smile: