index.RiffZone.net

Index est le serveur web custom de la RiffZone, en cours de développement. Réalisé en GoLang et conçu pour s'exécuter sous Docker, il implémente actuellement un markdown primitif mais surtout un mécanisme d'héritage topologique, basé sur l'arborescence de fichiers plats. La RiffZone sert de bac à sable pour la mise au point de ce moteur.

Architecture

Au même niveau que l'exécutable (index), un dossier "hosts" contient les domaines inversés gérés par le moteur, par exemple:

hosts
net.riffzone.foobar
net.riffzone.whatever
index

Index sert classiquement des fichiers HTML, avec un petit plus concernant l'interprétation de balises specifiques, et surtout un mécanisme global d'héritage. Voyons ça de plus près.

Includes

La balise d'inclusion est assez simple à comprendre, prenons par exemple l'aborescence de site suivante :

net.riffzone.whatever
index.footer.html
index.header.html
index.html

Le fichier index.html de la page d'accueil de ce site ne contenant que trois lignes :

<include:index.header.html> Lorem ipsum, ad nauseam. <include:index.footer.html>

Les balises font référence aux deux fichiers "index.header.html" et "index.footer.html", qui seront inclus respectivement avant et après le lipsum pour former le contenu HTML final.

Ces header et footer pourront par ailleurs être hérités, via le mécanisme que nous allons voir maintenant.

Héritage

Pour chaque spécification de fichier, spécifiée explicitement ou déterminée par défaut, celui-ci est recherché dans le répertoire spécifié puis dans les dossiers parents, en remontant l'arborescence jusqu'à la racine du domaine.

Prenons l'exemple ci-dessous :

index.footer.html
index.header.html
index.html
index.page
section1
index.page
section2
index.page

Si on demande l'adresse https://domain.tld/section1, les fichiers index.html (par défaut), index.header.html et index.footer.html seront pris à la racine du site, alors que seul le fichier index.page sera pris à l'emplacement correspondant à la requête.

Variables

Les variables globales ou définies à divers niveau de l'arborescence dans les fichiers index.settings ou même en entête des fichiers .page, sont accessibles via la syntaxe suivante :

<=VARNAME>

Par exemple, sont définis globalement au niveau d'une requête :

<=HOST> : le domaine de la requête <=URL> : l'adresse de la requête

Pages

Les pages sont des fichiers texte intégrant des sections de type markdown mais avec leur syntaxe spécifique. Les fichiers .page sont interprétés de manière à générer html, css et javascript. Il y a deux styles de marqueurs, d'abord les marqueurs de style empruntés à MediaWiki par exemple, ensuite des marqueurs de section sous la forme STUFF: en entrée puis :STUFF en sortie, avec les paramètres ou le contenu au milieu.

Important: les fichiers de description de pages ne contiennent PAS de code HTML, encore moins de JavaScript ou de CSS, le but est d'avoir des documents faciles à migrer d'un écosystème à un autre, ce qui impose des fonctionnalités volontairement limitées aux seules balises définies ici.

Les balises spécifiques aux fichiers de pages sont détaillées ici :

Thèmes

Un mécanisme simple de thèmes est implémenté en tirant parti du mécanisme d'héritage. Il suffit de créer un sous-dossier dans le dossier "themes" situé au même niveau que l'application, nommons-le par exemple "riffzone", il suffira pour l'activer de rajouter la ligne suivante au fichier "index.settings" situé à la racine du site concerné :

THEME=riffzone

A partir de ce moment, lorsque l'héritage ne trouvera pas un fichier html, celui-ci sera cherché en dernier ressort dans le dossier du thème désigné. Typiquement, on pourra y trouver un index.html par défaut, un index.header.html, un index.footer.html, ces fichiers pouvant contenir des variables dont les valeurs se trouveront dans les index.settings du site.

Authentification

L'authentification est en cours de design, on trouvera ci-dessous des spécifications temporaires susceptibles de changer radicalement à n'importe quel moment :

Todo

Tant de choses !...

Cette page et quelques autres sont propulsées par Index