#!/bin/bash

ROOT_UID=0
PACKAGE_COMMANDS=("dpkg:apt" "rpm:yum" "pacman:pacman")

check_root() {
  # Check for root privileges
  if [[ $EUID -ne $ROOT_UID ]]; then
     echo "This script must be run as root"
     exit 1
  fi
}

detect_package_manager() {
  # Check which package manager is used
  for i in ${PACKAGE_COMMANDS[@]} ; do
    KEY="${i%%:*}"
    VALUE="${i##*:}"
    if command -v $KEY >/dev/null 2>&1; then
      PKG_MGR=$VALUE
      return
    fi
  done
  echo "Unable to detect package manager. Exiting."
  exit 1
}

create_log_folder() {
  # Get input for CDA info
  read -p "Enter CDA info (example: UNIT-SYSTEM-DCID): " CDA
  # Set folder name and create folder
  TODAY_DATE=$(date +"%m-%d-%Y")
  CURRENT_TIME=$(date +"%H;%M")
  LOG_DIRECTORY="[$CDA]$TODAY_DATE@$CURRENT_TIME"
  mkdir "$LOG_DIRECTORY"
  cd "$LOG_DIRECTORY"
}

write_output() {
    command=$1
    filename=$2
    if $command > "$filename" 2>&1; then
        echo "Successfully executed: $command" >> "log.txt"
    else
        echo "Failed to execute: $command"
        echo "Failed to execute: $command" >> "log.txt"
    fi
}

generate_log_files() {
    # Create README
    touch README.txt
    echo "SYSTEM FORENSICS SNAPSHOT" > README.txt
    echo "Computer: $(hostname)" >> README.txt
    echo "CDA: $CDA" >> README.txt
    echo "Date: $(date)" >> README.txt
    echo "Location: $(pwd)" >> README.txt
    echo "User: $(whoami)" >> README.txt

    # System Information Extraction
    write_output "uptime -p" "system_uptime.txt"
    write_output "uptime -s" "system_startup_time.txt"
    write_output "date" "current_system_date.txt"
    write_output "date +%s" "current_unix_timestamp.txt"
    write_output "env" "system_environment_variables.txt"
    write_output "lsmod" "system_modules.txt"
    write_output "lsof" "open_files.txt"
    write_output "cat /etc/passwd" "system_users.txt"
    write_output "cat /etc/group" "system_groups.txt"
    write_output "cat /proc/cpuinfo" "system_cpuinfo.txt"
    write_output "cat /etc/sudoers" "system_sudoers_file.txt"
    write_output "cat /etc/fstab" "system_filesystem_table.txt"
    write_output "ps aux" "running_processes.txt"

    # Network Information
    write_output "ifconfig" "network_configuration.txt"
    write_output "ip addr" "ip_address_info.txt"
    write_output "netstat -i" "network_interfaces.txt"

    # Installed Programs
    write_output "dpkg -l" "dpkg_installed_packages.txt" # Replaced 'apt' with 'dpkg -l'
    write_output "rpm -qa" "rpm_installed_packages.txt"

    # Hardware Information
    write_output "lspci" "pci_device_list.txt"
    write_output "lshw -short" "hardware_summary_report.txt"
    write_output "dmidecode" "dmi_bios_info.txt"

    if crontab -l &>/dev/null; then
        write_output "crontab -l" "scheduled_cron_jobs_root.txt"
    else
        echo "No crontab for root" >> "$output_dir/scheduled_cron_jobs_root.txt"
    fi

  # Append directory listing
  ls -lR >> README.txt
}

zip_folder() {
  cd ..
  # zip -r "${LOG_DIRECTORY}.zip" "$LOG_DIRECTORY"
  tar czvf "${LOG_DIRECTORY}.tar.gz" "$LOG_DIRECTORY"

}

main() {
    check_root
    detect_package_manager
    create_log_folder
    generate_log_files
    zip_folder
    echo "Done!"
}

# Run the main function
main
