Table des matières
Angerwhale est un blog écrit en Perl par Jonathan Rockway dont les documents sont stocké sur le disque. Aucune base de donnée n'est donc nécessaire.
Il intègre un système de cryptographie
Les documents peuvent être publiés sous divers formats ( text , wiki , HTML , POD , ...) et leurs auteurs déterminés par leur signature numérique. Les catégories , commentaires , tags , Feed RSS/XML/YAML sont aussi supportés.
La colorisation assure une lecture agréable des codes source.
Les documents stockés produisent du XHTML1.1 .
En un mot du bonheur ;)
Angerwhale s'appui sur la framework MVC Calayst dont la devise est 'Pourquoi réinventer la roue ?' , et qui de ce fait est créé à partir de nombreux modules Perl déjà développés.
Donc pour installer AngerWhale il nous faut dans un premier temps procéder à l'installation de Catalyst.
Sous Debian les packages Catalyst sont présent dans la distribution. J'imagine qu'ils doivent aussi l'être pour de nombreuses autres.
apt-get install libcatalyst-perl libcatalyst-modules-perl libcatalyst-modules-extra-perl
Testons immédiatement le fonctionnement de Catalyst par la création d'un simple site.
catalyst.pl MonSite ... cd MonSite perl script/monsite_server.pl
Vérifons en se connectant à
l'url
http://localhost:3000/
Et maintenant en avant pour l'installation d'AngerWhale
wget http://search.cpan.org/CPAN/authors/id/J/JR/JROCKWAY/Angerwhale-0.04.tar.gz tar xvzf Angerwhale-0.04.tar.gz cd Angerwhale-0.04 perl Makefile.PL make make test
On peut maintenant tester AngerWhale
perl script/angerwhale_server.pl
De
la même manière on se connecte à
http://localhost:3000/
Les yeux émerveillés on découvre ça:
|
Angerwhale est très simplement configurable, il nous suffit pour
cela d'éditer le fichier
angerwhale.yml
.
cat angerwhale.yml
- ---
title: Angerwhale
description: Welcome to Angerwhale. You should change this.
author: Your Name
contact: nobody@example.com
base: __path_to(root/posts)__
sidebar_picture: ~
#date_format: %c
language: en-us
feeds: ~
#feeds:
# - title: "delicious"
# location: "http://del.icio.us/rss"
#max_feed_entries: 5
# pick your theme, currently "legacy" or "phokus"
theme: phokus
On peut donner un nom et une description à notre blog.
Décommenter date_format pour que les dates soient affichée avec la locale qui va bien, changer le thème ...
Un autre fichier permet le paramétrage du blog, il s'agit de
root/resources.yml
.
Dans ce fichier nous pourrons créer un nouveau thème, ajouter/supprimer un filtre.
Rien de plus simple :)
Dans le répertoire
root/posts/
on dépose un
document ayant une extension
txt
par
exemple.
echo "Mon premier document au format texte" > root/posts/test1.txt
goto
http://localhost:3000/
et merveille ça
fonctionne.
On peut aussi tester avec des documents pod, html ... voir les
formats supporté dans
lib/Angerwhale/Format/
|
Une catégorie est représentée par un répertoire et donc si l'on souhaite qu'un document appartient à une catégorie il nous faut le lier à celle-ci.
Et comment fait-on ? par la création d'un lien symbolique vers le document, ainsi le document peut appartenir à plusieurs catégories.
mkdir root/posts/categorie1 mkdir root/posts/categorie2 cd root/posts/categorie1 && ln -s ../test1.txt . cd ../categorie2 && ln -s ../test1.txt .
Notre document appartient à ces deux catégories :)
|
Angerwhale intègre un mécanisme permettant la signature des commentaires et l'authentification utilisateur via clé de cryptage. Voici une méthode pour l'utiliser.
Pour signer un message il faut posséder une clé de cryptage. GPG nous permet d'en créer une simplement:
gpg --gen-key
Nous pourrons ensuite utiliser notre clé fraichement créée pour signer un message
gpg --clearsign --armor msg.txt
Mouai ... c'est bien beau mais comment Angerwhale saura que cette clé est valide ?
Il faut qu'elle soit connue du reste du monde ...
Nous allons enregistrer notre clé sur un serveur de clé, par exemple
http://pgp.mit.edu/
.
Voyons pour cela l'identifiant de notre clé:
gpg --list-keys /home/gaston/.gnupg/pubring.gpg - ---------------------------- pub 1024D/12345678 2007-03-31 uid gaston athur gaston.arthure at toto.fr sub 1024g/87654321 2007-03-31
Notre identifiant dans ce cas sera : 12345678
On s'enregistre auprès du serveur de clé avec la commande suivante:
gpg --keyserver pgp.mit.edu --send-keys 12345678
Maintenant
on force Angerwhale à chercher les clés sur
pgp.mit.edu
. Dans le fichier angerwhale.yml on ajoute
simplement:
keyserver: pgp.mit.edu
Une vérification s'impose. Pour cela nous allons tout dabord signer un document et dans un second temp nous connecter à Angerwhale.
cd root/posts/
gpg --clearsign --armor test1.txt
...
Et en effet, le nom enregistré dans la clé apparait dans l'entête du message
L'étape suivante est de se connecter à Angerwhale. => Login
Le texte qui apparait dans la fenre de saisie doit être signé. On le copie dans un fichier et on le signe.
Le texte a copier dans msg.txt
- --- !!perl/hash:Angerwhale::Challenge
date: 1180355692
nonce: 267680616209453840849248415704288288287
uri: http://localhost:3000/
gpg --clearsign --armor msg.txt
Le contenu du fichier msg.txt.asc sera à copier/coller en remplacement du précédent.
Et nous voilà connecté :)
Il nous est maintenant possible de poisitonner des tags en cliquant sur le '+' et après avoir indiquer le tag, cliquer sur 'ok' pour confirmer.
Chaque document lors de se création dispose de divers attributs
(author, signed, tags, data ...). Les données (le texte brut) pour être
affichées sont passées à travers divers plusieurs filtres. Angerwhale
dispose aujourdui de 9 filtres configurés dans
root/resources.yml
:
-
Encoding : decode les données et metadonnées en utf8 et les transforme en caratères Perl
-
Checksum : ajoute le checksum du document aux metadonnées
-
Title : Le titre du document
-
Author : son auteur
-
PGP : Decode les infos PGP du document et les enregistre dans les metadonnées.
-
Format : j'en parle dessous
-
Summary : Les premières lignes du documents
-
URI : Les urls du documents
-
Finalize : et le dernier qui transfère toutes données receuillies à un objet FinalizedItem
L'un d'eux nous intéresser plus particulièrement : le filtre Format
Ce filtre, comme son nom l'indique, formate les documents en fonction de leur extention. Il existe donc plusieurs 'Formatter' pour les type de documents connus d'Angerwhale. Ainsi un fichier texte utilisera le Formatter PlainText.pm
Si l'on se penche sue celui-ci on constate qu'il dispose d'une methode 'can_format' qui vérifie que le fichier comprte l'extention voulue:
sub can_format { my $self = shift; my $request = shift; return 100 if ( $request =~ /te?xt/ ); return 1; # everything is text, so let this match a little }
Une autre méthode importante est 'format'. Celle-ci est chargée de formater le texte brut.
Il est donc très simple de créer de nouveaux Formatter :)
A ce propos ce document est créer au format Docbook pour lequel j'ai développé le Formatter DocBook.pm (J'aime ce format très structué :)
Je me suis aussi amusé sur le formatter 'Links' qui permet d'afficher des urls relatives à une catégories.
Toutes les contributions sont bienvenues, Jonathan les acceptera bien volontiers :)



Commentaires: