Status expérimental

En 2012, le développement de la librairie nebule en bash avait montré que l’on pouvait manipuler facilement des objets avec des liens.

La mise en ligne de la dernière version (20160303) de l’application klicty en php montre que l’on peut en faire quelque chose de concret. Donc, le statut des projets nebule, sylabe et klicty passera de « expérimental » à « en développement » lors de la publication des prochaines versions.

Avancement

Le module de simulation de systèmes de fichiers est stable et complètement fonctionnel. Il peut bien sûr être amélioré plus tard en terme de fonctionnalités.

Maintenant, avant tout autre avancement dans les fonctionnalités, il faut trouver pour accélérer le code. En l’état, c’est globalement fonctionnel mais les pages sont beaucoup trop longues à charger.
Une des pistes d’accélération est de se servir de la session PHP pour mémoriser et restaurer les instances de la librairie nebule et de sylabe pour toutes les pages chargées par un même utilisateur. Cela veut dire que les vérifications ne se feront plus que une seule fois pour un utilisateur, lors de l’instanciation de la librairie et de sylabe.
Une seconde possibilité d’amélioration est de gérer une partie de l’affichage par des inserts dans les pages de type iframe mais en utilisant le javascript pour modifier le contenu.
Enfin, et ce travail a déjà commencé, une autre amélioration est de ne charger la session et ses variables que lors de consultations et de modifications. Ainsi PHP, qui bloque une page si la session est déjà ouvert, pourra vraiment traiter plusieurs parties en parallèle sans blocage. Par exemple si dans le code d’une page, en cours de traitement, demande une image chiffrée, le chargement de cette image qui nécessite elle aussi le traitement du même code ne sera pas bloqué en attendant la fin de traitement du code de la page…

Avancement et marquage des objets

Dans le nouveau module de simulation d’arborescences, il était possible d’ajouter des arborescences, des dossiers et des fichiers téléchargés. Mais il n’était pas évident d’ajouter des objets déjà présents, ce qui était assez dommage.
Ce problème est similaire pour la gestion de sous-objets à des nœuds ou des groupes.

Pour palier à ce problème, il est possible maintenant de marquer des objets. C’est une liste auquel on ajoute un ou plusieurs objets et de laquelle on peut aussi retirer des objets individuellement, ou tout enlever. La liste est liée à la session php et n’est donc pas persistante.

Mais pour commencer, revenons sur le module des arborescences. Tant que les liens ne sont pas dissimulés, toute arborescence est publique. Ainsi dans l’exemple ci-dessous je suis connecté en tant que Stéphane et je regarde une des arborescences de l’entité bachue developpement. On notera que mon entité d’utilisateur dispose d’une photo d’illustration avec des bords blanc. On notera aussi le petit problème de transcription du caractère accentué et, plus subtil, l’affichage d’un deuxième icône « Systèmes de fichiers » qui permet en fait d’aller voir ses propres arborescences quand on est ailleurs.

20150809 sylabe_-_St_phane_DENDIEVEL_-_2015-08-10_17.21.18

Le fait de pouvoir se déplacer et voir des arborescences d’autres entités doit être vu comme une fonctionnalité, le début de ce qui permet de partager à plusieurs des objets dans des arborescences. L’affichage ou non des objets se fera plus tard en fonction du poids social des entités qui ajoutent les objets et non en fonction d’un blocage (qui devrait être centralisé). Pour cacher l’usage des arborescences et des objets qu’elles contiennent, il faudra utiliser les liens dissimulés, c’est pour plus tard aussi.

Dans une arborescence, on voit que les icônes ont une importance. Celle qui désigne les dossiers indique que si l’on clique dessus, on va dans le dossier. Celle qui désigne les objets indique que si l’on clique dessus, on va voit l’objet, càd on l’affiche dans le module des objets.

Chaque objet est repéré par sa couleur propre. Cela facilite la reconnaissance visuelle de ce que l’on cherche. Tout dossier est un objet dont le seul intérêt est de servir de point de référence pour les objets qui lui sont rattachés, les sous-objets.

Continuer la lecture de Avancement et marquage des objets

Avancement

Il y a quelques jours, le puppetmaster a été réveillé pour générer de nouveaux liens. De nouveaux objets de nebule sont maintenant reconnus comme des objets à usage réservé :

  • nebule/objet/entite/maitre/securite
  • nebule/objet/entite/maitre/code
  • nebule/objet/entite/maitre/annuaire
  • nebule/objet/entite/maitre/temps

Et il permettent de désigner via un lien de type f les différentes entités qui ont les rôles correspondants.

Le code de la librairie nebule en php et le bootstrap s’en servent désormais pour retrouver les entités avec ces rôles.

CF : nebule – Liens marqués entre le puppetmaster et les autres entités

Avancement

Un nouveau fond de page remplace celui assez sombre de la cascade :

bg_nuages

Le module de messagerie est un peu amélioré, c’est surtout de la cosmétique :

sylabe_-_15d194c0ac5da323b50e868ab62c17c0a5470283c92f3d8a8631743b5cd9f42f_-_425fad5c1e9ab9806550bc1fc8abd39fe230f8214d61d98df7136bb82e130b58_-_2015-06-06_21.33.39

Il y a encore une réflexion sur la messagerie et sa façon de l’implémenter. On continue sur la façon de faire actuelle amis avec un risque de devoir changer si ça pose trop de problèmes.

Enfin, dans le module de téléchargement, une nouvelle page permet de créer un objet directement depuis un texte copié/collé :

sylabe_-_15d194c0ac5da323b50e868ab62c17c0a5470283c92f3d8a8631743b5cd9f42f_-_30199915e30e00681c68687890937204ff4c8a6468d4209c73631671f618e71e_-_2015-06-06_21.29.39

Juste pour ça une nouvelle icône a été créée. Mais elle n’est pas satisfaisante dans l’interface :

addtxt

Cette partie pour envoyer un texte brute va surtout permettre de faire des essais pour la mise en place de la protection, c’est à dire le chiffrement, des objets. Il en faut un certain nombre sur lesquels on peut se tromper… Puis cela servira aussi à la mise en place de l’offuscation de liens, c’est à dire de leur dissimulation, lors de l’envoie de fichier. La protection et la dissimulation seront aussi appliqués sur des objets et liens existants une fois fonctionnel.

La protection des objets est déjà fonctionnelle dans la précédente version de sylabe. Cependant, la mise en place dans les objets en programmation php orientée objet n’est pas juste un copier/coller…

Avancement

Le travail portait depuis un moment sur la création de nouvelles entités. Il fallait commencer par la création de nouvelles entités indépendantes sans déverrouillage préalable. C’est à dire pour un portail public la possibilité pour tout un chacun de pouvoir créer une entité.

sylabe_-_15d194c0ac5da323b50e868ab62c17c0a5470283c92f3d8a8631743b5cd9f42f_-_15d194c0ac5da323b50e868ab62c17c0a5470283c92f3d8a8631743b5cd9f42f_-_2015-04-26_00.48.16

C’est maintenant fonctionnel. Voici une création :

sylabe_-_15d194c0ac5da323b50e868ab62c17c0a5470283c92f3d8a8631743b5cd9f42f_-_15d194c0ac5da323b50e868ab62c17c0a5470283c92f3d8a8631743b5cd9f42f_-_2015-04-25_23.32.14

On peut voir que aucune entité n’est préalablement déverrouillée. En bas apparaît quelques lignes sur les actions de création de l’entité. Le nommage complet, c’est à dire le nom, prénom, surnom, préfixe, suffixe et type, sont fonctionnels. Le surnom apparaît dans l’interface entre double cotes.

Après, en basculant vers la nouvelle entité, il est tout a fait possible de la déverrouiller. La nouvelle entité est fonctionnelle. Voici l’entité créée ci-dessus lorsque déverrouillée :

sylabe_-_153153bf7f7f98c41e3fbdce6a7f9dfe2c854974d5310d6047de862459e2dd8b_-_15d194c0ac5da323b50e868ab62c17c0a5470283c92f3d8a8631743b5cd9f42f_-_2015-04-25_23.55.40

La traduction est aussi effective pour toute l’interface de création.

Évidemment, un serveur est par défaut configuré pour refuser la création ouverte au public. Ce qui donne ce message sur la page de création ou lors d’une tentative de création forcée :

sylabe_-_15d194c0ac5da323b50e868ab62c17c0a5470283c92f3d8a8631743b5cd9f42f_-_15d194c0ac5da323b50e868ab62c17c0a5470283c92f3d8a8631743b5cd9f42f_-_2015-04-25_23.47.46

Avancement

Il y avait une erreur de frappe dans la fonction de téléchargement des objets dans sylabe, ce qui empêchait l’affichage de l’image des entités. C’est corrigé.

Lorsque un message d’avertissement ou d’erreur s’affichait, il y avait une icône correspondante dans la barre du haut à côté de l’entité. Maintenant, en cliquant dessus, c’est un lien web, on est automatiquement déconnecté de l’entité et la session php de l’utilisateur est réinitialisée. La mise en cache des entités/objets et liens est désactivée pour cette page. Tous les objets et liens sont donc fermés si ils étaient protégés. C’est un mode de secours.

Voici ce qu’il s’affiche si suite à une corruption du bootstrap on clique sur le gros bouton rouge :

sylabe_-_15d194c0ac5da323b50e868ab62c17c0a5470283c92f3d8a8631743b5cd9f42f_-_7855163e7ad8be9534cba394b63f0da6432fbe537d3e9ed8ffb687a29fd1cdbd_-_2015-02-15_13.14.06

Étape suivante, rediriger l’utilisateur sur la page d’aide par défaut…

Avancement

Le travail sur sylabe n’a pas encore repris.

Le travail principal consiste à remettre en place une librairie nebule en php orienté objet. Mais comme sylabe est maintenant assez volumineux, il ne pourra pas instantanément basculer sur cette nouvelle librairie. La libraire implémente donc les anciennes fonctions avec un passage progressif vers les nouvelles. En fait, pour vérifier les nouvelles fonctions, les anciennes fonctions seront reprogrammées pour faire appel aux nouvelles…
Puis le code de sylabe pourra vraiment migrer vers des fonctions php orienté objet, et par la suite basculer complètement en php orienté objet.

CF : blog nebule – Avancement

Avancement

Le portage de la librairie nebule en programmation orientée objet prend plus de temps que prévu. Elle n’est toujours pas à iso-fonctionnalité avec la version procédurale.

Il faudra, une fois à iso-fonctionnalité, retrouver des performances similaires. C’est déjà un problème prévisible puisque typiquement les liens ne sont plus manipulés par une simple chaîne de texte mais par un objet plus gros est complexe en mémoire…

Programmation orientée objet – condensé de cours

Le passage en programmation PHP orientée objet est toujours en cours.

Je vais essayer ici de condenser les cours en règles simple, une sorte d’aide mémoire.

  1. La programmation orientée objet
  2. La convention de codage PEAR
  3. Les principes SOLID
  4. Le paradigme MVC
  5. La modélisation UML

Une page est dédiée à ce sujet : Programmation

Programmation orientée objet

Le projet prend un peu de retard pour mieux progresser.

Un ami programmeur m’a fortement suggéré, et m’a convaincu, de basculer tout le code de nebule en programmation objet. Je suis donc en cours d’auto-formation sur la programmation orientée objet (POO) dans php

Le projet sylabe est en attente de la migration de la librairie nebule en POO php. Il y aura ensuite une phase de migration du code de sylabe vers la POO php avant de pouvoir reprendre l’implémentation de nouvelles fonctionnalités…

Migration du bootstrap et de la librairie

Jusque là, le code du bootstrap et de la librairie nebule en php était dépendant du projet sylabe.

Maintenant, ils sont détachés du projet sylabe et sont directement rattachés au projet nebule, ce qui est plus cohérent. Le projet sylabe va cependant continuer à s’appuier sur le bootstrap et la librairie nebule et même à les faire progresser.

Les codes actuellement en ligne, diffusés par l’entité bachue, sont disponibles ici :
bootstrap
librairie

CF : Projet nebule – Migration du bootstrap et de la librairie

Avancement

La mise en place du bootstrap permettant l’installation de sylabe nébulisé a posé quelques problèmes. La tentative de mise à jour de l’entité zulu n’a pas fonctionné immédiatement.

Le code du bootstrap intégrait des fonctions d’inclusion d’objets php, sylabe et la librairie nebule, via le chargement de pages web, via http donc. Les codes php inclus comme pages web étant restreint au serveur local pour des problèmes de sécurité. Le code de l’inclusion étant :
include("$bootstrap_loc_entite/o/$bootstrap_load");
Avec $bootstrap_loc_entite quelque chose comme http://localhost.
Or, sur le serveur hébergeant zulu, la version de php est un peu plus ancienne. Et cette ancienne version ne supporte visiblement pas très bien les inclusion via http. Cela aurait pût être bloquant puisque cet inclusion par http avait été rendu nécessaire parce que l’interpréteur php ne supportait pas l’inclusion de fichiers sans extensions .php. Mais, heureusement, la version plus ancienne de php supporte elle l’inclusion de fichiers sans extension. Donc ça marche avec un code de ce genre :
$v = explode('.',PHP_VERSION);
$bootstrap_phpversion=($v[0] * 10000 + $v[1] * 100 + $v[2]);
if($bootstrap_phpversion < 50500) include("o/$bootstrap_load"); else include("$bootstrap_loc_entite/o/$bootstrap_load");

Il reste une petite difficulté, je ne sais pas à partir de quelle version de php ce changement de comportement s’est fait. J’ai donc placé le seuil de bascule de comportement à la version 5.5.0.

Donc, Pour l’instant tout fonctionne bien avec sylabe en version nébulisée.
Toutes les entités du serveur vont basculer progressivement pour profiter enfin des nouvelles versions.

L’entité bachue est accessible sur Internet mais elle n’est pas vraiment active. Le serveur public n’héberge qu’une copie. L’entité est déverrouillée sur une station hors ligne afin de signer les nouvelles versions de sylabe et de la librairie nebule. Une station miroir en ligne mais mieux protégée de l’Internet est en cours de mise en place. Elle va faciliter la synchronisation des liens et objets de la station isolée (qui le restera) vers le serveur miroir sur Internet accessible à l’adresse http://bachue.nebule.org/ .
Une fois le processus complet en place, la diffusion des mises à jours de sylabe sera complète :

20140216 sync bachue

Détournement de liens de mise à jour – suite

Suite à la réflexion de l’article Détournement de liens de mise à jour, je modifie dans le code de sylabe la vérification des paramètres pour autoriser les liens avec des ID d’objets de taille à partir de 6 octets. Cela concerne les paramètres synobj, synlnk, synunkobj, majobj, crlsrc, crldst et crlmet.

Avancement

Depuis 2 jours, le code du bootstrap est profondément remanié pour intégrer la résolution d’un graphe de relations de mise à jour des objets et surtout l’auto déploiement répliqué d’un code. Il intègre une version allégée de la librairie nebule indispensable à son fonctionnement.

L’interpréteur php ne permet pas (d’après mes essais) d’appeler du code php via la fonction include() si le fichier demandé n’a pas l’extension .php . Il n’est donc pas possible en l’état de charger un objet comme code php puisqu’un objet n’a pas d’extension. Ça n’a pas de sens pour un objet de l’affubler d’une extension. La méthode la plus fiable de typer un objet est le type mime correspondant à son contenu réel et non une simple extension. Maintenant, nebule attribue un type mime à un objet par un lien, mais cette attribution est signée et peut être multiple.
Cependant, si il n’est pas possible d’inclure un code php depuis un objet, il est possible de faire appel à du code php toujours via la fonction include() depuis un emplacement web (http). Cela fonctionne si on modifie les options qui l’autorise dans php, à savoir allow_url_fopen et allow_url_include. Cela fonctionne aussi, mais à vérifier, parce que le contenu de l’objet est transmit avec son type mime par le serveur web. Le type mime transmit avec l’objet est justement déduit d’un lien de cet objet.
Pour éviter l’inclusion d’un code non local et donc potentiellement dangereux, le lien web fait systématiquement référence à http://localhost/o/objet avec ‘objet‘ un objet nebule forcément présent et avec des liens validés par l’entité bachue ou l’entité locale, exclusivement.

Le code du bootstrap inclut maintenant la résolution du graphe des mises à jours de la librairie nebule, et charge cette librairie. Elle est donc chargée par défaut même si l’application (sylabe par défaut) ne l’utilise pas. Elle ne remplace pas le minimum nécessaire de fonctions nebule directement intégrées dans le bootstrap, en version allégées, et nécessaire au fonctionnement du bootstrap. Mais cette inclusion de la librairie complète à postériori ouvre des possibilités plus élaborées.

Le code du bootstrap ne sait pas encore aller chercher tout seul auprès de l’entité bachue les dernières version des codes de nebule et sylabe. Mais les fonctions allégées de nebule qu’il embarque si normalement capable de le faire. C’est juste une question de code à ajouter en cas d’absence d’objet comme lors d’une nouvelle installation.

Le bootstrap étant capable de trouver la dernière version de la librairie nebule et de la charger, et de trouver la dernière version du code sylabe et de le charger, leur présence sous forme de fichier n’est plus nécessaire. Les derniers essais ont été réalisés avec succès avec uniquement le bootstrap présent sous forme de fichier et donc en ayant volontairement supprimé les fichiers lib_nebule.php et sylabe.php. Ces essais ont montré aussi que bien qu’il soit possible de suivre les liens de mises à jours des anciennes versions de sylabe, leur exécution n’est souvent plus possible par ce biais puisqu’ils essaient de charger directement la librairie nebule par le nom de fichier…

Ces derniers développements ne sont pas encore en ligne parce que cela implique des modifications au niveau du serveur Apache pour chaque instance de sylabe. A venir très prochainement donc, et avec une nouvelle doc d’installation…

Détournement de liens de mise à jour

La librairie nebule en php, qui est utilisée par sylabe, intègre depuis ce matin le code nécessaire à la résolution des graphes des liens de mise à jour d’un objet. Ce bout de code est encore en cours de test.

Il est notamment utilisé directement comme test par sylabe. Le premier usage est de gérer l’affichage des petites icônes qui pullulent dans l’interface. Les buts sont de pouvoir faciliter la mise à jour de ces mêmes icônes en cas de besoin et de ne plus avoir à les copier lors d’une nouvelle installation de sylabe. Et c’est le mode lnk qui en profite en premier. La fonction aff_img_upd permet de renvoyer le code html pour afficher l’image, en fait l’objet de l’image, le tout en tenant compte des mises à jours.

Mais il apparaît fastidieux et volumineux de remplacer le bout de code html :

<img src="ll.png" id="iconepuce" alt="Lien">

par :

<?php aff_img_upd('e9a97c8fb1c6257284e7fa6f4a4c40458deff45dd591f939bc123cd4378de697','Lien','iconepuce'); ?>

Or, il est possible de détourner les liens de mises à jours pour créer des raccourcis d’objets. Dans notre exemple, en créant un lien de type u entre e9a9 et l’objet e9a97c8fb1c6257284e7fa6f4a4c40458deff45dd591f939bc123cd4378de697, on peut faire simplement appel à l’affichage de l’objet e9a9 qui n’existe pas et avoir l’affichage de l’image attendu… Le code précédent ressemble maintenant à ça :

<?php aff_img_upd('e9a9','Lien','iconepuce'); ?>

Il y a cependant quelques contraintes. Par définition, les liens de nebule acceptent des objets dont les empreintes sont de toutes tailles à partir du moment qu’il y a au moins un caractère, notés en hexadécimal, en minuscule et que ce ne soit pas zéro (réservé). Dans le code de sylabe, les objets ne sont pas acceptés si la taille de l’empreinte ne fait pas au minimum un quart de la longueur de bloc de l’algorithme de prise d’empreinte. Donc sylabe est plus restrictif que nebule. La contrainte de taille d’empreinte dans sylabe a été mise en place pour éviter les erreurs grossières lors de la génération de liens à la main. Et puis, ces objets ne pourront jamais avoir de contenu puisqu’il n’existe pas d’objet avec cette empreinte, et donc toute tentative d’en forcer un échouera à la vérification d’intégrité.

On peut imaginer des raccourcis tels que 571abe, faceb00k ou 90091e

Dans sylabe, la restriction est faite lors du nettoyage des variables crlink, crlsrc, crldst, crlmet, prtobj, unprtobj, supobj, forcesupobj, entuid et lnkfltobj. Il est tout à fait envisageable pour certaines variables d’accepter une taille très faible. Par contre, toutes les variables devant contenir une entité, un lien complet ou un objet à (dé)protéger ou supprimer, il n’est pas nécessaire de réduire la taille de variable attendu. On peut donc alléger le test pour les variables crlsrc, crldst et crlmet. Un minimum de 4 est raisonnable.

La diffusion de la nouvelle version avec ces icônes nébulisées doit attendre que les-dites icônes soient hébergées par bachue afin que toutes les instances de sylabe puisse se mettre à jour.

Avancement

La cryptographie vient d’être corrigée dans la librairie nebule en php. Elle est de nouveau complètement opérationnelle. Plusieurs essais ont été notamment réalisés sur le même objet qui a été protégé/déprotégé plusieurs fois de suite : ça marche.
Il faut encore corriger l’implémentation de référence de nebule en bash, mais ça ne devrait pas poser de problème.
De plus, le code a été complété pour pouvoir déprotéger un objet soit depuis l’objet en clair soit depuis l’objet chiffré.

Dans la continuité du déchiffrement d’objet, il est maintenant possible d’afficher en ligne d’un objet chiffré avec donc le déchiffrement à la volé. Il faut bien sûr déverrouiller l’entité et avoir accès à la clé de session de l’objet. Cela se traduit par la possibilité de voir directement dans sylabe, dans le mode aff, certains objets chiffrés. Son concernés les images jpeg et png, les fichiers audio mp3 et ogg, les textes brutes et les clés RSA.
C’est étonnant à voir dans le mode lnk puisque l’objet protégé apparaît rouge dans les liens puisqu’il a été effacé, mais il s’affiche quand même en haut des liens!

Un début de support existe pour les fichiers mp3 et ogg bien qu’il y ai encore un problème de définition du type mime lors de l’envoi d’un nouveau fichier de ce type.

Interopérabilité du chiffrement – suite

Suite à un problème dans le déchiffrement dans sylabe d’objets chiffrés via la commande openssl, et vice versa, la diffusion des nouvelles versions de la librairie de nebule en php avait été suspendu.

Le problème ayant été trouvé, la diffusion va pouvoir reprendre.

Les corrections qui vont être apportées à sylabe vont casser les objets précédemment chiffrés à la fois dans sylabe et dans l’implémentation bash de nebule.

Voir la description du problème de OpenSSL et la cryptographie, et la résolution OpenSSL et la cryptographie – suite.