#!/bin/bash

# For Ubuntu!
export NEEDRESTART_MODE=a
export DEBIAN_FRONTEND=noninteractive

# Hash
#me
hash1="68b329da9893e34099c7d8ad5cb9c940"
#common
hash2="c357311ed3a47a08b423e1b42ec5c130"
#bits
hash3="091ba2e12e1dde612c5091e0b6fd24c4"

if [ -n "$SUDO_USER" ]; then
  source /home/$SUDO_USER/.index.sh
else
  source $HOME/.index.sh
fi

# ------------------------------------------------------------------------------

# PASSWORD
function init {
  if ! password=$(dialog --backtitle "Ubuntu Server Manager - by José Humberto" --title "Digite a senha!" --insecure --passwordbox "" 7 30 2>&1 > /dev/tty); then
    exit
  fi

  hash0=$(echo "$password" | md5sum | awk '{print $1}')

  if [ -z "$password" ]; then
    dialog --title "ERROR" --msgbox "É necessário digitar uma senha para continuar." 6 40
    clear
  elif [ "$hash0" = "$hash1" ]; then
    start
  elif [ "$hash0" = "$hash2" ]; then
    startocult
  elif [ "$hash0" = "$hash3" ]; then
    start
  else
    clear
    dialog --title "ERROR" --msgbox "Senha incorreta. \nTente novamente!" 6 30
    timeout=$((timeout+1)); sleep $timeout
    init
  fi
}

hash1="fe5dfdd991450623c39efc7705e47ad5"

function start {
  if ! var0=$(dialog --title "SUPERVISOR" --backtitle "Bem-Vindo ao USM $MENU_VERSION" --ok-label "Acessar" --cancel-label "Sair" --menu " " 0 0 0 \
  1 'Docker Orchestration' \
  2 'Docker Maintenance' \
  3 'AutoConfig pfSense (VM)' \
  4 'Netplan AutoSetup' \
  5 'Install DWService x86' \
  6 'Install Tailscale' \
  7 'Install DWService ARM' \
  8 'Install Waydroid (Ubuntu)' \
  9 'Upgrade BASHRC, SRV & AD+Web' \
  K 'CUIDADO: Kill Switch!' \
  X 'Sair' 2>&1 > /dev/tty ); then
    exit
  fi
  
  case "$var0" in
  1) orchestra0 ; start ;;
  2) clear ; curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 $link099 | bash ; start ;;
  3) curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 $link112 | sudo bash ; start ;;
  4) autosetupnetplan0 ; start ;;
  5) dwservice0 ; start ;;
  6) tailscaled0 ; start ;;
  7) dwgeneric0 ; start ;;
  8) waydroid0 ; start ;;
  9) upgradesrv0 ; start ;;
  K) clear ; curl -sSL $link133 | sudo bash ; start ;;
  X) exit ;;
  esac
}

function waydroid0 {
  sudo apt install curl ca-certificates -y
  curl -s https://repo.waydro.id | sudo bash
  sudo apt install waydroid -y
}

function autosetupnetplan0 {
  if ! [ "$HOSTTYPE" = "aarch64" ]; then
    curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 $link116 | sudo bash
  else
    clear; echo ""
    echo "Incompativel com placas Raspberry Pi!"
  fi
}

function startocult {
  managers ; startocult
}

function managers {
  if ! var0=$(dialog --title 'Suporte ao Servidor' --backtitle "Bem-Vindo ao USM $MENU_VERSION" --ok-label "Acessar" --cancel-label "Sair" --menu " " 0 0 0 \
  1 'Informacoes do Servidor' \
  2 'Iniciar Area de Trabalho (local apenas)' \
  3 'Gerir o Active Directory (se existir)' \
  4 'Ferramentas Diversas' \
  5 'Diagnóstico do Sistema' \
  6 'Protocolo Q60 (CDN)' \
  7 'Reiniciar Servidor' \
  8 'Desligar Servidor' \
  X 'Sair' 2>&1 > /dev/tty ); then
    exit
  fi

  case "$var0" in
  1) allinfoz0 ; managers ;;
  2) desktop00 ; managers ;;
  3) domain00 ; managers ;;
  4) curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 $link120 | tee $HOME/.t00lz >/dev/null ; chmod +x $HOME/.t00lz ; clear ; bash $HOME/.t00lz ; managers ;;
  5) clear ; check_diag_con ; managers ;;
  6) curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 $link005 | tee $HOME/.base >/dev/null ; chmod +x $HOME/.base ; clear ; bash $HOME/.base ; managers ;;
  7) reb00t ; managers ;;
  8) shutd0 ; managers ;;
  X) exit ;;
  esac
}

function orchestra0 {
  clear ; echo "Por favor, insira a senha do usuário $USER!"
  curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 https://git.linuxuniverse.com.br/index.sh | sudo tee /root/.index.sh.new >/dev/null && [ -s /root/.index.sh.new ] && sudo mv -f /root/.index.sh.new /root/.index.sh && sudo sed -i 's/\r$//' /root/.index.sh && echo "Indice atualizado para root/containers!"
  curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 $link100 | sudo bash
}

function upgradesrv0 {
  if [ -n "$SUDO_USER" ]; then
    source /home/$SUDO_USER/.index.sh
  else
    source $HOME/.index.sh
  fi
  
  clear
 
  if ping -c 1 -W 1 8.8.4.4 &>/dev/null || ping -c 1 -W 1 1.0.0.1 &>/dev/null; then
    # Upgrade do Indice!
    if [ -n "$SUDO_USER" ]; then
        if curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 https://git.linuxuniverse.com.br/index.sh | tee /home/$SUDO_USER/.index.sh.new >/dev/null && [ -s /home/$SUDO_USER/.index.sh.new ]; then
          mv -f /home/$SUDO_USER/.index.sh.new /home/$SUDO_USER/.index.sh
          source /home/$SUDO_USER/.index.sh
          clear
        fi
    else
        if curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 https://git.linuxuniverse.com.br/index.sh | tee $HOME/.index.sh.new >/dev/null && [ -s $HOME/.index.sh.new ]; then
          mv -f $HOME/.index.sh.new $HOME/.index.sh
          source $HOME/.index.sh
          clear
        fi
    fi
    
    if curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 https://git.linuxuniverse.com.br/index.sh | sudo tee /root/.index.sh.new >/dev/null && [ -s /root/.index.sh.new ]; then
      sudo mv -f /root/.index.sh.new /root/.index.sh
      sudo sed -i 's/\r$//' /root/.index.sh
    fi
    
    # Upgrade do Bashrc
    curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 $link003 | bash
    clear
  fi
  
  # Se existir um container dominio, ajuste de acordo.
  if docker ps -a | grep dominio 1>&2 >/dev/null; then
    clear
    curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 $link125 | sudo bash
    clear
    # ATENÇÃO >>> DENTRO DO DOCKER, MELHOR MANTER O LINK E NÃO USAR VARIAVEIS $linkYYY! <<< ATENÇÃO
    NOMECONTAINER="dominio"
    docker exec "$NOMECONTAINER" bash -c "curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 --silent https://git.linuxuniverse.com.br/server/domain | tee /root/.init >/dev/null"
    docker exec "$NOMECONTAINER" bash -c "chmod +x /root/.init"
    docker exec -it "$NOMECONTAINER" /root/.init
  fi
  
  exit 0
}

function check_diag_con {
  curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 $link018 | sudo bash
  sudo bash /usr/local/bin/diagnostic-system.sh
}

function domain00 {
  if docker ps -a | grep dominio 1>&2 >/dev/null; then
    docker exec -it dominio /root/.init
    return
  else
    clear; echo ""; echo "Nenhum Controlador de Dominio encontrado neste sistema!"; echo ""; sleep 3
  fi
}

function allinfoz0 {
  if [ -f /srv/system.yaml ]; then
    YAML_FILE="/srv/system.yaml"

    meuipwan=$(dig @resolver4.opendns.com myip.opendns.com +short)
    meugateway=$(ip route get 1.1.1.1 | grep -oP 'via \K\S+')
    meuiplan=$(ip route get 1.1.1.1 | grep -oP 'src \K\S+')
    minhasubnet="${meugateway%.*}.0"

    info1=$(yq -r '.Informacoes' "$YAML_FILE")
    info2=$(yq -r '.Hardware.Tipo' "$YAML_FILE")
    info3=$(yq -r '.Hardware.Placa' "$YAML_FILE")

    # --------------------------------------
    dialog_text="Informacoes do Servidor:

$info1

IP WAN: $meuipwan
IP LAN Atual: $meuiplan
Gateway Identificado: $meugateway
Subnet Identificada: $minhasubnet

Hardware:
Placa: $info2
Tipo: $info3"
    # --------------------------------------

    dialog --title "VISUALIZANDO DADOS" --backtitle "" --msgbox "Pressione OK abaixo para visualizar os resultados! \n\nNavegue com as setas para cima e para baixo. \n\nPara sair pressione 'q' !" 12 40
    clear; echo "$dialog_text" | less
    clear
  else
    dialog --title 'ATENCAO' --msgbox "Servidor fora de estrutura.\nModelo M identificado.\n\nEstruture este servidor para o Modelo CDN para ler todas as informacoes!" 9 50
  fi
}

function desktop00 {
  if pstree -s $$ | grep sshd 1>&2 >/dev/null; then
    clear; echo ""; echo "Voce esta tentando acessar o desktop remotamente. Use esse menu la na tela local do servidor!"
  else
    desktop01
  fi
  sleep 3
}

function desktop01 {
  if [ -f /usr/bin/labwc ]; then
    labwc
    return
  else
    startx
    return
  fi
}

hash1="e4439267203fb5277d347e6cd6e440b5"

function reb00t {
  if dialog --title 'Reiniciar' --backtitle "Reinicio" --yesno 'Deseja reiniciar este sistema?' 0 0; then
    sudo reboot
  fi
}

hash1="7c6126d9cc35fccb0c8a3a42147ea85f"

function shutd0 {
  if dialog --title 'Desligar' --backtitle "Desligamento" --yesno 'Deseja desligar este sistema?' 0 0; then
    sudo shutdown -h now
  fi
}

function tailscaled0 {
  if [ $HOSTNAME = "ubuntu-server" ]; then
    clear; echo "TROQUE O HOSTNAME DESTE SERVIDOR!"
    sleep 3
    return
  else
    curl -fsSL https://tailscale.com/install.sh | sh
    sudo tailscale up
  fi
}

function dwservice0 {
  clear
  curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 https://www.dwservice.net/download/dwagent_x86.sh | tee $HOME/dwagent_x86.sh >/dev/null
  chmod +x $HOME/dwagent_x86.sh
  sudo bash $HOME/dwagent_x86.sh
}

function dwgeneric0 {
  clear
  curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 https://www.dwservice.net/download/dwagent_generic.sh | tee $HOME/dwagent_generic.sh >/dev/null
  chmod +x $HOME/dwagent_generic.sh
  sudo bash $HOME/dwagent_generic.sh
}

# ===================================================================================================================================== #

if ! [ "$EUID" -ne 0 ]; then
  echo "Não execute esse script com sudo! Saindo..."
  exit
fi

init

exit 1
