| 1 | #!/bin/bash
|
| 2 | # ce script définit des partages owncloud envoie des mails avec l'info pour récupérer le contenu de ces partages
|
| 3 | #
|
| 4 | # OT 19/23/09
|
| 5 | #set -xv# info de debug
|
| 6 |
|
| 7 | ###############################################
|
| 8 | ### variables à définir selon l'utilisateur ###
|
| 9 | ###############################################
|
| 10 | ## path du dossier synchronisé avec owncloud
|
| 11 | baserepertoireowncloud="/home/ot/ownCloud"
|
| 12 |
|
| 13 | ## dossier personnel
|
| 14 | racine=/home/ot ## utile pour les mac
|
| 15 |
|
| 16 | ## login et mot de passe pour la connection owncloud
|
| 17 | ## Le mot de passe est dans un fichier avec la permission 400.
|
| 18 | ## C'est pas top top mais je ne sais pas faire mieux. On
|
| 19 | ## lit simplement son contenu
|
| 20 | LOGIN=otorres;
|
| 21 | PASS=$(cat "$racine/.ot");
|
| 22 |
|
| 23 | ## Pour le mail envoyé aux étudiants, on défini la signature
|
| 24 | ## et l'adresse à laquelle on veut recevoir les copies des mails
|
| 25 | signature="O. Torres"
|
| 26 | bcc="olivier.torres@univ-lille3.fr"
|
| 27 | ###############################################
|
| 28 |
|
| 29 |
|
| 30 | ## On saisit le sous-répertoire synchronisé avec Owncloud dans lequel
|
| 31 | ## on va copier les copies annotées (pdf)
|
| 32 | echo -n "Donne le nom (éviter espace, accents et caractères spéciaux) du dossier Owncloud dans lequel on va copier les scans des copies annotées (p. ex. 2015-2016/L1EMO/Analyse1). Ce dossier peut exister ou pas ; dans ce dernier cas il sera créé : "
|
| 33 | read -e repertoireowncloudsaisi
|
| 34 |
|
| 35 | if [[ ${#repertoireowncloudsaisi} -eq "" ]] ; then ## if1 ##
|
| 36 | echo "Je n'ai pas compris le nom saisi"
|
| 37 | else ## if1 ##
|
| 38 | echo ""
|
| 39 | echo "Le dossier saisi est $(tput bold)$repertoireowncloudsaisi $(tput sgr0). C'est un sous-répertoire du dossier $(tput bold)$baserepertoireowncloud $(tput sgr0)"
|
| 40 |
|
| 41 |
|
| 42 | ## On forme le path complet du répertoire owncloud local
|
| 43 | repertoireowncloud="$baserepertoireowncloud"/"$repertoireowncloudsaisi"
|
| 44 | if [ ! -d "$repertoireowncloud" ] ; then
|
| 45 | mkdir -p "$repertoireowncloud"
|
| 46 | fi
|
| 47 |
|
| 48 | ## On indique le dossier du projet AMC de l'interro (en ommettant la
|
| 49 | ## racine)
|
| 50 | echo ""
|
| 51 | echo "Entre le nom du dossier qui contient les fichiers de l'interro AMC (par exemple : enseignement/201516/L1EMO/Analyse1/interro1) : "
|
| 52 | read -e repertoirecopiesAMC
|
| 53 |
|
| 54 | if [[ -d "$racine/$repertoirecopiesAMC" ]] ; then ## if2 ##
|
| 55 | echo "Le dossier saisi est $(tput bold)$repertoirecopiesAMC $(tput sgr0)"
|
| 56 |
|
| 57 |
|
| 58 | ## liste des fichiers (copies annotées) qui vont être copiés sur le
|
| 59 | ## répertoire local qui sera synchro avec owncloud
|
| 60 |
|
| 61 | fichiers=`ls $racine/$repertoirecopiesAMC/cr/corrections/pdf/*.pdf`
|
| 62 | #nbfichiers=`echo $fichiers |wc -l`
|
| 63 |
|
| 64 |
|
| 65 | ## Si on veut vérifier....
|
| 66 | echo ""
|
| 67 | echo "Ce dossier contient les fichiers pdf suivants"
|
| 68 | read -p "(appuie sur [Entrée] pour voir la liste des fichiers) :"
|
| 69 |
|
| 70 | echo "$fichiers"
|
| 71 |
|
| 72 |
|
| 73 | ## On lance la copie
|
| 74 | echo ""
|
| 75 | echo "Je vais copier ces fichiers depuis $(tput bold)$repertoirecopiesAMC/cr/corrections/pdf/$(tput sgr0) vers $(tput bold)$repertoireowncloud$(tput sgr0). Attention : si des fichiers de même nom s'y trouvent, ils seront écrasés."
|
| 76 | echo "OK ? [o/n]"
|
| 77 | read -e reponse1
|
| 78 |
|
| 79 |
|
| 80 | if [[ "$reponse1" != "o" || ${#reponse1} -eq "" ]] ; then
|
| 81 | echo "Tu n'as pas répondu \"o\", on arrête tout"
|
| 82 | else
|
| 83 | cp -fr $racine/$repertoirecopiesAMC/cr/corrections/pdf/*.pdf "$repertoireowncloud"
|
| 84 | echo "OK, les fichiers ont été copiés"
|
| 85 | echo " "
|
| 86 | echo "Finalement donne le nom de l'interro (celui qui figure sur les copies
|
| 87 | distribuées aux étudiants (on s'en sert pour le sujet du mail qui sera envoyé) : "
|
| 88 | read -e nominterro
|
| 89 | fi
|
| 90 | else ## if2 ##
|
| 91 | echo "Le dossier "$racine/$repertoirecopiesAMC" n'existe pas"
|
| 92 | fi ## if 2##
|
| 93 | #######################
|
| 94 | ##
|
| 95 | fi ## if 1 ##
|
| 96 |
|
| 97 |
|
| 98 | ##### les fichiers ont été copiés sur le répertoire owncloud.
|
| 99 | ##### Il faut maintenant définir les partages et envoyer les mails
|
| 100 | #construction du path vers le dossier contenant les pdf annotés par AMC
|
| 101 | #COURS=AnalyseL1EG;
|
| 102 | #INTERRO=i1;
|
| 103 |
|
| 104 |
|
| 105 | ## dossier contenant les fichiers pdf des copies annotées
|
| 106 | repertoireAMCpdf="$racine/$repertoirecopiesAMC/cr/corrections/pdf"
|
| 107 |
|
| 108 |
|
| 109 | ## dossier du serveur owncloud sur lequel on a transféré les pdf annotés
|
| 110 | ## au format demandé par l'API OCS Share
|
| 111 | repertoiredistant="$repertoireowncloudsaisi"
|
| 112 | echo "$repertoiredistant"
|
| 113 |
|
| 114 | ## truc pour traiter le pb des noms de fichiers avec des blancs
|
| 115 | SAVEIFS=$IFS
|
| 116 | IFS=$(echo -en "\n\b")
|
| 117 |
|
| 118 | for i in $( ls "$repertoireAMCpdf"); do
|
| 119 | if [ ${i:0:2} = "00" ]
|
| 120 | then
|
| 121 | echo fichier amc: $i;
|
| 122 | att=$i;
|
| 123 | len=${#i};
|
| 124 |
|
| 125 | # On veut forger l'adresse sous forme
|
| 126 | # prenon.nom@etu.univ-lille3.fr en récuperant les noms et prenom a
|
| 127 | # partir du nom du fichier $i. Celui-ci est forgé à partir des
|
| 128 | # noms et prenoms de la liste des etudiants utilisés par AMC sous
|
| 129 | # la forme 1234-<nom> <prenom>.pdf
|
| 130 | # si <nom> ne contient que des lettres, pas de pb de format
|
| 131 | # si <nom>=<nom-composé> ou <nom composé>
|
| 132 | # il faut virer les "-" et les " ". ensuite, il faut virer les
|
| 133 | # accents
|
| 134 |
|
| 135 | # extraction du prenom en ne gardant que prenom.pdf
|
| 136 | prenom1=$(echo $i |grep -o '[a-zA-Z\-]*\.pdf$');
|
| 137 |
|
| 138 | # extraction du nom en prenant le nom de fichier moins les 5
|
| 139 | # premiers caractères qui sont 1234- et en ne gardant que ce qui
|
| 140 | # précède $prenom1
|
| 141 |
|
| 142 | nom=$(echo ${i:5} |awk -F"$prenom1" '{print $1}');
|
| 143 |
|
| 144 | # on enlève les lettres accentuées ainsi que les espaces et les
|
| 145 | # - dans le nom
|
| 146 | nomaddress1=$(echo $nom | sed -e 'y/âàéêèëïôùçÀÂÉÈËÊÏÙÔÇ/aaeeeeioucAAEEEEIUOC/' | sed 's/[\ \-]*//g');
|
| 147 | #on convertit tout en minuscules (pas nécessaire)
|
| 148 | nomaddress=$(echo $nomaddress1|sed 's/[A-Z]/\L&/g');
|
| 149 |
|
| 150 | # on extrait le prénom en enlevant .pdf de prenom1
|
| 151 | prenom=$(echo $prenom1 |awk -F".pdf" '{print $1}');
|
| 152 | # on enlève les accents et les blancs (mais on garde les -
|
| 153 | prenomaddress1=$(echo $prenom | sed -e 'y/âàéêèëïôùçÀÂÉÈËÊÏÙÔÇ/aaeeeeioucAAEEEEIUOC/' | sed 's/[\ ]*//g');
|
| 154 | #on passe tout en minuscules
|
| 155 | prenomaddress=$(echo $prenomaddress1|sed 's/[A-Z]/\L&/g');
|
| 156 |
|
| 157 | address="$prenomaddress.$nomaddress@etu.univ-lille3.fr";
|
| 158 |
|
| 159 |
|
| 160 | #prenom utilisé dans le mail : la 1re lettre est mise en majuscule
|
| 161 | prenommail=$(echo $prenomaddress | sed 's/[a-z]/\U&/')
|
| 162 |
|
| 163 |
|
| 164 | # génération des mots de passe avec openssl
|
| 165 | longpassword=$(openssl rand -base64 32);
|
| 166 | motdepasse=$(echo ${longpassword:0:10});
|
| 167 |
|
| 168 | # On utilise l'API OCS Share
|
| 169 | # https://doc.owncloud.org/server/7.0/developer_manual/core/ocs-share-api.html
|
| 170 | # pour créer le partage du fichier $i, type de partage 3 (lien
|
| 171 | # public), permission 1 (lecture) protégé par mot de passe. On stocke
|
| 172 | # le résultat de la commande dans le fichier info afin de pouvoir
|
| 173 | # récupérer le lien du fichier
|
| 174 |
|
| 175 | ## Important de rajouter sync dans le path si on utilise le
|
| 176 | ## client owncloud
|
| 177 |
|
| 178 | curl "https://owncloud.univ-lille3.fr/ocs/v1.php/apps/files_sharing/api/v1/shares" -k -u $LOGIN:$PASS -X POST --data "path=/sync/"$repertoiredistant"/$i&shareType=3&permissions=1&password=$motdepasse" > "$repertoireAMCpdf"/info.txt
|
| 179 |
|
| 180 | # on récupère le lien du fichier créé par la commande précédente
|
| 181 |
|
| 182 | linknumber=$(more $repertoireAMCpdf/info.txt |grep \<token\>|awk -F"<token>" '{print $2}'|awk -F"</token>" '{print $1}')
|
| 183 |
|
| 184 | ##
|
| 185 | # on crée le fichier contenant le message qui sera envoyé par mail
|
| 186 | ##
|
| 187 | echo "Bonjour $prenommail,
|
| 188 | Vous trouverez votre copie corrigée au lien suivant :
|
| 189 |
|
| 190 | https://owncloud.univ-lille3.fr/index.php/s/$linknumber
|
| 191 |
|
| 192 | Le mot de passe pour y accéder est $motdepasse
|
| 193 |
|
| 194 | Cordialement
|
| 195 | $signature " > $repertoireAMCpdf/message.txt
|
| 196 | ###
|
| 197 |
|
| 198 | echo $nom $prenom, $prenommail, $att, $address
|
| 199 |
|
| 200 | if [ -f "$racine/$repertoirecopiesAMC/verif.txt" ] ; then
|
| 201 | rm -f "$racine/$repertoirecopiesAMC/verif.txt"
|
| 202 | fi
|
| 203 | echo "$nom $prenom, $att, $address, $prenommail, $linknumber, $motdepasse" >> $racine/$repertoirecopiesAMC/verif.txt
|
| 204 |
|
| 205 |
|
| 206 | # On envoie le mail. J'utilise mon client mail (mutt) avec la
|
| 207 | # config de ~./mutt/neomutt_l3. Mais il possible de faire la
|
| 208 | # même chose avec msmtp par exemple
|
| 209 |
|
| 210 | mutt -F ~/.mutt/neomuttrc_l3 -s " "$nominterro" : votre copie corrigée" $address -b $bcc < $repertoireAMCpdf/message.txt
|
| 211 |
|
| 212 | fi
|
| 213 | done
|
| 214 |
|
| 215 | IFS=$SAVEIFS
|
| 216 |
|
| 217 |
|