Genèse
Après Lutim, qui permet d'héberger des images, je me suis dit « Pourquoi me limiter aux images ? ». Et puis, ça m'embêtait de chiffrer les images côté serveur. Bien sûr, pour pouvoir utiliser les images dans des balises <img>
, il fallait que le chiffrement et le déchiffrement se fasse côté serveur. Mais pour des fichiers, ça ne sert à rien.
J'ai donc pris exemple sur Zerobin, qui chiffre le texte côté client, en utilisant la bibliothèque Stanford Javascript Crypto et qui met la clé dans une ancre dans l'URL.
Avec ça, j'ai repris le mode de fonctionnement de Lutim (qui lui-même est fortement pompé sur mon logiciel Lstu), j'ai saupoudré de Bootstrap et de WebSocket et ça a donné Lufi !
Let's Upload that FIle
Du temps, de la sueur, des larmes, un bon éditeur de texte, le meilleur framework web du monde et voilà Lufi !
Le principe est simple :
- on dépose des fichiers dans la zone dédiée à cet effet ;
- le javascript génère une clé de chiffrement (différente pour chaque fichier) ;
- le fichier est découpé en morceaux ;
- chaque morceau est chiffré et envoyé via WebSocket au serveur ;
- vous récupérez deux liens : un lien de téléchargement et un lien de suppression.
Les bonus :
- les informations sur les fichiers envoyés sont stockées en localStorage sur le navigateur et une interface permet de visualiser ces informations ;
- on peut demander à ce que le fichier soit supprimé dès le premier téléchargement ;
- on peut définir un délai d'expiration après lequel le fichier est supprimé.
Pour les admins/développeurs :
- les instructions d'installation sont sur le wiki ;
- on peut définir des paliers de tailles, forçant le délai de suppression. Exemple : les fichiers de moins de 10Mio pourront rester 60 jours, ceux entre 10Mio et 50Mio, 30 jours et au-delà de 50Mio, 2 jours. Cela permet de limiter l'utilisation de l'espace disque ;
- le code est sous licence AGPL v3 et le code est sur le Gitlab de Framasoft avec un miroir sur Github ;
- c'est codé en Perl avec le framework Mojolicious, la bibliothèque Stanford Javascript Crypto, du Twitter bootstrap pour le CSS, des icônes piochées sur Fontello et la bibliothèque Moment.js. Tout le javascript est écrit en Vanilla Javascript.
Pour le logo :
- phonétiquement parlant, en français, Lufi sonne comme Luffy, le personnage principal du manga One Piece. Luffy est surnommé « Chapeau de paille », et comme Lutim avait déjà un chapeau pour logo… Un coup d'inkscape, et hop ! (Lstu a d'ailleurs récemment gagné un chapeau comme logo)
Framadrop
Lufi sera le logiciel utilisé par Framasoft pour proposer le service Framadrop1 dans le cadre de l'opération Dégooglisons Internet.
Par ailleurs, la saison 2 de la campagne de Dégooglisation a commencé aujourd'hui : n'hésitez pas à soutenir Framasoft pour qu'on puisse continuer !
Bon alors, c'est où qu'on clique ?
Contrairement à Lutim, je ne proposerais pas d'instance officielle, juste une instance de test : https://demo.lufi.io (hébergée par Framasoft, comme Erco, merci à eux :D).
En effet, il risque d'y avoir besoin de pas mal d'espace disque pour opérer un service comme celui-ci. Je ne peux pas me permettre financièrement de prendre un serveur pour ça, ni demander à Framasoft de me prêter une VM pour ça, alors qu'on proposera Framadrop à la fin de la semaine.
Nota Bene
Alors, non, c'est pas parce que Framasoft voulait sortir un tel service que j'ai codé Lufi, c'est plutôt parce que je voulais coder Lufi que Framasoft propose Framadrop. Framasoft ne fait toujours pas de code (excepté Framadate). J'ai codé Lufi en dehors de Framasoft bien que j'en sois membre.
Lufi est encore jeune, donc si vous repérez des problèmes, n'hésitez pas à ouvrir un ticket !
Du coup, j’arrête le développement de Coquelicot ?
Si t’as besoin d’une suite de test d’intégration, peut-être que c’est possible de reprendre au moins des bouts de descriptions :
https://coquelicot.potager.org/gitweb/?p=coquelicot.git;a=tree;f=features;hb=HEAD
> Du coup, j’arrête le développement de Coquelicot ?
C’est toi qui vois 😀 Tu peux plutôt prendre des trucs de chez moi (genre chiffrement côté client) pour les intégrer à Coquelicot : c’est toujours bon d’avoir le choix entre les logiciels. Par exemple, j’aime beaucoup le « zero’ed files before removal », je vais te piquer l’idée => hop : https://git.framasoft.org/luc/lufi/issues/29
Merci pour les tests d’intégration, faudra que je m’y penche un jour :p
Un des trucs que j’avais en tête pour « un jour », c’était de voir si c’était possible d’utiliser la même crypto côté client et côté serveur de façon à laisser le choix aux users d’utiliser JavaScript ou non.
Dans les deux cas, je pense qu’on est sur un niveau de sécurité équivalent. Vu que c’est le serveur web qui fournit le JavaScript — à moins de partir sur un modèle avec des extensions façon CryptoCat — si le serveur est compromis, c’est cuit, quelque soit l’endroit où se fait le chiffrement.