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 |
|