Skip to content

Instantly share code, notes, and snippets.

@Erim32
Created April 13, 2018 17:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Erim32/d67fb756e21630f7e33ffdffbb1c40d3 to your computer and use it in GitHub Desktop.
Save Erim32/d67fb756e21630f7e33ffdffbb1c40d3 to your computer and use it in GitHub Desktop.
Script de connexion automatique aux différents portails web du CROUS.
#!/bin/sh
# crous_connect
#
# Petit script pour se connecter aux services du CROUS
# Auteur d'orgine: mael.valais@univ-tlse3.fr
# Script d'origine: https://gist.github.com/maelvalais/5021908
# Contributeur dernière mise a jour: Rémi M (github.com/Erim32)
# Mis à jour le 13.04.2018
# Version 0.3
# Exemples de taches cron:
# Connexion crous
# @reboot DISPLAY=:0 sh ~/crous_connect.sh
# */10 * * * * DISPLAY=:0 sh ~/crous_connect.sh
# Remarque:
# "DISPLAY=:0 sh" permet de spécifier la sortie graphique des notifications.
# Attention :
# - connection CURL non SSL à cause du certificat foireux
# - mot de passe en clair
#
# Amélioration possible : ajouter l'option -d qui déconnecterait
# Comment ca marche :
# Mettez après user= votre identifiant CROUS (aaa1337a@univ-tlse3.fr par exemple)
user=""
# Ensuite votre mot de passe CROUS
passwd=""
# Analyse des parametres
v=0
while [ "x$1" != "x" ]; do
case "$1" in
-v | --verbose) # Mode verbose
v=1; shift
;;
-va | --verboseall) # afficher le retour du curl
v=2; shift
;;
-h | --help) # de l'aide
echo "Aide: regardez a l'interieur du script, c'est ecrit"
exit 0
;;
esac
done
# Options avancees
useragent="Firefox/58.0.0"
tempsLong=1200 # Rafraichissement en seconde en cas de réussite
tempsCourt=5 # Rafraichissement en cas d'echec
loginCROUS() {
# On envoi le formulaire POST en --insecure car le certificat est mauvais sur les serveurs du CROUS
# Ensuite on vérifie que ce qui est renvoyé contienne un morceau du script de déconnexion
result=$(
curl -m 10 --connect-timeout 5 --user-agent "$useragent" --insecure $1 -d auth_user="$user" -d auth_pass="$passwd" -d accept="Continue" -v 2> /dev/null
)
if [ $? -ne 0 ]; then
if [ "$v" -ge 1 ]; then
echo "Impossible de se connecter à $1 (unreachable)" >&2;
fi
return 1
fi
if [ $v -ge 2 ]; then
echo $result;
fi # Le mode ultra-verbose
echo $result | grep 'input name="logout_id"'>/dev/null 2>&1
if [ $? -eq 0 ]; then # Si ca marche
if [ $v -ge 1 ]; then
echo "Connecté sur $1. Rafraichissement dans $tempsLong s";
fi
return 0
else # Si ca ne retourne pas le bon résultat
if [ $v -ge 1 ];
then echo "Erreur: Impossible de s'identifier sur $1" >&2;
fi
return 1
fi
}
#Authentification sur le portail captif
multipleConnect()
{
if loginCROUS "https://portailpf8.crous.lan:8001/?zone=lan"; then return 0; fi
if loginCROUS "http://172.17.144.2:8002/?zone=lan"; then return 0; fi
if loginCROUS "http://172.17.160.2:8002?zone=lan"; then return 0; fi
if loginCROUS "http://172.17.176.2:8002?zone=lan"; then return 0; fi
if loginCROUS "http://172.17.208.10:8002?zone=lan"; then return 0; fi
if loginCROUS "http://192.168.1.9:8004?zone=lan"; then return 0; fi
if loginCROUS "http://172.17.208.10:8002?zone=lan"; then return 0; fi
# Mode graphique
# notify-send "$0" "/!\\ Impossible de se connecter. Nouvel essai dans $tempsCourt s" >&2
echo "Impossible de se connecter, nouvel essai dans $tempsCourt s"
return 1
}
reloadIn=0
while sleep $reloadIn
do
if ! multipleConnect; then
reloadIn=$tempsCourt;
else
echo "Connection au CROUS, Status: OK"; exit 0; fi
done
exit 0
@aerodomigue
Copy link

Merci de ton travail, suis moi même au crous de toulouse et je l'utilise sur un rpi qui me crée un point d'accé wifi via rasp ap

@4skl
Copy link

4skl commented Dec 31, 2019

Yop, j'ai fait un peu là même si mon implémentation vous intéresse https://github.com/4skl/CROUS-autoconnect

@louisroyer
Copy link

Je me suis basé sur l’implémentation de @4skl pour automatiser l’authentification auprès du portail captif dès que la connexion est faite via Network Manager. Si jamais ça intéresse quelqu’un, c’est par ici: https://github.com/louisroyer/CROUS-autoconnect.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment