send-copie-annotee.sh

script - olivier torres, 09/23/2016 05:29 pm

Download (8 kB)

 
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