Code Source – SentinelLog: main.sh

#!/usr/bin/env bash 
# ===========================================================================================
# Point d'entree principal (CLI parser & orchestrateur)
# ===========================================================================================

# Activation du mode securite Bash strict
set -euo pipefail 

# Determination du dossier racine du script pour les chargements relatifs, on s'y deplace via la commande cd
# et on se rassure que nous y sommes bien via la commande pwd
# Note: la variable BASH_SOURCE est une commande speciale integree au shell bash initialisee des son lancement au moment de l'execution du script
# elle contient le chemin relatif ou absolu du fichier de script Bash actuellement en cours d'execution 
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Chargement du fichier de configuration et des bibliotheques
if [[ -f "${SCRIPT_DIR}/settings.env" ]]; then 
    # S'il existe, on le charge dans l'environnement
    source "${SCRIPT_DIR}/settings.env"
else
    echo "[!] ERREUR CRITIQUE: fichier de configuration settings.env introuvable." >&2
    exit 1
fi 
source "${SCRIPT_DIR}/lib/sanitize.sh"
source "${SCRIPT_DIR}/lib/extractor.sh"
source "${SCRIPT_DIR}/lib/anonymizer.sh"
source "${SCRIPT_DIR}/lib/compressor.sh"

# Fonction d'affichage de l'aide 
usage(){
    echo "Usage: $0 -d <log_directory> [-l <lines_count>]"
    echo "  -d <dir>    Specifie le repertoire contenant les journeaux a analyser (obligatoire)."
    echo "  -l <lines   Specifie le nombre de lignes a extraire par fichier (defaut: ${DEFAULT_LINES})."
    echo "  -h          Affiche ce message d'aide."
}

# Initialiation des variables
LOG_DIR=""
LINES_COUNT="${DEFAULT_LINES}"

# Parsing des options CLI via getopts (repertoire cible et nombre de lignes)
while getopts ":d:l:h" opt; do
    case "${opt}" in 
        d) LOG_DIR="${OPTARG}";;
        l) LINES_COUNT="${OPTARG}";;
        h) usage;;
        :\?) echo "[!] Option inconnue: -${OPTARG}" >&2; usage;;
        :) echo "[!] L'option -${OPTARG} requiert un argument." >&2; usage;;
    esac
done

# Verification des arguments obligatoire (repertoire cible)
if [[ -z "${LOG_DIR}" ]]; then 
    echo "[!] ERREUR: Le parametre -d <dir> est obligatoire." >&2
    usage
fi 

# Application de substitution conditionnelle (au cas ou les arguements optionnels n'auraient pas ete fournis: nombre de lignes a lire)
LINES_COUNT="${LINES_COUNT:-$DEFAULT_LINES}"

# Controle de securite : EUID 
if ! check_privileges; then 
    exit 1 # Utilisateur non root, on met fin au processus
fi 

# Controle de securite : Sanitisation du repertoire 
if ! sanitize_directory "${LOG_DIR}"; then 
    exit 2 # Repertoire vide ou autre erreur liee aux controles internes (cf module sanitize.sh)
fi 

# Pipeline d'extraction, anonymisation et compression (via des tuples)
echo "[*] Demarrage de l'extraction et de l'anonymisation dans ${LOG_DIR}"
ARCHIVE_PATH=$(extract_logs "${LOG_DIR}" "${LINES_COUNT}" | anonymize_stream | compress_and_export ".")
if [[ -n "${ARCHIVE_PATH}" && -f "${ARCHIVE_PATH}" ]] ; then 
    echo "[!] Rapport genere et anonymise avec succes: ${ARCHIVE_PATH}"
    exit 0
else 
    echo "[!] Echec de la generation du rapport." >&2
    return 3
fi

Vous aimerez aussi...