#!/bin/sh

echo " "
echo "***** MAJ agent V1.01 *****"
#V1.01 01/12/17
#Ajout de l'envoi du fichier d'info MAJ sur le FTP
###########################################################################

#Initialisation
if [ -e "/home/CAPELEC/DATA/passerelle.state" ]; then
	CPT_PASSERELLE=`cat "/home/CAPELEC/DATA/passerelle.state"`	
else
	CPT_PASSERELLE=0
	echo $CPT_PASSERELLE > "/home/CAPELEC/DATA/passerelle.state"
fi
echo "CPT_PASSERELLE=$CPT_PASSERELLE"
DONE_PASSERELLE=0
DONE_UPLOAD=0
DONE_DOWNLOAD=0
LINKDIR=" http://support.capelec.fr/Download/CAP1XXX/CAP1830/"
FICHIERLIST="list.txt"

#Lecture des infos sur le CAP1830
echo "***** Info CAP1830 *****"
#VERSION
VERSION=`cat "/etc/info" | grep "VERSION" | cut -d"=" -f2 `
VNUM=`echo $VERSION | tr -d ".Vv "`
echo "VERSION=$VERSION ($VNUM)"
if [ -z $VNUM ]; then
	echo "ERROR: VERSION is null"	
	exit
fi
#BRAND
BRAND=`cat "/home/CAPELEC/DATA/PARAM.txt" | grep "#005#" | cut -d"#" -f3 | tr -d "1 \""`
echo "BRAND=$BRAND"
if [ -z $BRAND ]; then
	echo "ERROR: BRAND is null"	
	exit
fi
#SERIAL
SERIAL=`cat "/home/CAPELEC/DATA/PARAM.txt" | grep "#020#" | cut -d"#" -f3 | tr -d " "`
echo "SERIAL=$SERIAL"
if [ -z $SERIAL ]; then
	echo "ERROR: SERIAL is null"	
	exit
fi
#MODEL
MODEL="CAP1830"
echo "MODEL=$MODEL"

echo "***** Download Time *****"
#Création de l'heure de MAJ
#Mise à jour peut se lancer de 9h à 17h
#RAND=230 #DEBUG
RAND=$RANDOM
echo "Random=$RAND"
INITDATE=`date -d "9:00" +%s`

#Modulo 480 minutes (8h)
MODULO=480
OFFSET=`expr \( $SERIAL + $RAND \) % $MODULO`
OFFSETSEC=`expr $OFFSET \* 60`
echo "Offset=$OFFSET `date -d @$OFFSETSEC +%H:%M:%S`"
TIMESEC=`expr $INITDATE + $OFFSETSEC`
TIME=`date -d @$TIMESEC +%H%M`
echo "Time=$TIME"

echo "***** Start wait loop *****"
while :; do
	CURTIME=`date +%H%M`
	echo "CurTime=$CURTIME"

	#Vérification de la passerelle
	if [ $CPT_PASSERELLE -lt 5 ] && [ $DONE_PASSERELLE = 0 ] && [ ! -e "/home/CAPELEC/DATA/offline.state" ] && [ -e "/home/CAPELEC/DATA/mount.state" ]; then
		echo " "
		echo "--------Check passerelle--------"
		TEST_FILE="CAP1830-$BRAND-$VERSION-$SERIAL-GATEWAY-OK.txt"
		echo "/etc/ip_config" > "/home/CAPELEC/DATA/log/$TEST_FILE"
		cat "/etc/ip_config" >> "/home/CAPELEC/DATA/log/$TEST_FILE"
		echo "/home/CAPELEC/DATA/PARAM.txt" >> "/home/CAPELEC/DATA/log/$TEST_FILE"
		cat "/home/CAPELEC/DATA/PARAM.txt" >> "/home/CAPELEC/DATA/log/$TEST_FILE"	 
		ftpput -u capelec-REP -p rUj3v5HN ftp.cluster013.ovh.net "/CAP1830/PASSERELLE/$TEST_FILE" "/home/CAPELEC/DATA/log/$TEST_FILE"
		if [ $? = 0 ]; then #ftp OK
			echo "Upload ftp OK !"
			CPT_PASSERELLE=10
			echo $CPT_PASSERELLE > "/home/CAPELEC/DATA/passerelle.state"
			echo "Cpt=$CPT_PASSERELLE"
		else
			rm "/home/CAPELEC/DATA/log/$TEST_FILE"
			echo "Upload ftp NOT OK..."
			#Mise à jour auto de la passerelle
			echo "---Mise a jour auto de la passerelle---"		
			NEW_GW=`udhcpc -i eth0 -nt 10 | grep "Adding router" | cut -d" " -f3`
			echo "Passelle dhcp= $NEW_GW"
			if [ -z "$NEW_GW" ]; then
				echo "ERROR: passelle dhcp null"	
				let CPT_PASSERELLE++
				echo $CPT_PASSERELLE > "/home/CAPELEC/DATA/passerelle.state"
				echo "Cpt=$CPT_PASSERELLE"
				/etc/init.d/S52set_ip #udhcpc fait perde la config IP 
			else	
				#mise à jour du fichier ip_config
				NEW_GW2="export GATEWAY=\"$NEW_GW\""
				NEW_GW2=`printf "%-60s" "$NEW_GW2"`
				echo "Passelle ip_config new= $NEW_GW2"		
				CUR_GW=`cat "/etc/ip_config" | grep "GATEWAY"`		
				echo "Passelle ip_config cur= $CUR_GW"
				if [ -z "$CUR_GW" ]; then
					echo "ERROR: CUR_GW ip_config is null"	
					echo $NEW_GW2 >> /etc/ip_config
				else	
					sed "s/$CUR_GW/$NEW_GW2/" /etc/ip_config > /etc/ip_config.backup
					cp /etc/ip_config.backup /etc/ip_config
					chmod 777 /etc/ip_config
				fi

				#mise à jour du fichier PARAM.txt
				NEW_GW2=`echo -e "#026#$NEW_GW"`
				echo "Passelle PARAM.txt new= $NEW_GW2"
					
				CUR_GW=`cat "/home/CAPELEC/DATA/PARAM.txt" | grep "#026#"`		
				echo "Passelle PARAM.txt cur= $CUR_GW"
				if [ -z "$CUR_GW" ]; then
					echo "ERROR: CUR_GW PARAM.txt is null"	
					echo $NEW_GW2 >> /home/CAPELEC/DATA/PARAM.txt
				else	
					sed "s/$CUR_GW/$NEW_GW2/" /home/CAPELEC/DATA/PARAM.txt > /home/CAPELEC/DATA/PARAM.txt.backup
					cp /home/CAPELEC/DATA/PARAM.txt.backup /home/CAPELEC/DATA/PARAM.txt
					chmod 777 /home/CAPELEC/DATA/PARAM.txt
				fi
		
				TEST_FILE="CAP1830-$BRAND-$VERSION-$SERIAL-GATEWAY-UPDATE.txt"
				echo "/etc/ip_config" > "/home/CAPELEC/DATA/log/$TEST_FILE"
				cat "/etc/ip_config" >> "/home/CAPELEC/DATA/log/$TEST_FILE"
				echo "/home/CAPELEC/DATA/PARAM.txt" >> "/home/CAPELEC/DATA/log/$TEST_FILE"
				cat "/home/CAPELEC/DATA/PARAM.txt" >> "/home/CAPELEC/DATA/log/$TEST_FILE"
				ftpput -u capelec-REP -p rUj3v5HN ftp.cluster013.ovh.net "/CAP1830/PASSERELLE/$TEST_FILE" "/home/CAPELEC/DATA/log/$TEST_FILE"

				CPT_PASSERELLE=10
				echo $CPT_PASSERELLE > "/home/CAPELEC/DATA/passerelle.state"
				echo "Cpt=$CPT_PASSERELLE"
				reboot				
			fi		
		fi
		DONE_PASSERELLE=1		
	fi

	#Envoi du fichier d'info MAJ sur le FTP
	if [ $CURTIME \> $TIME ] && [ $DONE_UPLOAD = 0 ] && [ -e "/home/CAPELEC/DATA/sendtoftp.state" ] && [ ! -e "/home/CAPELEC/DATA/offline.state" ] && [ -e "/home/CAPELEC/DATA/mount.state" ]; then
		echo " "
		echo "---Envoi fichier info MAJ sur ftp---"
		DATE_ET_HEURE=`date '+%d/%m/%y %H:%M:%S'`
		echo $DATE_ET_HEURE
		NAME_FILE="`cat "/home/CAPELEC/DATA/sendtoftp.state"`"
		echo "$NAME_FILE.txt"
		echo "Download $DATE_ET_HEURE $NAME_FILE" >> "/home/CAPELEC/DATA/log/$NAME_FILE.txt"
		if [ $BRAND = "TECNO" ] || [ $BRAND = "SPX" ]
		then
			BRAND_FOLDER="BOSCH"
		else
			BRAND_FOLDER=$BRAND
		fi
		ftpput -u capelec-REP -p rUj3v5HN ftp.cluster013.ovh.net "/CAP1830/$BRAND_FOLDER/$NAME_FILE.txt" "/home/CAPELEC/DATA/log/$NAME_FILE.txt"
		if [ $? = 0 ]; then #ftp OK
			echo "Upload ftp.cluster013.ovh.net /CAP1830/$BRAND_FOLDER/$NAME_FILE.txt"
			rm "/home/CAPELEC/DATA/sendtoftp.state" 			
		else
			echo "Upload ERROR ftp.cluster013.ovh.net /CAP1830/$BRAND_FOLDER/$NAME_FILE.txt"
			echo "Download fail" >> "/home/CAPELEC/DATA/log/$NAME_FILE.txt"
		fi
		DONE_UPLOAD=1
	fi
	
	#Mise à jour à distance par FTP
	if [ $CURTIME \> $TIME ] && [ $DONE_DOWNLOAD = 0 ] || [ -e "/home/CAPELEC/DATA/GOMAJ" ]; then #Test si C'est l'heure et si la MAJ a déjà été faite aujourd'hui
		echo " "		
		echo "---Check MAJ a distance sur FTP---"
		rm /home/CAPELEC/DATA/update/* #effacement des anciennes MAJ
		mkdir /home/CAPELEC/DATA/dltmp #Création d'un répertoire temporaire de travail
		cd /home/CAPELEC/DATA/dltmp
		LINK=${LINKDIR}${FICHIERLIST}
		echo "Download list file $LINK" 
		wget $LINK #Téléchargement du fichier liste
		if [ -e $FICHIERLIST ]; then	#Test si le fichier existe?
			#Mise en forme UNIX du fichier
			cat "$FICHIERLIST" | tr "\r" " " > "tmp" 
			cat "tmp" > "$FICHIERLIST"
			rm tmp
			NBFILE=`cat $FICHIERLIST 2> /dev/null | wc -w` #Compte le nombre de .cap dans le fichier list
			echo "Number of file: $NBFILE"
			if [ $NBFILE != 0 ]; then
				for NFILE in `seq $NBFILE`
			    	do 
					echo "--------------------------"	
					FILE=`sed -n ${NFILE}p $FICHIERLIST`
					echo "File: $FILE"
					LINK=${LINKDIR}${FILE}
					echo "Download $LINK"			
					wget $LINK #Téléchargement du fichier .cap
					if [ -e $FILE ]; then	#Test si le fichier .cap existe?
						#echo "Read $FILE"
						#Mise en forme UNIX du fichier
						cat "$FILE" | tr "\r" " " > "tmp"
						cat "tmp" > "$FILE"
						rm tmp	
						#RAZ variables
						MMAJOR="";MVERSION="";MBRAND="";MMODEL="";MSERIAL="";MCOUNTRY="";MTYPE="";MLINKINFO="";MLINK="";MCS="" 					
						source "$FILE"
						#Analyse Version Majeur	
						MMAJORNUM=`echo $MMAJOR | tr -d ".Vv "`
						echo "  Test: MMAJOR=$MMAJOR ($MMAJORNUM)"
						echo "  $VNUM >= $MMAJORNUM"
						if [ -n "$MMAJORNUM" ]; then									
							if [ $VNUM -ge $MMAJORNUM ]; then	
								OK=1
								echo "---> Ok"
							else 
								OK=0		
								echo "---> FAIL"					
							fi	
						else 
							OK=0		
							echo "---> FAIL"					
						fi
						if [ $OK = 1 ]; then
							#Analyse Version Mineur
							MVERSIONNUM=`echo $MVERSION | tr -d ".Vv "`
							echo "  Test: MVERSION=$MVERSION ($MVERSIONNUM)"
							echo "  $VNUM < $MVERSIONNUM"
							if [ -n "$MVERSIONNUM" ]; then	
								if [ $VNUM -lt $MVERSIONNUM ]; then	
									OK=1
									echo "---> Ok"
								else 
									OK=0		
									echo "---> FAIL"					
								fi			
							else 
								OK=0		
								echo "---> FAIL"					
							fi			
						fi
						#Analyse Marque
						if [ $OK = 1 ]; then								
							echo "  Test: MBRAND=$MBRAND"
							echo "  $BRAND = $MBRAND"
							if [ "$BRAND" = "$MBRAND" ]; then	
								OK=1
								echo "---> Ok"
							else 
								OK=0		
								echo "---> FAIL"					
							fi			
						fi
						#Analyse Modele
						if [ $OK = 1 ]; then
							echo "  Test: MMODEL=$MMODEL"
							echo "  $MODEL = $MMODEL"
							if [ "$MODEL" = "$MMODEL" ]; then	
								OK=1
								echo "---> Ok"
							else 
								OK=0		
								echo "---> FAIL"					
							fi			
						fi
						#Analyse Numero de série
						if [ $OK = 1 ]; then
							PRIO=0								
							echo "  Test: MSERIAL=$MSERIAL"
							if [ "$MSERIAL" = "ALL" ]; then	
								OK=1
								echo "---> Ok (ALL)"
							else 
								OK=0
								NBSER=`echo "$MSERIAL" | wc -w`
								#echo "$NBSER"
								for NSER in `seq $NBSER`
			    					do 
									#echo "$NSER"
									SER=`echo "$MSERIAL" | cut -d" " -f$NSER`
									#echo "$SER"
									if [ -z `echo "$SER" | grep "-"` ]; then #Test si Numéro de serie unique
										if [ $SERIAL -eq $SER ]; then	
											OK=1
											PRIO=1
											echo "---> Ok"
										fi
									else #Si gamme de Numéro de série
										SERMIN=`echo $SER | cut -d"-" -f1`
										SERMAX=`echo $SER | cut -d"-" -f2`
										#echo "$SERMIN <= $SERIAL <= $SERMAX"
										if [ $SERMIN -le $SERIAL ] && [ $SERIAL -le $SERMAX ]; then
											OK=1
											echo "---> Ok ($SERMIN <= $SERIAL <= $SERMAX)"
										fi
									fi 
								done
								if [ $OK = 0 ]; then
									echo "---> FAIL"
								fi								
							fi			
						fi							
						#Analyse du Link
						if [ $OK = 1 ]; then
							echo "  Test: MLINK=$MLINK"
							if [ -z "$MLINK" ]; then									 
								OK=0		
								echo "---> FAIL"					
							else
								OK=1		
								echo "---> Ok"
							fi		
						fi
						#Analyse du CS
						if [ $OK = 1 ]; then
							echo "  Test: MCS=$MCS"
							if [ -z "$MCS" ]; then									 
								OK=0		
								echo "---> FAIL"					
							else
								OK=1		
								echo "---> Ok"
							fi		
						fi
						#------------------------
						#Téléchagement de la MAJ
						#------------------------
						if [ $OK = 1 ]; then
							echo "Download $MLINK"			
							rm *.tar 2> /dev/null
							wget $MLINK #Téléchargement du fichier .tar
							FILETAR=`ls *.tar`
							if [ -n "$FILETAR" ]; then 
								#Vérification du CS
								MD5=`md5sum "$FILETAR" | cut -d" " -f1 | tr -d " " | tr "a-z" "A-Z"`
								MMD5=`echo $MCS | tr "a-z" "A-Z"`
								echo "  Check: MD5=$MD5"
								if [ "$MD5" = "$MMD5" ]; then									 
									OK=1		
									echo "---> Ok"					
								else
									OK=0		
									echo "---> FAIL"										
								fi
								#Préparation des répertoires de MAJ
								if [ $OK = 1 ]; then
									if [ "$PRIO" = "1" ]; then #Test si MAJ prioritaire (numéro de serie en dure)
										echo "$FILE has priority"
										mkdir prio 2> /dev/null
										mv *.tar prio/
									else #Si MAJ non prioritaire											
										echo "$FILE has no priority"
										mkdir nprio 2> /dev/null
										mv *.tar nprio/
									fi		
								fi									
							else #Le fichier .tar n'exite pas ou n'a pas pu être téléchargé
								echo "ERROR: $FILETAR not found"
							fi	
						else #Le fichier .cap ne concerne pas ce CAP1830
							echo "$FILE not for this equipement"
						fi							
					else  #Le fichier .cap n'exite pas ou n'a pas pu être téléchargé
						echo "ERROR: $FILE not found"
					fi	
				done #Fin de la boule de sur le fichier dans list.txt
		
				#------------------------------------------
				#Copie des répertoires de MAJ vers "update"
				#------------------------------------------					
				if [ -e "prio" ]; then #Test si MAJ prioritaire exite
					echo "New update in /home/CAPELEC/update/"
					ls prio/						
					cp prio/* /home/CAPELEC/DATA/update/
				else
					if [ -e "nprio" ]; then #Test si MAJ non prioritaire exite
						echo "New update in /home/CAPELEC/update/"
						ls nprio/							
						cp nprio/* /home/CAPELEC/DATA/update/							
					else
						echo "----> No update" 
					fi					
				fi
				#Netoyage du répertoire dltmp
				cd /home/CAPELEC/DATA/
				rm -r /home/CAPELEC/DATA/dltmp
				echo "***** end *****"
				
			else #Le fichier liste est vide
				echo "Download list blank"
				cd /home/CAPELEC/DATA/
				rm -r /home/CAPELEC/DATA/dltmp
			fi	
		else #Le fichier liste n'exite pas ou n'a pas pu être téléchargé
			echo "No list file"
			cd /home/CAPELEC/DATA/
			rm -r /home/CAPELEC/DATA/dltmp
		fi
			
		# Si la MAJ provient du bouton de l'interface WEB, on supprime le fichier GOMAJ et on redemarre le systeme
		if [ -e "/home/CAPELEC/DATA/GOMAJ" ]; then
			rm "/home/CAPELEC/DATA/GOMAJ"
			echo "reboot..."
			reboot
		fi

		DONE_DOWNLOAD=1		
	else
		if [ $DONE_DOWNLOAD = 0 ]; then
			echo "No time"
		fi
	fi	
	sleep 10
done
