#!/bin/bash

dicsit.help(){
	echo "

	dicsit.help : Manuel des commandes \"Dicsit\".

	> dicsit.infoSys : Informations sur le système. 
	> dicsit.ipInfos : Donnes toutes les IP d'une machine.
	> dicsit.lsDNS : Donne la configuration DNS et propose de l'éditer.
	> dicsit.lsActiveServices : Liste les services actifs et en cours d'exécution.
	> dicsit.dumpAllDatabaseMySql : Copie intégrale de la BDD MySql avec l'utilisateur courant.
	> dicsit.listeningPorts : Liste les ports en écoute localement
	> dicsit.lsCrontabUsers : Liste toutes les tâches planifiées.
	> dicsit.SearchInTheHistories : Faire une recherche de commande dans tous les historiques.
	> dicsit.FindTheLargestFiles : Recherche des plus gros fichiers dans un emplacement donné.
	> dicsit.checkNetworkConfiguration : Permet de vérifier/éditer toutes les informations réseaux d'un serveur.
	"
}

dicsit.infoSys(){
	clear
	echo -e "\n### Os Informations ####################\n"
	echo -e "Host : $(uname -n) - $(uname -p)\n$(cat /etc/os* | grep NAME)"
	echo -e "\n### Uptime ####################\n"
	uptime
	echo -e "\n### Sessions (TTY/PTS) ####################\n"
	(w || who)
	echo -e "\n### RAM ####################\n"
	free -h
	echo -e "\n### CPU ####################\n"
	echo -e "Total Usage :$(grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage " %"}')"
	echo -e "\n### Storage ####################\n"
	df -h
}

dicsit.ipInfos(){
	echo -e "\nLocal IP :\n"
	(ifconfig | grep 'inet ' | grep -v 127.0.0.1) || (ip a | grep inet | grep -vE "inet6|127.0.0.1")
	echo -e "\nPublic IP :"
	if [ -f /usr/bin/curl ] || [ -f /usr/sbin/curl ] ; then
		curl -s ipinfo.io/"$1" 2>/dev/null | sed "s/{//g ; s/}//g ; s/,//g ; s/\"//g ; /readme/d"; echo -e "\n"
	elif [ -f /usr/bin/wget ] || [ -f /usr/sbin/curl ]; then
		wget -q -O - ipinfo.io 2>&1 | sed "s/{//g ; s/}//g ; s/,$//g ; s/\"//g ; /readme/d"; echo -e "\n"
	else
		echo -e "Wget and Curl not available.\n"
	fi
}

dicsit.lsDNS(){
	echo -e "DNS configuration :\n" 
	cat /etc/resolv.conf
	echo -e "\n"
	read -p "Edit DNS configuration ? [y/n] : " EDITION
	if [ "$EDITION" = "y" ] || [ "$EDITION" = "Y" ]; then
		sudo nano /etc/resolv.conf || sudo vim /etc/resolv.conf || sudo vi /etc/resolv.conf
	fi
	echo -e "\n"
}

dicsit.lsActiveServices(){
	(systemctl list-units --type=service | grep 'active running' 2>/dev/null) || (service --status-all 2>/dev/null | grep "[ + ]") || (ls -F /etc/init.d/ | grep '*$' | sed "s/\*//g" | sed "s/^/\/etc\/init.d\//g" | sed "s/$/ status 2>\/dev\/null/g" |sh )
}

dicsit.dumpAllDatabaseMySql(){
	mysqldump -u $USER -p --all-databases > BDD-MYSQL-BACKUP.sql
}

dicsit.listeningPorts(){ 
	echo -e "\nPorts Open : "
	if [ -f /usr/bin/netstat ] || [ -f /bin/netstat ] || [ -f /usr/sbin/netstat ];then
		netstat -an 2>/dev/null | grep tcp | grep -v tcp6 | grep LISTEN | awk "{print \$4}" | cut -d":" -f2 | sed "s/^\*\.//g" | grep -v "127.0.0.1"| sort -n | uniq | tr "\n" / | sed "s/^/- /g ; s/\/$//g"
	elif [ -f /usr/bin/nc ];then
		nc -zv 127.0.0.1 1-49151 2>&1 | grep succeeded | awk "{print \$4}" | sort -n | uniq | tr "\n" / | sed "s/^/- /g ; s/\/$//g"
	elif [ -f /usr/bin/ss ];then
		ss -tl4n | awk "{print \$4}" | cut -d: -f2 | grep -o "^[0-9]*" | sort -n | uniq | tr "\n" / | sed "s/^/- /g ; s/\/$//g"
	else
		echo "Netstat, nc and ss not available."
	fi
	echo -e "\n"
}

dicsit.lsCrontabUsers(){
	for user in $(cut -f1 -d: /etc/passwd); do
		echo -e "\nUseur: $user"
		crontab -u "$user" -l
		sleep 0.8
	done
}

dicsit.SearchInTheHistories(){
	SEARCH="$1"
	if [ -z "$SEARCH" ]; then
		read -p  "Search : " SEARCH 
	fi
	if [ -n "$SEARCH" ]; then
		sudo find / -iname ".*_history" -exec cat {} \; | grep "$SEARCH" | sort | uniq
	else
		echo "Usage error."
	fi
}

dicsit.FindTheLargestFiles(){
	SRC="$1"
	if [ -z "$1" ]; then
		read -p "Where should I look ? " SRC
	fi
	if [ -n "$SRC" ]; then
		find . -type f -exec ls -lahs {} + | sort -n -r | head -n 50
	else
		echo "Usage error."
	fi
}

dicsit.help
