#!/bin/sh

# guestbook - Affiche les entres actuelles du livre d'or, ajoute un
#   formulaire simple pour que les visiteurs ajoutent leurs propres
#   commentaires, et accepte et traite ces nouvelles entres. Travaille
#   avec un fichier de donnes spar qui renferme les donnes 
#   proprement parler.

homedir=/home/taylor/web/wicked/examples
guestbook="$homedir/guestbook.txt"
tempfile="/tmp/guestbook.$$"
sedtemp="/tmp/guestbook.sed.$$"

trap "/bin/rm -f $tempfile $sedtemp" 0

echo "Content-type: text/html"
echo ""

echo "<html><title>Livre d'or de $(hostname)</title>"
echo "<body bgcolor='white'><h2>Livre d'or de $(hostname)</h2>"

if [ "$REQUEST_METHOD" = "POST" ] ; then
  # On a soumis une nouvelle entre de livre d'or.
  #   Par consquent, on sauvegarde le flux d'entre.
  cat - | tr '&+' '\n ' > $tempfile 

  name="$(grep 'yourname=' $tempfile | cut -d= -f2)"
  email="$(grep 'email=' $tempfile | cut -d= -f2 | sed 's/%40/@/')"
 
  # tant donne une chane encode dans une URL, on en dcode les
  #   signes de ponctuation les plus importants (mais pas tous)

cat << "EOF" > $sedtemp
s/%2C/,/g;s/%21/!/g;s/%3F/?/g;s/%40/@/g;s/%23/#/g;s/%24/$/g
s/%25/%/g;s/%26/\&/g;s/%28/(/g;s/%29/)/g;s/%2B/+/g;s/%3A/:/g
s/%3B/;/g;s/%2F/\//g;s/%27/'/g;s/%22/"/g
EOF

  comment="$(grep 'comment=' $tempfile | cut -d= -f2 | sed -f $sedtemp)"

  # Squences dont il faut se mfier: %3C = <  %3E = >  %60 = `
 
  if echo $name $email $comment | grep '%' ; then
    echo "<h3>chec: caractre(s) interdit(s) en entre:"
    echo "Pas de sauvegarde.<br>Aucune balise HTML n'est autorise.</h3>"
  elif [ ! -w $guestbook ] ; then
    echo "<h3>Dsol, je ne peux crire sur le livre d'or en ce moment.</h3>"
  else
    # Tout va bien! On sauvegarde dans le fichier de donnes!
    echo "$(date)|$name|$email|$comment" >> $guestbook
    chmod 777 $guestbook        # on vrifie qu'il est accessible au webmaster
  fi
fi

# Si on dispose d'un livre d'or, on en affiche toutes les entres

if [ -f $guestbook ] ; then
  echo "<table>"

  while read line 
  do 
    date="$(echo $line | cut -d\| -f1)"
    name="$(echo $line | cut -d\| -f2)"
    email="$(echo $line | cut -d\| -f3)"
    comment="$(echo $line | cut -d\| -f4)"
    echo "<tr><td><a href='mailto:$email'>$name</a> a crit ceci:</td></tr>"
    echo "<tr><td><div style='margin-left: 1in'>$comment</div></td></tr>"
    echo "<tr><td align=right style='font-size:60%'>le $date"
    echo "<hr noshade></td></tr>"
  done < $guestbook

  echo "</table>"
fi

# On cre maintenant le formulaire pour les nouvelles entres du livre d'or...

echo "<form method='post' action='$(basename $0)'>"
echo "N'hsitez pas  signer aussi notre livre d'or:<br>"
echo "Votre nom: <input type='text' name='yourname'><br>"
echo "Votre adresse lectronique: <input type='text' name='email'><br>"
echo "Et votre commentaire:<br>"
echo "<textarea name='comment' rows='5' cols='65'></textarea>"
echo "<br><input type='submit' value=\"signez notre livre d'or\">"
echo "</form>"

echo "</body></html>"

exit 0
