Ajout de l'option --config pour générer le fichier de config
[ccoop.git] / ccoop-update.sh
index 9fdd8aae2c11a5b2c4b0476f289adb521fa316e1..ce9a6d3d14c4dfce15de7b6bb9e21b1f04c26a0d 100755 (executable)
@@ -1,12 +1,17 @@
 #!/usr/bin/env bash
-# crédit coopératif fetcher
+#
+# Crédit Coopératif account tools
+#
+# It fetch csv file and merge them to previous ones
+# It also generates a local file suitable for a feed reader
+#
 # Depends on wget, iconv
 
 set -e
 
 LOGFILE=coop.log # unsued unless --log option is used
-COOKIEJAR=cookiejar
-TMP=lastpage.html
+COOKIEJAR=cookiejar # cookies, deleted on exit
+TMP=lastpage.html # last html page, deleted on exit
 
 function parsearg() {
     _OPT="${1%=?*}"
@@ -15,12 +20,13 @@ function parsearg() {
 
 function usage() {
     #echo $'\n' $@ $'\n'
-    echo "Usage: coop.sh [options]"
+    echo "Usage: ccoop.sh [options]"
     echo "  -h|--help             Display that help"
     echo "  -q|--quiet            Don't display informationnal messages"
-    echo "  -l|--log              Log requests to $LOGFILE"
+    echo "  --log                 Log everything to $LOGFILE"
+    echo "  --config              Setup a config file"
     #echo "  --target=<filename>  Set target filename. Defaults to $target_file"
-    #echo "See man curcy-update(1) for documentation."
+    #echo "See man ccoop.sh(1) for documentation."
 }
 
 for arg in "$@"; do
@@ -31,10 +37,14 @@ for arg in "$@"; do
         quiet=1
         continue
     ;;
-    -l|--log)
+    --log)
         log=1
         continue
     ;;
+    --config)
+        ismakeconfig=1
+        continue
+    ;;
     -h|--help)
         usage 
         exit 0
@@ -51,18 +61,18 @@ for arg in "$@"; do
     esac
 done
 
-# That function prints messages, unless quiet is set
+# That function prints messages to stderr, unless quiet is set
 # It logs into $LOGFILE if log is set, no matter whether quiet is set or not
 function inform() {
     if [ -n "$quiet" ]; then
         if [ -n "$log" ]; then
-            echo $@ >> $LOGFILE
+            echo $@ >> $LOGFILE >&2
         fi
     else # not quiet
         if [ -n "$log" ]; then
-            echo $@ | tee -a $LOGFILE
+            echo $@ | tee -a $LOGFILE >&2
         else
-            echo $@
+            echo $@ >&2
         fi
     fi
 }
@@ -74,9 +84,19 @@ function fetch() {
     fi
 }
 
+function makeconfig() {
+    read -p "Coopanet login: " COOPLOGIN
+    read -p "Coopanet password: " -s COOPPASSWORD
+    echo "# coopanet configuration">config
+    echo "COOPLOGIN=$COOPLOGIN">>config
+    echo "COOPPASSWORD=$COOPPASSWORD">>config
+    echo >&2
+    echo "config file writen" >&2
+}
+
 function fetchall() {
-    echo > $COOKIEJAR
-    echo > $LOGFILE
+    echo> $COOKIEJAR
+    echo> $LOGFILE
     
     inform "WGET login form"
     fetch https://www.coopanet.com/banque/cpt/
@@ -86,7 +106,11 @@ function fetchall() {
     
     inform "WGET cpt/connexion.do"
     fetch https://www.coopanet.com/banque/cpt/cpt/connexion.do
-    
+    if grep -q "Vous venez de quitter  COOP@NET" $TMP; then
+        echo "Can't log in. Check password" >&2
+    fi
+
     IFS=$'\n'
     accountsId=(`grep numeroExterne $TMP | grep hidden | cut -d \" -f 6`)
     accountsNames=(`grep "<td style=\"width:9%;\">" $TMP | cut -d ">" -f 2 | cut -d "<" -f 1`)
@@ -155,20 +179,29 @@ function atomize() {
     done
 }
 
-umask 0077 # make sure the generated files are only readable by the user
 
 cd `dirname $0`
 
+
+umask 0077 # make sure the generated files are only readable by the user
+
+if [[ -n $ismakeconfig ]]; then
+    makeconfig
+fi
+
+# Make sure our temporary files are deleted on error and on exit
+trap "rm -f $COOKIEJAR $TMP; exit" INT TERM EXIT
+
 if [[ `ls -l config | cut -c 8-10` != "---" ]]; then
-    echo "Security warning file should be chmod o-rwx"
+    echo "Security warning: config file should be chmod o-rwx" >&2
 fi
 source config
 
-
 if [[ -n $log ]]; then
-    inform "Warning, $LOG will contain sensitive information. You should delete it."
+    inform "Warning, $LOGFILE will contain sensitive information. You should delete it."
 fi
 
+
 fetchall
 updatehistory
 atomize