#!/bin/bash
#======================= script bash ===========================================
#
# Nom de fichier      :  check_chatgpt_bot.sh
# 
# Utilisation         :  ./check_chatgpt_bot.sh ou check_chatgpt_bot
# 
# Description         :  script sonde pour vérifier l'évoluton des ranges d'IPs des bots chatgpt, utilisation des informations provenant de https://github.com/lord-alfred/ipranges/blob/main/openai/downloader.sh
#			 si un changement intervient cela déclanchera une alerte dans l'outils de monitoring icinga2
# 
# Options             :  ---
# Prérequis           :  aucun
# Bugs                :  ---
# Notes               :  ---
# Auteur              :  pra - <scripts@pra.rip>
# Version             :  0.1
# Date de création    :  02 février 2025
# Date de modification:  ---
#===============================================================================


# constantes
readonly siteSource="https://openai.com/gptbot.json"
readonly repertoire="/var/cache/monitoring/bots/openai"
readonly etatDebug="1"
readonly fichierVide="/var/cache/monitoring/bots/openai/d41d8cd98f00b204e9800998ecf8427e.txt"
readonly md5Attendu="d41d8cd98f00b204e9800998ecf8427e"

# variables
fichierTemoin=$(ls $repertoire/*.txt)
fichierDate=$(date '+%d-%m-%Y_%H-%M-%S')
checkSum=""
md5Calcule=""
idem=""
temoin=""
etat=""

# fonctions
debug ()
#fonction pour visualiser le debuguage si il est activé
{
        if [ "${etatDebug}" == "1" ]; then
                printf "%s\n" "$@"
        fi
}

telechargementFichier ()
#fonction qui télécharge le fichier json contenant la liste des ranges ips utilisé https://openai.com/gptbot-ranges.txt revoie de la merde quand ce n'est pas fait pas un browser
{
	debug "DEBUG:: "
	debug "DEBUG:: <=========================>"
	debug "DEBUG:: Dans la fonction telechargementFichier"
	curl -s "$siteSource"|grep '/'  |awk -F '"' '{print $4}' > "$repertoire"/tmp-"$fichierDate"
}

nettoyage ()
#fonction qui a pour but de supprimer le ou les fichiers temporaires
{
	debug "DEBUG:: "
	debug "DEBUG:: <=========================>"
	debug "DEBUG:: Dans la fonction nettoyage"
	local fichier=""
	for fichier in "$repertoire"/tmp-*; do
		debug "DEBUG:: Dans la boucle de la liste des fichiers"
		debug "DEBUG:: Valeur de la variable fichier : '${fichier}'"
		if [ -e "$fichier" ] && [ -w "$fichier" ]; then
			debug "DEBUG:: Dans la vérification de l'existance du fichier et qu'on ait la permission de l'effacer"
			rm "$fichier"
		fi
	done

}

comparaison ()
#fonction qui compare le fichier témoin et le fichier fraichement téléchargé
{
	debug "DEBUG:: "
	debug "DEBUG:: <=========================>"
	debug "DEBUG:: Dans la fonction comparaison"
	checkSum=$(md5sum "$repertoire"/tmp-"$fichierDate" |awk -F " " '{print $1}')
	debug "DEBUG:: Valeur de la variable checkSum : '${checkSum}'"
	temoin=$(echo "$fichierTemoin" |awk '{ print substr( $0, 35, length($0)-38 )}') 
	debug "DEBUG:: Valeur de la variable fichierTemoin : '${fichierTemoin}'"
	debug "DEBUG:: Valeur de la variable temoin : '${temoin}'"
	if [ "$temoin" == "$checkSum" ] ; then
		idem="oui"
		nettoyage
	else
		idem="non"
                mv "$repertoire"/tmp-"$fichierDate" "$repertoire"/"$checkSum".txt
	fi
	nettoyage
	if [ -w "$fichierVide" ]; then
		md5Calcule=$(md5sum "$fichierVide" | awk '{ print $1 }')
		if [ "$md5Calcule" == "$md5Attendu" ];then
			rm "$fichierVide"
			idem="oui"
		fi
	fi
	debug "DEBUG:: Valeur de la variable idem : '${idem}'"
}

action ()
#fonction qui donne l'état 
{
	debug "DEBUG:: "
	debug "DEBUG:: <=========================>"
	debug "DEBUG:: Dans la fonction action"
	local tmpDiff=""
	if [ "$idem" == "oui" ]; then
		echo -n "OK"
		etat="OK"
		debug "DEBUG:: Valeur de la variable etat : '${etat}'"
		nettoyage
		exit 0
	else
		tmpDiff=$(diff "$repertoire"/*.txt)
		debug "DEBUG:: Valeur de la variable fichierTemoin : '${fichierTemoin}'"
		echo -n "CRITICAL resultat du diff : $tmpDiff"
		etat="CRITICAL"
		debug "DEBUG:: Valeur de la variable etat : '${etat}'"
		nettoyage
		exit 2
	fi
	
}

# main
export "etatDebug"
debug "DEBUG:: "
debug "DEBUG:: <=========================>"
debug "DEBUG:: Dans la partie principale du script"
telechargementFichier
comparaison
action
