#!/bin/bash
# Initialisation des variables pour les options
programme=$(basename $0)
version='1.1.2'
modif='21/02/2022'
function usage
{
echo "Usage : $programme -u utilisateur [ -c fichier_cookies ]"
echo " $programme -h "
}
function aide
{
cat << EOT
Usage
=====
$programme -u utilisateur [ -c cookies.txt ]
$programme -h
Options
=======
-c indique le nom du fichier qui recevra les cookies (“cookies.txt”
par défaut)
-h affiche cette aide
-u indique le nom de l’utilisateur (login). Le mot de passe ne devant
pas être en ligne de commande, il sera demandé par le programme
EOT
exit 0
}
function nettoie
{
if [[ -f connect$$.xml ]]
then
rm -f connect$$.xml
fi
}
# Options
while getopts c:hu: i
do
case $i in
c) cookie=$OPTARG;;
h) aide;;
u) user=$OPTARG;;
\?) echo >&2
usage >&2
exit 1;;
esac
done
# Vérifications des options
if [[ -z $user ]]
then
echo "" >&2
echo "Erreur : indiquer le nom de l’utilisateur " >&2
echo "" >&2
usage >&2
exit 1
fi
if [[ -z $cookie ]]
then
cookie='cookies.txt'
fi
# Vérification de la présence des programmes
# “base64”, “curl” et “xmllint”
for i in base64 curl xmllint
do
prog=$(which $i 2> /dev/null)
if [[ -z $prog ]]
then
echo "" >&2
echo "Erreur : programme “$i” introuvable. Vérifier \$PATH." >&2
echo "" >&2
exit 2
fi
done
# Nettoyage en cas d’arrêt prématuré
trap nettoie HUP INT QUIT TERM
# Initialisation du mot de passe
read -t 60 -s -p "mot de passe : " password
echo
if [ $? -gt 128 ]
then
echo
echo "Erreur : temps de réponse (60 s) dépassé " >&2
exit 3
fi
auth=$(echo -n "$user:$password" | base64 -)
out='WosApiOut.txt'
err='WosApiErr.txt'
# Génération du fichier XML pour la connexion
cat << EOT > connect$$.xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:auth="http://auth.cxf.wokmws.thomsonreuters.com">
<soapenv:Header/>
<soapenv:Body>
<auth:authenticate/>
</soapenv:Body>
</soapenv:Envelope>
EOT
curl -X POST -d @connect$$.xml -c $cookie -v http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate \
-H "Authorization: Basic $auth" 2> $err | xmllint -format - > $out
sid=$(perl -ne 'print "$1" if m|<return>(\w+)</return>|;' $out)
if [[ -n $sid ]]
then
echo " "
echo "Connexion réussie : SID = $sid "
echo " "
else
msg=$(perl -ne 'print "$1" if m|<faultstring>(.+?)</faultstring>|;' $out)
if [[ -n $msg ]]
then
echo " "
echo "Erreur : $msg "
echo " "
else
echo " "
echo "Erreur indéterminée. "
echo "Voir fichier “$err”. "
echo " "
fi
fi
nettoie
exit 0