<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
-<!-- English Revision: 1498179:1519277 (outdated) -->
+<!-- English Revision : 1519977 -->
<!-- French translation : Lucien GENTIS -->
<!-- Reviewed by : Vincent Deffontaines -->
</tr>
<tr>
<td>Journalisation</td>
- <td>aucune</td>
+ <td><directive module="mod_lua">LuaHookLog</directive></td>
<td>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.</td>
+ 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.</td>
</tr>
</table>
r.date_parse_rfc(string) -- Interprète une chaîne date/heure et renvoie l'équivalent en secondes depuis epoche.
</highlight>
+<highlight language="lua">
+r:getcookie(key) -- Obtient un cookie HTTP
+</highlight>
+
+<highlight language="lua">
+r:setcookie(key, value, secure, expires) -- Définit un cookie HTTP, par exemple :
+r:setcookie("foo", "bar and stuff", false, os.time() + 86400)
+</highlight>
+
</section>
<section id="logging"><title>Fonctions de journalisation</title>
</usage>
</directivesynopsis>
+<directivesynopsis>
+<name>LuaHookLog</name>
+<description>Permet une insertion dans la phase de journalisation du
+traitement d'une requête</description>
+<syntax>LuaHookLog /path/to/lua/script.lua log_function_name</syntax>
+<contextlist><context>server config</context><context>virtual host</context>
+<context>directory</context><context>.htaccess</context>
+</contextlist>
+<override>All</override>
+<usage>
+<p>
+ 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 <code>apache2.DONE</code> dans votre
+ gestionnaire de journalisation, ou au contraire, renvoyez
+ <code>apache2.OK</code> pour que httpd effectue une journalisation
+ normale.
+</p>
+<p>Exemple :</p>
+<highlight language="config">
+LuaHookLog /path/to/script.lua logger
+</highlight>
+<highlight language="lua">
+-- /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
+</highlight>
+</usage>
+</directivesynopsis>
+
+
<directivesynopsis>
<name>LuaHookMapToStorage</name>
<description>Fournit un point d'entrée pour la phase map_to_storage du
</usage>
</directivesynopsis>
+<directivesynopsis>
+<name>LuaInputFilter</name>
+<description>Fournit une fonction Lua pour le filtrage en entrée</description>
+<syntax>LuaInputFilter filter_name /path/to/lua/script.lua function_name</syntax>
+<contextlist><context>server config</context> </contextlist>
+<compatibility>Disponible depuis la version 2.5.0 du serveur HTTP
+Apache</compatibility>
+
+<usage>
+<p>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 <code>bucket</code> contient les paquets de données tels qu'ils
+sont transmis au script Lua :
+</p>
+
+<highlight language="config">
+LuaInputFilter myInputFilter /www/filter.lua input_filter
+<FilesMatch "\.lua>
+ SetInputFilter myInputFilter
+</FilesMatch>
+</highlight>
+<highlight language="lua">
+--[[
+ 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
+</highlight>
+<p>
+Le filtre en entrée peut interdire ou sauter un filtre s'il est
+considéré comme indésirable :
+</p>
+<highlight language="lua">
+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
+</highlight>
+<p>
+Voir "<a href="#modifying_buckets">Modification de contenu avec les
+filtres Lua</a>" pour plus de détails.
+</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>LuaOutputFilter</name>
+<description>Fournit une fonction Lua pour le filtrage de contenu en
+sortie</description>
+<syntax>LuaOutputFilter filter_name /path/to/lua/script.lua function_name</syntax>
+<contextlist><context>server config</context> </contextlist>
+<compatibility>Disponible à partir de la version 2.5.0 du serveur HTTP
+Apache</compatibility>
+
+<usage>
+<p>>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 <code>bucket</code> contient les paquets de données tels qu'ils
+sont transmis au script Lua :
+</p>
+
+<highlight language="config">
+LuaOutputFilter myOutputFilter /www/filter.lua output_filter
+<FilesMatch "\.lua>
+ SetOutputFilter myOutputFilter
+</FilesMatch>
+</highlight>
+<highlight language="lua">
+--[[
+ 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
+</highlight>
+<p>
+Comme les filres en entrée, le filtre en sortie peut interdire ou sauter un filtre s'il est
+considéré comme indésirable :
+</p>
+<highlight language="lua">
+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
+</highlight>
+<note><title>Les filtres Lua avec <module>mod_filter</module></title>
+<p>Lorsqu'on utilise un filtre Lua comme fournisseur sous-jacent via la
+directive <directive module="mod_filter">FilterProvider</directive>, le
+filtrage ne fonctionnera que si <var>filter-name</var> est identique à
+<var>provider-name</var>.
+</p> </note>
+
+<p>
+Voir "<a href="#modifying_buckets">Modification de contenu avec les
+filtres Lua</a>" pour plus de détails.
+</p>
+
+</usage>
+</directivesynopsis>
</modulesynopsis>