Deblan blog

Simon Vieille

DevOp animé par la culture du libre et du hacking

Bilan tech de l'année 2020

Cette année très particulière m'a quand même permis de consacrer plus de temps pour le logiciel libre que l'an passé.

Mes efforts se sont naturellement dirigés vers les outils que j'utilise et c'est Nextcloud et son écosystème sur lesquels je me suis concentré.

Mon plus gros projet de 2020 est Custom menu, une application pour Nextcloud qui permet de modifier le menu par défaut en proposant d'autres affichages. Je suis très content du résultat et beaucoup d'administrateurs ont décidé de l'installer sur leur instance. En effet, toutes versions confondues, Custom menu a été téléchargé plus de 102 mille fois et les dernières versions sont installées sur environ 9000 instances.

J'ai réalisé du code pour faire évoluer l'application Forms on y ajoutant de nouveaux types de champ. Cela n'a pas du tout été évident d'échanger avec l'équipe de développement mais j'espère voir arriver ces évolutions dans une prochaine version.

Ensuite, j'ai traduis Analytics en français même si je ne suis pas satisfait. Je vais faire de nouvelles traductions l'année prochaine ! Cette application permet de mettre en graphique des données stockées sur Nextcloud ou accessibles depuis une API. C'est encore relativement basique mais c'est tout de même très pratique.

Même si le développement n'est pas très actif, j'utilise l'application Printer et j'ai proposé du code pour gérer les permissions et réduire les risques d'injection de code.

Dans un contexte très différent de Nextcloud, j'ai apporté un correctif au projet PDNS Manager, une interface web qui permet de gérer les enregistrements d'un serveur Powerdns.

J'ai récemment publié Mail RSS, une application pour transformer des emails en flux RSS. Enfin, un peu plus tôt cette année, j'ai mis en ligne les sources du site web qui permet de monitorer le terrarium de la maison.

Je crois avoir fait le tour de mon activité en espérant poursuivre en 2021 !


Décrets PASP : fichage massif des militants politiques

Décrets PASP : fichage massif des militants politiques

https://www.laquadrature.net/2020/12/08/decrets-pasp-fichage-massif-des-militants-politiques/

Après la loi sécurité globale et la loi séparatisme, le gouvernement poursuit son offensive généralisée visant à museler toute opposition politique. Mercredi dernier, les trois fichiers de « sécurité publique » (PASP, GIPASP et EASP) ont été largement étendus par trois décrets (ici, ici et là). Ils

On y est, on peut maintenant être fiché pour nos opinions politiques, nos convictions philosophiques, religieuses ou notre appartenance syndicale.

Alors pour reprendre un vieux débat sur la protection des données où on me répondait "je n'ai rien à cacher", ma réponse était systématiquement :

  • Bien sur que si, tu as des choses à cacher car ta vie privée est par définition privée
  • Dans un futur plus ou moins proche, on pourra te reprocher quelque chose encore toléré aujourd'hui.

Ce futur est maintenant le présent.

En dehors de toute activité, nos simples opinions seront inscrites dans un fichier d'état. C'est très grave et nous avons avançons encore vers un état totalitaire. Je pense que le point de non retour à été atteint.

Lien permanent


Le PDG de FaceBook, Mark Zuckerberg, malmené lors de son audition au Sénat américain (17/11/20)

Le PDG de FaceBook, Mark Zuckerberg, malmené lors de son audition au Sénat américain (17/11/20)

https://peertube.fr/videos/watch/b9880aae-a2fb-404c-9e56-b8f4d25d702e

Le PDG de FaceBook, Mark Zuckerberg, malmené par le sénateur Josh Hawley lors de son audition au Sénat américain. le 17 novembre 2020.

Lien permanent


Mail RSS : transformer des mails en flux RSS

J'essaye de plus en plus de réduire le volume de mails que je reçois. Du coup, quand une newsletter m'intéresse et que les auteurs ne fournissent pas de flux RSS, cela me donne un prétexte pour écrire un nouveau projet : Mail RSS.

Comment ça marche ?

L'idée est assez simple : en utilisant les alias de mail dans Postfix, on peut faire en sorte qu'un mail qui arrive sur le serveur soit traité par une commande. J'ai décidé de rediriger les mails dans un répertoire précis du serveur et je demande à Mail RSS de les lire et de les importer.

Prenons la newsletter de TechTrash comme exemple.

Configuration du serveur de mail

Il faut ajouter un alias qui va générer des fichiers.

techtrash: "| cat > /var/lib/mailrss/techtrash-$(date +%s) && chmod o+rw /var/lib/mailrss/techtrash-$(date +%s)"

Au préalable, j'ai créé le répertoire /var/lib/mailrss et je me suis assuré que mon application pouvait lire et écrire dedans, de même que Postfix (nobody:nogroup).

Configuration de l'application

On doit générer un mailing pour TechTrash. Quand on va importer les mails de TechTrash, on pourra les associer au mailing via son identifiant (ID). On pourra ensuite accéder au flux RSS via le lien généré à sa création. Évidement, on peut créer autant de mailing que l'on veut, les modifier et les supprimer.

$ php bin/console mailing:new "TechTrash"
$ php bin/console mailing:list
 ------------ -------------------------------------- ------------------------------------------------------------------------ --------------------- --------------------- 
  Label        ID                                     Feed                                                                     Created at            Updated at           
 ------------ -------------------------------------- ------------------------------------------------------------------------ --------------------- --------------------- 
  Tech Trash   xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   https://exemple.fr/mailing/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/rss      2020-11-12 13:37:00   2020-11-12 13:37:00  
 ------------ -------------------------------------- ------------------------------------------------------------------------ --------------------- --------------------- 

Enfin, il faut un script qui va traiter les fichiers de /var/lib/mailrss en les important dans le mailing correspondant et qui les supprime du serveur.

#!/bin/sh

cd "/path/to/exemple.fr"

import_mails() {
    LABEL="$1"
    MAILING_ID="$2"

    find /var/lib/mailrss -name "${LABEL}-*" | while read MAIL; do
        php bin/console mail:import "${MAILING_ID}" -f "$MAIL" && rm "$MAIL"
    done
}

import_mails "techtrash" "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Quand un mail est importé, les données récupérées sont :

  • Le sujet du mail
  • La date du mail
  • Le contenu HTML
  • Le contenu texte
  • Les pièces jointes

Toutes ces données seront accessibles à la consultation.

L'application s'appuie sur Symfony (en version de développement) et le code est totalement libre 😄


Cohabitation de Collabora Online et OnlyOffice sur Nextcloud

J'utilise énormément mon instance Nextcloud et dans certaines situations, j'ai besoin d'éditer soit des fichiers Open Document Format (format natif de LibreOffice) ou soit des fichiers Open XML (format natif de la suite office de Microsoft).

L'an passé, j'utilisais exclusivement OnlyOffice via son connecteur Nextcloud et une instance installée sur un serveur dédié. Puis, lors d'un déboire au sujet de l'édition depuis un terminal mobile, j'ai décidé de migrer vers Collabora Online via son connecteur Nextcloud et une instance installée sur un serveur (presque) dédié.

Le problème est que si Collabora Online sait très bien traiter les fichiers ODF, il galère un peu plus avec les fichiers Open XML. Aussi, force est de constater que OnlyOffice reste très performant pour jouer avec Open XML. J'ai donc décidé de les installer ensemble. Collabora Online est donc l'éditeur ouvert pour les documents ODF tandis que OnlyOffice le sera pour les fichiers Open XML.

Collabora Online et OnlyOffice

Afin de les discerner dans le menu pour créer un nouveau document, j'ai développé un bout de javascript que vous pouvez injecter via JSLoader. Je pense d'ailleurs que cela sera une bonne idée de forker cette application afin d'en reprendre la maintenance.

Cohabitation de Collabora Online et OnlyOffice sur Nextcloud

Alors ce n'est sans doute pas le code le plus élégant mais il fonctionne bien.

try {
    setInterval(function() {
        var elements = {
            'docx': 'onlyofficeDocx',
            'xlsx': 'onlyofficeXlsx',
            'pptx': 'onlyofficePpts',
        };

        for (var i in elements) {
            var selector = 'a.menuitem[data-action="' + elements[i] + '"] .displayname';
            var span = document.querySelector(selector);

            if (!span) {
                return;
            }

            if (span.innerHTML.indexOf(i) !== -1) {
                continue;
            }

            span.innerHTML = (i !== 'docx' ? 'Nouvelle ' : 'Nouveau ') + span.innerHTML.toLowerCase() + ' (' + i + ')';
        }

        elements = {
            'odt': 'add-odt',
            'ods': 'add-ods',
            'odp': 'add-odp',
        };

        for (var i in elements) {
            var selector = 'a.menuitem[data-action="' + elements[i] + '"] .displayname';
            var span = document.querySelector(selector);

            if (!span) {
                return;
            }

            if (span.innerHTML.indexOf(i) !== -1) {
                continue;
            }

            span.innerHTML = span.innerHTML + ' (' + i + ')';
        }
    }, 100);
} catch (e) {

}