diff --git a/ulib/.ulib_version b/ulib/.ulib_version index ec63514..f599e28 100644 --- a/ulib/.ulib_version +++ b/ulib/.ulib_version @@ -1 +1 @@ -9 +10 diff --git a/ulib/cgi b/ulib/cgi new file mode 100644 index 0000000..29f231f --- /dev/null +++ b/ulib/cgi @@ -0,0 +1,49 @@ +##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 +## Fonction de support pour CGI +##@cooked nocomments +uprovide cgi + +function is_cgi() { + # Tester si on est lancé comme un script CGI + [ -n "$GATEWAY_INTERFACE" ] +} + +function ctype_header() { + # Générer une en-tête Content-Type: avec la valeur $1[=text/html] + local ctype="$1" + [ -n "$ctype" ] || ctype="text/html" + if [[ "$ctype" == text/* ]]; then + [[ "$ctype" == *\;* ]] || ctype="$ctype; charset=utf-8" + fi + echo "Content-Type: $ctype" +} + +function cdisp_header() { + # Générer une en-tête Content-Disposition: avec le type $2[=attachment] et + # le nom de fichier $1[=result] + local filename="${1:-result}" disp="${2:-attachment}" + echo "Content-Disposition: $disp; filename=$filename" +} + +function nocache_header() { + # Générer des en-têtes qui désactivent la mise en cache du contenu + echo "Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0" + echo "Pragma: no-cache" + echo "Expires: Thu, 01 Jan 1970 00:00:00 GMT" +} + +function startcgi() { + # Générer les en-têtes nécessaire avant de servir le contenu + ctype_header "$1" + [ -n "$2" ] && cdisp_header "$2" + echo "" +} + +function startcgi_nocache() { + # Générer les en-têtes nécessaire avant de servir le contenu. Rajouter les + # entêtes pour désactiver la mise en cache. + ctype_header "$1" + [ -n "$2" ] && cdisp_header "$2" + nocache_header + echo "" +}