etudes:etude_de_codimd

Présentation du logiciel

CodiMD est la version libre et communautaire de HackMD. Le service permet d’éditer en collaboration des documents en ayant des fonctionnalités plus poussées qu’EtherPad, ainsi on préférera ce service quand on veut une belle mise en forme ou inclure des images, des schémas, … Où encore lorsqu’on souhaite afficher le document comme diaporama ou comme un document “fini”. Cependant si on ne veux pas forcément s’inscrire et suivre très finement l’historique du document il faut choisir Etherpad.

La grosse force de CodiMD est le nombre de fonctionnalités présentes et le côté intuitif du logiciel. De plus il est vraiment possible de collaborer avec un simple lien contrairement à d’autres éditeurs où il est nécessaire d’utiliser un service tiers (espace cloud, dépôt git, …)

Il existe un fork du CodiMD maintenu par HackMD, ils ont autant de visibilité. Je conseille d’utiliser la version maintenue par HackMD car le développement est plus actif et plus sérieux, de plus il a pour objectif de suivre le service professionnel proposé par HackMD et il possède des fonctionnalités que le fork n’a pas encore.

Informations diverses

Il existe une API pour ce service mais la documentation n’est pas visible si elle n’est pas inexistante.

  • /status mène vers des statistiques publiques sur l’instance (nombre de pad, d’utilisateurs, …)
  • /history/<id du pad> pour voir l’historique d’un pad
  • /me pour voir les informations sur son utilisateur
  • /new pour faire un nouveau pad

Il est possible de voir les différents points de connexion à l’API sur routes.js

La tables Notes correspond aux pad dans leurs dernières versions. Il faut savoir que l’ID du pad dans l’URL n’est pas dans la même forme que celle sous laquelle il est stocké dans la BDD en effet il est codé en base64url dans l’adresse sans les tirets présents dans le champ ID de la BDD.

Ce script permet de transformer l’ID du pad dans l’URL en ID dans la BDD :

#! /bin/python3

import base64

i = input()

i = i.replace("_", "/")
i = i.replace("-", "+")
i = i + '=' * (4 - len(i) % 4)
i = base64.b64decode(i).hex()

o = i[0:8] + "-" + i[8:12] + "-" + i[12:16] + "-" + i[16:20] + "-" + i[20:32]

print(o)

Quant à elle, la table Revisions contient les différents patch à appliquer aux pad pour naviguer entre les versions. Enfin la table Authors contient l’historique des contributions des auteurs aux notes.

On supprime les révisions

DELETE FROM "Revisions" WHERE "Revisions"."noteId" = '<id-du-pad>';

On supprime le pad

DELETE FROM "Notes" WHERE "Notes"."id" = '<id-du-pad>';

On supprime l'historique contributions

DELETE FROM "Authors" WHERE "Authors"."noteId" = '<id-du-pad>';

Il n’existe pas pour l’heure de système de plugin ni de panel d’administration.

Ainsi il faut s’aider de la base de données pour supprimer un pad définitivement et il ne sera pas possible de supprimer les pad trop vieux à moins de faire un script dédié.

  • etudes/etude_de_codimd.txt
  • de rdelaage