Logo

Changelog #2

Amélioration du parser Markdown et stats :D

Screenshot de ma forge git affichant les derniers commits.
Les commits derrières ce changelog.

Parser markdown

Maintenant, il est capable de remplacer n'importe quel caractère par une séquence prédéfinie ! Dans mon cas, je remplace ~ par   (comme si c'était du LaTeX).

J'ai réglé le bug où il y avait toujours un linebreak au début des balises `code`. (En fait, il était vraiment simple à reproduire : j'avais juste oublié d'écrire des tests pour vérifier que tout marche bien, oupse.)

J'ai aussi réécrit la génération du code HTML. Le nouveau package dom sert à représenter n'importe quel élément HTML et à faire un rendu propre. L'unique bémol est que je gère des attributes via une map, donc le résultat devient non-déterministique, ce qui est embêtant pour les tests.

J'en ai profité pour réécrire une bonne partie du parsing des paragraphes. Il est devenu tout propre et il fonctionne parfaitement :D

Statistiques

Dernière modification notable : j'ai relié le site à une database sqlite pour pouvoir compter le nombre de visite et pour connaître l'origine des requêtes (à l'aide de l'en-tête HTTP Referrer). Il est évidemment conforme au RGPD, car je ne garde aucune donnée personnelle : je ne traque rien, je ne fais que compter les chargements de page. (Vous pouvez le vérifier en allant lire le code source.)

Mais comment ai-je fait pour dégager les bots sans vérification client-side (car oui, je n'utilise toujours pas de JavaScript) ? J'ai considéré que les bots ne chargent pas le CSS, donc je ne compte une visite que si le CSS est chargé et s'il possède l'en-tête Referrer vers une page du site.

Pour y avoir accès, j'ai créé un panel admin protégé par un mot de passe. J'utilise l'auth HTTP Basic, car je n'ai pas besoin de plus. Il y a évidemment un rate-limit très agressif et j'utilise des fonctions cryptographiques pour éviter de leak des informations. Seul point faible : le mot de passe est écrit en clair dans le fichier de config. Or, si un attaquant accède à la config, il peut aussi lire la database (qui se trouve dans le même dossier avec les mêmes permissions), donc l'hasher me semble useless...

Malgré l'ajout de mattn/go-sqlite3, on passe à 3 dépendances en runtime, car j'ai supprimé go-chi/httplog et joho/godotenv ! (J'ai remplacé httplog par un logger maison.)