Voilà, j'ai commencé la toute nouvelle version de NODE. Et comme le nom n'est du coup plus très adapté, on en change, pour un nom qui n'est pas un acronyme, qui n'a rien a voir avec le but du logiciel, mais que j'aime: sedna. C'est le nom de l'hypothétique 10ème planète du système solaire qui a été découverte cette semaine.

Bref, qu'est-ce que sedna vous réserve ? Et bien d'abord il y a une nouvelle architecture, qui s'appuie sur le modèle client/serveur. Le principe est simple: d'un côté on à un serveur qui s'occupe de gérer les données, de l'autre le client, qui les affiche. Les deux communiquent grâce à XML-RPC, via HTTP donc. J'utilise la librairie de Keith Devens car elle est simple et efficace (enfin, il a fallu que je modifie deux trois petites choses mais rien de méchant). La partie serveur sera donc codée en PHP, car c'est le langage que je connais le mieux, je me sens donc plus à même d'effectuer tout le travail qu'il y a faire dans ce langage.

Côté client, j'en prévois au moins un en PHP (phedna) mais je regarde aussi du côté de XUL et python. A vrai dire, tous les langages disposants d'une implémentation d'XML-RPC sont éligibles pour développer un client sedna.

Revenons au serveur. Le serveur disposera de modules (bookmarks, contacts, etc.) qui mettront à disposition des méthodes (bookmarks.add, bookmarks.listAll, etc.). Chaque module dispose de son repertoire dédié dans le repertoire modules. Il existera une famille de méthodes spéciales, la famille system, qui contiendra des méthodes comme methodNotFound ou listModules, ainsi qu'au moins un module spécial user qui permettra la gestion des utilisateurs avec des méthodes telles que auth et register. La gestions des sessions est simple. A la connection, le client doit émettre une requête user.auth avec comme paramètres le login et le password; en retour le serveur renverra soit un id de session, soit une erreur si l'authentification échoue. Une fois l'authentification réussie. Une fois l'authentification réussie, le serveur attend du client qu'il passe comme premier paramètre de chaque requête son id de session. Si aucun id de session n'est envoyé, l'accès au serveur sera refusé. L'id de session est stocké dans le serveur de données (mysql pour l'instant) en concordance avec le login de l'utilisateur ainsi que son ip. Un test est effectué pour vérifier que l'id de session correspond bien à l'ip du client. Cet id de session n'expire jamais. En cas de changement d'ip du client, il faut se re-authentifier.

Voilà, les bases de sedna sont jetées, et le développement à commencé et devrait avancer rapidement (pour la partie serveur en tout cas). N'hésitez pas à émettre des critiques/remarques/suggestions dans les commentaires de ce billet :)