2013-11-21 20:59:00 +04:00
|
|
|
##@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"
|
|
|
|
}
|
|
|
|
|
2013-11-21 21:04:44 +04:00
|
|
|
function cgicontent() {
|
2013-11-21 21:58:19 +04:00
|
|
|
# Générer les en-têtes nécessaire avant de servir le contenu.
|
|
|
|
# $1(=text/html) est le type de contenu. S'il faut servir le contenu avec
|
|
|
|
# une disposition "attachment", $2 est le nom de fichier à proposer à
|
|
|
|
# l'utilisateur. Si $3 est spécifié, c'est le chemin vers le fichier dont le
|
|
|
|
# contenu doit être servi.
|
2013-11-21 22:04:18 +04:00
|
|
|
# $4..* sont des en-têtes supplémentaires à rajouter
|
|
|
|
local ctype="$1" filename="$2" contentfile="$3"; shift; shift; shift
|
|
|
|
local header
|
|
|
|
|
|
|
|
ctype_header "$ctype"
|
|
|
|
[ -n "$filename" ] && cdisp_header "$filename"
|
|
|
|
for header in "$@"; do
|
|
|
|
echo "$header"
|
|
|
|
done
|
2013-11-21 20:59:00 +04:00
|
|
|
echo ""
|
2013-11-21 22:04:18 +04:00
|
|
|
[ -f "$contentfile" ] && cat "$contentfile"
|
2013-11-21 20:59:00 +04:00
|
|
|
}
|
|
|
|
|
2013-11-21 21:04:44 +04:00
|
|
|
function cgicontent_nocache() {
|
2013-11-21 20:59:00 +04:00
|
|
|
# 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.
|
2013-11-21 21:58:19 +04:00
|
|
|
# $1(=text/html) est le type de contenu. S'il faut servir le contenu avec
|
|
|
|
# une disposition "attachment", $2 est le nom de fichier à proposer à
|
|
|
|
# l'utilisateur. Si $3 est spécifié, c'est le chemin vers le fichier dont le
|
|
|
|
# contenu doit être servi.
|
2013-11-21 22:04:18 +04:00
|
|
|
# $4..* sont des en-têtes supplémentaires à rajouter
|
|
|
|
local ctype="$1" filename="$2" contentfile="$3"; shift; shift; shift
|
|
|
|
local header
|
|
|
|
|
|
|
|
ctype_header "$ctype"
|
|
|
|
[ -n "$filename" ] && cdisp_header "$filename"
|
2013-11-21 20:59:00 +04:00
|
|
|
nocache_header
|
2013-11-21 22:04:18 +04:00
|
|
|
for header in "$@"; do
|
|
|
|
echo "$header"
|
|
|
|
done
|
2013-11-21 20:59:00 +04:00
|
|
|
echo ""
|
2013-11-21 22:04:18 +04:00
|
|
|
[ -f "$contentfile" ] && cat "$contentfile"
|
2013-11-21 20:59:00 +04:00
|
|
|
}
|
2015-12-24 15:31:55 +04:00
|
|
|
|
|
|
|
function cgierror() {
|
2016-02-08 08:39:47 +04:00
|
|
|
# Afficher les en-têtes pour désactiver la mise en cache, puis afficher un
|
|
|
|
# message d'erreur puis arrêter le script
|
2015-12-24 15:31:55 +04:00
|
|
|
cgicontent_nocache text/plain
|
|
|
|
echo "ERROR: $*"
|
2016-02-08 08:39:47 +04:00
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
function cgiredirect() {
|
|
|
|
# Afficher les en-têtes pour rediriger le client vers la page $1 puis
|
|
|
|
# arrêter le script
|
|
|
|
echo "Status: 302 Found"
|
|
|
|
echo "Location: $1"
|
|
|
|
echo ""
|
|
|
|
exit 0
|
2015-12-24 15:31:55 +04:00
|
|
|
}
|