r1138 - in trunk/wikitty-publication/src: site/rst test test/java/org/nuiton/wikitty/publication test/resources
Author: mfortun Date: 2011-08-12 17:10:30 +0200 (Fri, 12 Aug 2011) New Revision: 1138 Url: http://nuiton.org/repositories/revision/wikitty/1138 Log: *update spec *add test properties Added: trunk/wikitty-publication/src/test/resources/ trunk/wikitty-publication/src/test/resources/wikitty-publication-ws-test.properties Modified: trunk/wikitty-publication/src/site/rst/site-publication.rst trunk/wikitty-publication/src/site/rst/sync.rst trunk/wikitty-publication/src/site/rst/wp-application.rst trunk/wikitty-publication/src/test/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackServiceTest.java Modified: trunk/wikitty-publication/src/site/rst/site-publication.rst =================================================================== --- trunk/wikitty-publication/src/site/rst/site-publication.rst 2011-08-12 15:00:04 UTC (rev 1137) +++ trunk/wikitty-publication/src/site/rst/site-publication.rst 2011-08-12 15:10:30 UTC (rev 1138) @@ -4,125 +4,176 @@ Contexte, Intérêt -***************** ++++++++++++++++++ Wikitty publication permet de construire une application et de la stocker dans un wikitty, ensuite via l'interface web de wikitty publication l'application -peut s'éxécuter. Actuellement cette partie de publication permet de "publier" -des pages qui contiennent du javascript et wikitty publication permet -leur affichage et exécution des javascript. +peut s'éxécuter. Le travail sur cette partie consiste donc en l'amélioration +du prototype qui avait été réaliser. Conserver les fonctionnalités existantes +et en ajouter de nouvelle -Le travail sur cette partie de wikitty publication consiste donc à compléter -les fonctionnalités existantes, corriger les bugs présents, et enrichir -le nombre de langage supportés à l'interprétation. +Migration vers struts ++++++++++++++++++++++ -Fonctionnalités -*************** +Le prototype fonctionne actuellement simplement avec des jsp simple et tout +est géré à la main pas forcément de façon optimal. La première étape de +l'amélioration de wikitty publication passe par la migration donc vers struts 2 +en conservant le fonctionnement actuel. -Login/logout ------------- -L'interface web doit pouvoir gérer un système de login avec sauvegarde -de cookie pour la navigation. Le token de sécurité sera contenu dans le -cookie. En cas de succès si dans les arguments on retrouve les actions -à faire on les faits sinon on affiche simplement le résultat. +Les actions ++++++++++++ -L'action à éxécuter en cas d'erreur du login ou du logout, ne doit pas -se retrouver dans l'url. Ce doit être paramètrable dans un fichier de propriété. +Les actions sont les "pages" de base de wikitty publication permettant tout le +fonctionnement du concept. - /login?login=moi&password=xxxx&succes=/eval/Wiki/WikiHello +Il y a les actions de type administration comme les actions view et edit, qui +permettent respectivement de voir les wikitty présent sur le wikitty service +et d'éditer les wikitty, d'en créer de nouveau. -Si on a l'argument logout de présent dans les paramètres alors un -logout est forcé. Par défaut si on demande un login et que -l'utilisateur était déjà loggué alors un logout est aussi fait avant -la nouvelle authentification. +La page view propose aussi un moteur de recherche pour retrouver des wikitty +dans le wikitty service. - /login?logout&succes=/eval/Wiki/WikiHello +Ensuite deux actions plus particulières qui sont le coeur de wikitty publication +l'action RAW et l'action EVAL, qui respectivement servent pour un rendu brute +du contenu d'un wikitty pub et l'évaluation du contenu d'un wikitty pub. -Il faudra demander à l'utilisateur de se loguer si l'action qu'il essaye -d'entreprendre à besoin de droits. On pourra alors se retrouver dans la -situation ou l'action à éxécuter après le login se trouve dans l'url. +Concrétement le RAW renvoi le contenu d'un wikitty pub au navigateur selon le +mimeType de du wikitty Pub, une image png sera de cette façon renvoyé, un texte +sera renvoyé en brute. +L'EVAL est l'action qui se sert des scripts engine pour évaluer le contenu +d'un wikitty pub text et afficher le résultat de l'évaluation dans une page. +L'évaluation d'un wikittyPubData à le même effet qu'un raw. +Les urls des actions sont sous la forme : -Gestion des droits ------------------- + * /[contextData]/[contextApps]/[action]/[mandatory_args].action?[args key=value] -En sus d'une gestion d'authentification, il faudrait mettre en place un système -permettant de gérer des droits utilisateurs sur les différents wikitty -stocker au sein de wikitty publication, ainsi que les actions qu'un utilisateur -peut faire sur un wikitty. +ou: -Une solution envisageable est la création d'un objet wikitty, qui autoriserait -des actions nommés à sur des wikittys d'un certain label, cet objet wikitty -posséderais aussi un label, permettant de définir les droits sur cet objet -et donc qui pourrait modifier ces droits. Cet objet wikitty posséderait un -wikittyGroup qui lui même posséderait des wikittyUsers ou directement des -wikittyUser. + * /[contextData]/[action]/[mandatory_args].action?[args key=value] -* WikittyAuth - * users: WikittyGroup //groupe des users possédant les droits - * target: WikittyLabel //les labels concerné par les droit - * action: Collection // action autorisé par ce droit - * label:String // le label permettant de déterminer qui à les droit sur - // ce wikitty -On pourrait même penser à la possibilité de sync de ces wikitty avec la partie -synchronisation de wikitty publication, et donc les transmettrent à un autre -wikitty service. +où action: -La vérification de la légitimité d'une action d'un user se ferais en -recherchant le wikittyAuth qui autorise l'action sur le lable concerné -et vérifier si l'utilisateur appartiens au groupe concerné. + * Raw + * Edit + * Eval + * View -Le fait de mettre un label sur le wikittyAuth permet de créer plusieurs -classes de droit et d'utilisateur. On pourra avoir le "super" droit -donc le label target serait "." le "père" de tout les labels, dont le label -serait aussi ".". +Args argument, classique d'une url +mandatory_args pour la recherche sur critéria et retrouver le wikitty concerné +par l'action. On peut placer directement le nom du wikittyPub, en ce cas si +contextApps est renseigné il permettra de rechercher un wikittyPub qui possède +le nom et contextApps comme début d'un de ses labels -Celà permettra la gestion des droits par récursion sur les labels. +ContextData sert pour charger les fichiers de propriété pour l'initialisation +des wikitty service, voir plus bas. -Gestion multicontexte ---------------------- +contextApps sert donc pour filtrer en amont sur les labels des wikitty, +si dans un wikitty pub text on fait appel à un eval d'un autre wikitty on +cherchera en priorité les wikitty qui possèdent le même contextApps. -Les applications que wikitty publication va pouvoir éxécuter peuvent être -amené à manipuler des donnés, il doit être possible de définir que les -données manipulée soit stocker dans un autre wikitty service. +Ajout d'un mécanisme de login/logout +++++++++++++++++++++++++++++++++++++ -La solution pourrait être un nouvel objet de type wikitty définissant -que pour les applications possédant un certain label, les données -devront être stocké sur un autre wikitty service. +Les couches sécurité des wikitty service s'occupe déjà d'un mécanisme de login +et d'une gestion des droits en fonction. Les utilisateurs sont stocker en tant +que wikitty dans la base et on peut attribué des droits à ces utilisateurs. +Ensuite via un wikitty service on peut se loger, sur une authentification on +récupére un jeton qui sera à passer pour chaque action, celà est géré par le +wikitty proxy qui encapsule le wikitty service. -On pourrait avoir cette objet qui contiendrais un wikitty label, un attribut -avec l'adresse du wikitty service pour les datas. +Donc pour vérifier qu'une authentification s'est bien passé il faut regarder +dans le proxy si l'utilisateur est présent. Dans le cas de wikitty publication +au moment de l'action de login, délégué au proxy, on va stocker le jeton et +l'utilisateur dans la session. -Et les données de toutes les applications sous ces labels seront sur le wikitty -service désigné. +Evidement le mécanisme de Logout lui nettoie simplement la session en la vidant +de ces informations. -* WikittyContexteHandler - * wikittyServiceDataUrl: String // adresse du wikitty pour les données - * labels: WikittyLabel // label concernés +Ensuite le fonction de la gestion de l'authentification se repose sur le +méchanisme d'intercepteur et de package de struts. On défini une pile +d'intercepteur personalisé qui en plus de la pile par defaut rajoute un +intercepteur d'authenfication qui vérifiera la présence des informations +utilisateur dans la session, et bloquera l'accès à la page demandé si +l'utilisateur n'est pas authentifié. -Il est possible que se baser sur les labels soit une entreprise périlleuse, -mais celà permettrais de donner une seconde utilité, en plus de celle permettant -de déterminer le path d'un fichier. +On définit que l'accès aux actions publication utilise cette pile d'intercepteur +qui gère l'authentification, c'est ainsi que fonctionne le méchanisme dans +wikitty publication avec struts -Il sera nécessaire qu'au plus un wikittyContexteHandler existe pour un label -donné, sinon le problème de quels wikittyService utiliser pour les données -sera indécidable. Par défaut si ce wikitty n'existe pas les données seront -manipulé sur le même wikitty service que l'application. +Lors de la redirection vers la page de login quand on tente d'accèder à une page +"protéger" on sauvegarde cette adresse pour que lors d'une authentification +réussie on puisse se retrouver sur la page demandée -L'avantage de stocker la configuration pour le "multicontexte" dans un objet -wikitty permet ensuite d'avoir l'information facilement et de exporter vers -un autre wikitty service avec la partie sync de wikitty publication si besoin. + /login.action?succes=/eval/Wiki/WikiHello +Et pour le logout de la même façon : -Moteur de script ----------------- + [contextData]/logout.action?succes=/eval/Wiki/WikiHello -Ajouter plus de langage supporté à l'interprétation par wikitty publication, -en rajouter le plus possible, en fonction de ce qui est disponible pour java -en librairie libre. +On pourrais imaginer que l'on puisse se loguer directement en donnant l'adresse +de login de cette façon: + [contextData]/login.action?login=xxx&password=rrrr&succes=/eval/Wiki/WikiHello&error=/index +On doit pouvoir aussi pour le login et logout pouvoir préciser la page souhaitée +en cas d'erreur. + + +Amélioration des pages d'affichage et d'édition ++++++++++++++++++++++++++++++++++++++++++++++++ + +Les pages d'édition et d'affichage des wikitty étaient relativement simple, le +but étant une administration simple et efficace des wikitty. L'amélioration de +ces pages à consister en la correction des bugs présent déjà dans le prototype. + +Par exemple le support pour les recherches dans wikitty dans la page view, +dans le prototype cette recherche était très limité et donc ne fonctionnait pas +très bien. De plus l'affichage des résultats nécessitait une amélioration. + +Ensuite pour l'interface d'édition des wikitty j'ai intégré un décorateur de +Text Area qui permet une colorisation du contenu du champ, on peut choisir le +langage présent dans le champ pour avoir une colorisation, de l'indentation, des +outils de recherche/remplacer et d'autre, basiquement une sorte d'ide pour +faciliter le dévellopement de code dans les WikittyPubText. + + +Gestion, extension de contexte data ++++++++++++++++++++++++++++++++++++ + +A venir, explications sur le cloisonnement +même fichier de propriété etc +surcharge de propriété + + +Mécanisme de multicontext fallback Service +++++++++++++++++++++++++++++++++++++++++++ + +Cette fonctionnalité consiste en fait à l'encapsulation par un wikitty service +de deux autres wikitty service, quelque soit leurs natures. + +Ce multi contexte éxécute ses recherches un wikitty service principal, et +compléte ses recherches si besoin avec les données du wikitty service dit +fallback. + +De même l'écriture s'effectue sur le service principale, la restoration d'un +wikitty sur le principal et si il n'est pas dessus on va interroger le fallback +service. + +Son utilisation n'est pas nécessairement limité à Wikitty Publication, il s'agit +finalement d'une implémentation différente de l'interface wikitty service. + +Ce mécanisme peut permettre la surcharge d'un wikitty, dans le sens ou on peut +modifier un wikitty qui aura été chargé depuis le fallback, mais à la sauvegarde +il sera restaurer depuis le wikitty principal, puisque celui ci est prioritaire. + +On peut avoir ainsi un wikitty service statique, et un autre dynamique, par +exemple le wikitty service statique qui serait partagé et utilisé par d'autre +wikitty service multicontext, une base commune de wikitty. + + + Modified: trunk/wikitty-publication/src/site/rst/sync.rst =================================================================== --- trunk/wikitty-publication/src/site/rst/sync.rst 2011-08-12 15:00:04 UTC (rev 1137) +++ trunk/wikitty-publication/src/site/rst/sync.rst 2011-08-12 15:10:30 UTC (rev 1138) @@ -208,9 +208,9 @@ Evidement le path pour le protocole File indiquant le répertoire où aller chercher/mettre les wikitties. -Les labels de l'uri cible et local peuvent être différent, et pendant ils seront -conservé, c'est à dire que des wikitties de la cible si ils ont besoin de se -mettre à jour, leurs labels seront conservés. +Les labels de l'uri cible et local peuvent être différent, et pendant la synchronisation +ils seront conservé, c'est à dire que des wikitties de la cible si ils ont +besoin de se mettre à jour, leurs labels seront conservés. Dans le cas de wikitty qui n'existe pas dans la cible, on remplacera le label origine qui à permis de trouver ces wikitties et le remplacer par le label cible, les autres labels du wikitty seront transmit. @@ -218,6 +218,16 @@ Si le label cible est différent du label origine, le label d'origine sera substitué par le label cible. +exemple: + +si l'on a en label #chorem sur l'origine et #nuiton sur la cible, les labels +commençant par chorem sur le wikitty service origine, deviendrons sur le +wikitty service cible nuiton: +chorem.src.main -> nuiton.src.main + +Ainsi la commande sync peut servir pour déplacer des wikitty au sein d'un même +wikitty service. + Commit/update +++++++++++++ @@ -232,7 +242,7 @@ Un commit sera équivalent à un sync du "reposistory" local vers un autre wikitty service. Un update sera équivalent à un sync d'un autre wikitty service vers le -repositotory local. +repository local. Pour ce faire dans le dossier racine qui contient l'arborescence des wikitty sous forme de fichier on enregistrera dans un dossier ".wp" un fichier Modified: trunk/wikitty-publication/src/site/rst/wp-application.rst =================================================================== --- trunk/wikitty-publication/src/site/rst/wp-application.rst 2011-08-12 15:00:04 UTC (rev 1137) +++ trunk/wikitty-publication/src/site/rst/wp-application.rst 2011-08-12 15:10:30 UTC (rev 1138) @@ -5,6 +5,7 @@ But *** +Ces spécifications ont pour but de présenter Specifications diverse sur l'utilisation de wikitty publication Modified: trunk/wikitty-publication/src/test/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackServiceTest.java =================================================================== --- trunk/wikitty-publication/src/test/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackServiceTest.java 2011-08-12 15:00:04 UTC (rev 1137) +++ trunk/wikitty-publication/src/test/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackServiceTest.java 2011-08-12 15:10:30 UTC (rev 1138) @@ -78,7 +78,7 @@ configFS.setOption(WikittyConfigOption.WIKITTY_SERVER_URL.getKey(), url); ApplicationConfig configLocal = new ApplicationConfig( - "wikitty-publication-ui/src/main/resources/wikitty-publication-ws-test.properties"); + "wikitty-publication-ws-test.properties"); // configLocal = WikittyPublicationConfig.getConfig(); Added: trunk/wikitty-publication/src/test/resources/wikitty-publication-ws-test.properties =================================================================== --- trunk/wikitty-publication/src/test/resources/wikitty-publication-ws-test.properties (rev 0) +++ trunk/wikitty-publication/src/test/resources/wikitty-publication-ws-test.properties 2011-08-12 15:10:30 UTC (rev 1138) @@ -0,0 +1,56 @@ +### +# #%L +# Wikitty :: publication +# +# $Id: wikitty-publication-ws-default.properties 823 2011-04-20 14:45:47Z mfortun $ +# $HeadURL: http://svn.nuiton.org/svn/wikitty/trunk/wikitty-publication/src/main/resourc... $ +# %% +# Copyright (C) 2009 - 2010 CodeLutin, Benjamin Poussin +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Lesser Public License for more details. +# +# You should have received a copy of the GNU General Lesser Public +# License along with this program. If not, see +# <http://www.gnu.org/licenses/lgpl-3.0.html>. +# #L% +### + + +wikitty.storage.jdbc.queryfile=wikitty-jdbc-query.properties +wikitty.storage.jdbc.driver=org.h2.Driver +wikitty.storage.jdbc.host=jdbc:h2:file:${wikitty.data.directory}/data/db +wikitty.storage.jdbc.login=sa +wikitty.storage.jdbc.password= +wikitty.storage.jdbc.xadatasource=org.h2.jdbcx.JdbcDataSource +wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.URL=${wikitty.storage.jdbc.host} +wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.user=${wikitty.storage.jdbc.login} +wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.password=${wikitty.storage.jdbc.password} +wikitty.searchengine.solr.directory.data=${wikitty.data.directory}/data/solr +wikitty.searchengine.solr.directory.factory=solr.StandardDirectoryFactory +wikitty.WikittyService.components=org.nuiton.wikitty.services.WikittyServiceStorage,\ +org.nuiton.wikitty.services.WikittyServiceNotifier,\ +org.nuiton.wikitty.services.WikittyServiceCached,\ +org.nuiton.wikitty.services.WikittyServiceSecurity,\ +org.nuiton.wikitty.services.WikittyServiceAccessStat + +wikitty.WikittyServiceStorage.components=org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC,\ +org.nuiton.wikitty.jdbc.WikittyStorageJDBC,\ +org.nuiton.wikitty.storage.solr.WikittySearchEngineSolr +wikitty.service.cache.listenevents=false +wikitty.service.cache.allwaysRestoreCopies=false +wikitty.service.event.propagate=false +wikitty.service.event.listen=false +wikitty.service.accessstat.extensions=WikittyPubText,WikittyPubData +wikitty.addon.export.threadnumber=1 +wikitty.addon.export.directory=${wikitty.data.directory}/export +wikitty.addon.export.publicurl=file://${wikitty.data.directory}/export/ +wikitty.WikittyServiceAccessStat.components=\ +org.nuiton.wikitty.services.WikittyServiceAccessStat$AccessStatStorageLog
participants (1)
-
mfortun@users.nuiton.org