From 33cb7212065ce1067eeed4963584a8af9bb5946d Mon Sep 17 00:00:00 2001 From: Lucien Gentis Date: Sat, 7 Sep 2013 15:06:45 +0000 Subject: [PATCH] Update. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1520780 13f79535-47bb-0310-9956-ffa450edef68 --- docs/manual/mod/mod_lua.xml.fr | 200 ++++++++++++++++++++++++++++++++- 1 file changed, 197 insertions(+), 3 deletions(-) diff --git a/docs/manual/mod/mod_lua.xml.fr b/docs/manual/mod/mod_lua.xml.fr index 086ea288792..6f418c8a9a4 100644 --- a/docs/manual/mod/mod_lua.xml.fr +++ b/docs/manual/mod/mod_lua.xml.fr @@ -1,7 +1,7 @@ - + @@ -289,10 +289,12 @@ ou la définition de types MIME :

Journalisation - aucune + LuaHookLog Lorsqu'une requête a été traitée, plusieurs phases de journalisation interviennent, et enregistrent leurs résultats - dans les fichiers d'erreur ou d'accès. + dans les fichiers d'erreur ou d'accès. Mod_lua peut + s'intercaler au départ de ce processus et ainsi contrôler la + journalisation. @@ -1061,6 +1063,15 @@ end r.date_parse_rfc(string) -- Interprète une chaîne date/heure et renvoie l'équivalent en secondes depuis epoche. + +r:getcookie(key) -- Obtient un cookie HTTP + + + +r:setcookie(key, value, secure, expires) -- Définit un cookie HTTP, par exemple : +r:setcookie("foo", "bar and stuff", false, os.time() + 86400) + +
Fonctions de journalisation @@ -1589,6 +1600,61 @@ traitement de la requête + +LuaHookLog +Permet une insertion dans la phase de journalisation du +traitement d'une requête +LuaHookLog /path/to/lua/script.lua log_function_name +server configvirtual host +directory.htaccess + +All + +

+ Ce dispositif d'insertion simple permet d'exécuter une fonction + lorsque httpd entre dans la phase de journalisation du traitement + d'une requête. Vous pouvez ainsi ajouter des données à vos propres + entrées de journalisation, manipuler les entrées du journal standard + avant leur enregistrement ou empêcher l'enregistrement d'une entrée + dans le journal. Pour empêcher l'enregistrement normal des entrées + du journal, renvoyez simplement apache2.DONE dans votre + gestionnaire de journalisation, ou au contraire, renvoyez + apache2.OK pour que httpd effectue une journalisation + normale. +

+

Exemple :

+ +LuaHookLog /path/to/script.lua logger + + +-- /path/to/script.lua -- +function logger(r) + -- on joue à pile ou face : + -- Si on obtient 1, on écrit dans notre propre journal Lua et on dit + -- à httpd de ne pas enregistrer d'entrée dans le journal standard.. + -- Si on obtient 2, on nettoie un peu les données avant que httpd ne + -- les enregistre dans le journal standard. + + if math.random(1,2) == 1 then + -- On effectue notre propre journalisation et le journal + -- standard n'est pas alimenté + local f = io.open("/foo/secret.log", "a") + if f then + f:write("Quelque chose de secret est arrivé à " .. r.uri .. "\n") + f:close() + end + return apache2.DONE -- On dit à httpd de ne rien enregistrer + --dans le journal standard + else + r.uri = r.uri:gsub("somesecretstuff", "") -- nettoie les données + return apache2.OK -- et httpd doit alors les enregistrer. + end +end + +
+
+ + LuaHookMapToStorage Fournit un point d'entrée pour la phase map_to_storage du @@ -1845,6 +1911,134 @@ end + +LuaInputFilter +Fournit une fonction Lua pour le filtrage en entrée +LuaInputFilter filter_name /path/to/lua/script.lua function_name +server config +Disponible depuis la version 2.5.0 du serveur HTTP +Apache + + +

Cette directive permet d'ajouter un filtre en entrée sous la forme +d'une fonction Lua. A l'instar des filtres en sorties, les filtres en +entrée fonctionnent comme des sous-routines, intervenant dans un premier +temps avant l'envoi du contenu des tampons, puis chaque fois qu'un +paquet de données doit être transmis à la chaîne, et éventuellement +produisant toute donnée à ajouter aux données en entrée. La variable +globale bucket contient les paquets de données tels qu'ils +sont transmis au script Lua : +

+ + +LuaInputFilter myInputFilter /www/filter.lua input_filter +<FilesMatch "\.lua> + SetInputFilter myInputFilter +</FilesMatch> + + +--[[ + Exemple de filtre en entrée qui convertit toutes les données POST en + majuscules. +]]-- +function input_filter(r) + print("luaInputFilter called") -- debug print + coroutine.yield() -- Yield and wait for buckets + while bucket do -- For each bucket, do... + local output = string.upper(bucket) -- Convertit toutes les données POST en majuscules + coroutine.yield(output) -- Envoie les données traitées à la chaîne + end + -- plus aucune donnée à traiter. + coroutine.yield("&filterSignature=1234") -- Ajoute une signature à la fin +end + +

+Le filtre en entrée peut interdire ou sauter un filtre s'il est +considéré comme indésirable : +

+ +function input_filter(r) + if not good then + return -- Empêche tout simplement le filtrage et transmet le contenu original + end + coroutine.yield() -- attend des paquets de données + ... -- insert les filtres ici +end + +

+Voir "Modification de contenu avec les +filtres Lua" pour plus de détails. +

+
+
+ + +LuaOutputFilter +Fournit une fonction Lua pour le filtrage de contenu en +sortie +LuaOutputFilter filter_name /path/to/lua/script.lua function_name +server config +Disponible à partir de la version 2.5.0 du serveur HTTP +Apache + + +

>Cette directive permet d'ajouter un filtre en sortie sous la forme +d'une fonction Lua. A l'instar des filtres en sorties, les filtres en +entrée fonctionnent comme des sous-routines, intervenant dans un premier +temps avant l'envoi du contenu des tampons, puis chaque fois qu'un +paquet de données doit être transmis à la chaîne, et éventuellement +produisant toute donnée à ajouter aux données en sortie. La variable +globale bucket contient les paquets de données tels qu'ils +sont transmis au script Lua : +

+ + +LuaOutputFilter myOutputFilter /www/filter.lua output_filter +<FilesMatch "\.lua> + SetOutputFilter myOutputFilter +</FilesMatch> + + +--[[ + Exemple de filtre en sortie qui échappe toutes les entités HTML en + sortie +]]-- +function output_filter(r) + coroutine.yield("(Handled by myOutputFilter)<br/>\n") -- Ajoute des données au début de la sortie, puis attend des paquets de données à traiter + while bucket do -- Pour chaque paquet, faire ... + local output = r:escape_html(bucket) -- Echappe les données en sortie + coroutine.yield(output) -- Envoie les données traitées à la chaîne + end + -- plus aucune donnée à traiter. +end + +

+Comme les filres en entrée, le filtre en sortie peut interdire ou sauter un filtre s'il est +considéré comme indésirable : +

+ +function output_filter(r) + if not r.content_type:match("text/html") then + return -- Empêche tout simplement le filtrage et transmet le contenu original + end + coroutine.yield() -- attend des paquets de données + ... -- insert les filtres ici +end + +Les filtres Lua avec <module>mod_filter</module> +

Lorsqu'on utilise un filtre Lua comme fournisseur sous-jacent via la +directive FilterProvider, le +filtrage ne fonctionnera que si filter-name est identique à +provider-name. +

+ +

+Voir "Modification de contenu avec les +filtres Lua" pour plus de détails. +

+ +
+
-- 2.47.3