#!/bin/bash

NOMECONTAINER="dominio"

docker_repo="urbancompasspony/domain:latest"
imagem="active-directory"

CustmN2="F.Q.D.N."
CustmN3="Local_IP"
CustmN4="ADM_Pass"
CustmN5="NOT_PiHole"
CustmN6="Hostname"
CustmN7="Net_LAN"
CustmN8="MNT_Path"
CustmN9="CUPSPass"
CustmN10="WebPass"

VALUE2="ad."
VALUE3=""
VALUE4=""
VALUE5="1.0.0.1"
VALUE6="$HOSTNAME"
VALUE7="macvlan"
VALUE8="-v /mnt:/mnt"
VALUE9="admin"
VALUE10="admin"

export NOMECONTAINER docker_repo imagem
export CustmN2 CustmN3 CustmN4 CustmN5 CustmN6 CustmN7 CustmN8 CustmN9 CustmN10
export VALUE2 VALUE3 VALUE4 VALUE5 VALUE6 VALUE7 VALUE8 VALUE9 VALUE10

source /root/.index.sh

if [ -f /tmp/common-functions.sh ]; then
  source /tmp/common-functions.sh
else
  echo "ERRO: common-functions.sh nao encontrado!"
  exit 1
fi

function set_mkdir {
  sudo mkdir -p /srv/containers/"$NOMECONTAINER"/{log,data,config}
  sudo mkdir -p /srv/containers/"$NOMECONTAINER"/cups/{config,log}
  sudo touch /srv/containers/"$NOMECONTAINER"/log/syslog
}

function docker_create {
  local ip_regex="^([0-9]{1,3}\.){3}[0-9]{1,3}$"

  # Se NAO for numerico, execute como host!
  if [[ ! "$VALUE3" =~ $ip_regex ]]; then

    docker run --privileged -d --name="$NOMECONTAINER" --hostname="$NOMECONTAINER" \
    --network host \
    --dns-search $VALUE2 \
    --add-host "$VALUE6"."$VALUE2":"$VALUE3" \
    --no-healthcheck --restart=unless-stopped -v /etc/localtime:/etc/localtime:ro \
    --device /dev/bus/usb \
    --ulimit nofile=1024:1024 \
    --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 \
    -p "$VALUE3":53:53 -p "$VALUE3":53:53/udp -p "$VALUE3":88:88 -p "$VALUE3":88:88/udp -p "$VALUE3":135:135 -p "$VALUE3":137:137 -p "$VALUE3":137:137/udp -p "$VALUE3":138:138 -p "$VALUE3":138:138/udp -p "$VALUE3":139:139 \
    -p "$VALUE3":389:389 -p "$VALUE3":389:389/udp -p "$VALUE3":445:445 -p "$VALUE3":464:464 -p "$VALUE3":464:464/udp -p "$VALUE3":636:636 -p "$VALUE3":1024-1044:1024-1044 -p "$VALUE3":3268-3269:3268-3269 -p 631:631 -p 631:631/udp \
    -e DOMAIN="$VALUE2" \
    -e DOMAINPASS="$VALUE4" \
    -e DNSFORWARDER="$VALUE5" \
    -e HOSTIP="$VALUE3" \
    -e CUPSADMIN="admin" \
    -e CUPSPASSWORD="$VALUE9" \
    -e TZ="America/Bahia" \
    -v /srv/containers/"$NOMECONTAINER"/log/syslog:/var/log/syslog \
    -v /srv/containers/"$NOMECONTAINER"/data/:/var/lib/samba \
    -v /srv/containers/"$NOMECONTAINER"/config/:/etc/samba/external \
    -v /srv/containers/"$NOMECONTAINER"/cups/config:/etc/cups \
    -v /srv/containers/"$NOMECONTAINER"/cups/log:/var/log/cups \
    -v /srv/containers/"$NOMECONTAINER"/config:/config \
    -v /srv/containers/"$NOMECONTAINER"/data:/data \
    $VALUE8 \
    "$docker_repo"

    return
  fi

  docker run --privileged -d --name="$NOMECONTAINER" --hostname="$NOMECONTAINER" \
  --network macvlan --ip="$VALUE3" --dns="$VALUE3" --dns="$VALUE5" \
  --dns-search $VALUE2 \
  --add-host "$VALUE6"."$VALUE2":"$VALUE3" \
  --no-healthcheck --restart=unless-stopped -v /etc/localtime:/etc/localtime:ro \
  --device /dev/bus/usb \
  --ulimit nofile=1024:1024 \
  --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 \
  -e DOMAIN="$VALUE2" \
  -e DOMAINPASS="$VALUE4" \
  -e DNSFORWARDER="$VALUE5" \
  -e HOSTIP="$VALUE3" \
  -e CUPSADMIN="admin" \
  -e CUPSPASSWORD="$VALUE9" \
  -e TZ="America/Bahia" \
  -v /srv/containers/"$NOMECONTAINER"/log/syslog:/var/log/syslog \
  -v /srv/containers/"$NOMECONTAINER"/data/:/var/lib/samba \
  -v /srv/containers/"$NOMECONTAINER"/config/:/etc/samba/external \
  -v /srv/containers/"$NOMECONTAINER"/cups/config:/etc/cups \
  -v /srv/containers/"$NOMECONTAINER"/cups/log:/var/log/cups \
  -v /srv/containers/"$NOMECONTAINER"/config:/config \
  -v /srv/containers/"$NOMECONTAINER"/data:/data \
  $VALUE8 \
  "$docker_repo"
}

function docker_extras {
echo ""; echo "############################################################"
echo ""; echo "Configuring Apache2"; echo ""
curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 $link125 | sudo bash
echo ""; echo "OK"; sleep 0.5

echo ""; echo "############################################################"; echo ""
if [ -z "$(ls -A /srv/containers/"$NOMECONTAINER"/config/smb.conf.d/)" ]; then
  echo ""; echo "smb.conf.d vazia... criando algo"; echo ""
  sudo mkdir -p /srv/containers/"$NOMECONTAINER"/config/smb.conf.d/
  sudo touch /srv/containers/"$NOMECONTAINER"/config/smb.conf.d/EMPTY.conf
  docker exec "$NOMECONTAINER" bash -c 'mkdir -p /etc/samba/external/smb.conf.d/'
  docker exec "$NOMECONTAINER" bash -c 'touch /etc/samba/external/includes.conf'
  docker exec "$NOMECONTAINER" bash -c 'find /etc/samba/external/smb.conf.d/ -type f -print | sed -e "s|^|include = |" > /etc/samba/external/includes.conf'
  docker exec "$NOMECONTAINER" bash -c 'smbcontrol all reload-config'
  echo ""; echo "OK"; sleep 0.5
else
  echo ""; echo "smb.conf.d OK"; echo ""
fi

echo ""; echo "############################################################"
echo ""; echo "Restarting Domain 1/3"; echo ""
if docker restart "$NOMECONTAINER"; then
  echo ""; echo "OK"; sleep 0.5
fi

echo ""; echo "############################################################"; echo ""
if [ -f /srv/containers/"$NOMECONTAINER"/config/smb.conf ]; then
  echo ""; echo "Creating or Recreating a smb.conf model-based"; echo ""
  docker exec "$NOMECONTAINER" bash -c "curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 --silent $link123 --output /tmp/auto_configure.sh; chmod +x /tmp/auto_configure.sh"
  docker exec "$NOMECONTAINER" bash -c 'bash /tmp/auto_configure.sh'
  curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 --silent $link123 --output /tmp/auto_configure.sh; chmod +x /tmp/auto_configure.sh
  sudo bash /tmp/auto_configure.sh /srv/containers/"$NOMECONTAINER"/config/smb.conf
  echo ""; echo "OK"; sleep 0.5
else
  echo "ERRO: Nao encontramos um arquivo smb.conf valido!"
  exit 1
fi

echo ""; echo "############################################################"
echo ""; echo "Restarting Domain 2/3"; echo ""
if docker restart "$NOMECONTAINER"; then
  echo ""; echo "OK"; sleep 0.5
fi

echo ""; echo "############################################################"
echo ""; echo "Restoring CUPS Default Config"; echo ""
docker exec "$NOMECONTAINER" bash -c '
  cp -rp /etc/cups-bak/* /etc/cups/
  sed -i "s/Listen localhost:631/Listen 0.0.0.0:631/" /etc/cups/cupsd.conf
  sed -i "s/Browsing Off/Browsing On/" /etc/cups/cupsd.conf
  sed -i "s/<Location \/>/<Location \/>\n  Allow All/" /etc/cups/cupsd.conf
  sed -i "s/<Location \/admin>/<Location \/admin>\n  Allow All\n  Require user @SYSTEM/" /etc/cups/cupsd.conf
  sed -i "s/<Location \/admin\/conf>/<Location \/admin\/conf>\n  Allow All/" /etc/cups/cupsd.conf
  echo "ServerAlias *" >> /etc/cups/cupsd.conf
  echo "DefaultEncryption Never" >> /etc/cups/cupsd.conf
'
# /\ cuidado: tem um apostrofo acima!
echo "OK"; sleep 0.5

echo ""; echo "############################################################"
echo ""; echo "Getting MENU for samba-tools"; echo ""
docker exec "$NOMECONTAINER" bash -c "curl -sSL --connect-timeout 5 --max-time 0 --retry 3 --retry-delay 2 --silent $link113 --output /root/.init"
docker exec "$NOMECONTAINER" bash -c "echo '/root/.init' >> /root/.bashrc"
docker exec "$NOMECONTAINER" bash -c "echo alias menu=\'/root/.init\' >> /root/.bashrc"
docker exec "$NOMECONTAINER" bash -c "echo alias domain=\'/root/.init\' >> /root/.bashrc"
docker exec "$NOMECONTAINER" bash -c "chmod +x /root/.init"
echo ""; echo "OK"; sleep 0.5

echo ""; echo "############################################################"
echo ""; echo "Adjusting or fixing syslog"; echo ""
if docker exec "$NOMECONTAINER" chmod 777 -R /var/log/syslog; then
  echo "OK"; sleep 0.5
fi
if docker exec "$NOMECONTAINER" chmod 777 -R /var/lib/samba/sysvol; then
  echo "OK"; sleep 0.5
fi
if ! docker exec "$NOMECONTAINER" rsyslogd 2>/dev/null; then
  echo "OK"; sleep 0.5
else
  echo "NOW IT IS OK"; sleep 0.5
fi

echo ""; echo "############################################################"
echo ""; echo "Restarting Domain 3/3"; echo ""
if docker restart "$NOMECONTAINER"; then
  echo ""; echo "OK"; sleep 0.5
fi

echo ""; echo "############################################################"
echo ""; echo "Fixing SYSVOL Permissions"
if docker exec "$NOMECONTAINER" samba-tool ntacl sysvolreset -U Administrator; then
  echo "OK"; sleep 0.5
fi

echo ""; echo "Check SYSVOL Permissions after fixing"
if docker exec "$NOMECONTAINER" samba-tool ntacl sysvolcheck -U Administrator; then
  echo "OK"; sleep 0.5
fi

echo ""; echo "Fixing general ACLs Permissions"
if docker exec "$NOMECONTAINER" samba-tool dbcheck --cross-ncs --fix --yes; then
  echo "OK"; sleep 0.5
fi

echo ""; echo "Fixing Well-Known ACLs Permissions"
if docker exec "$NOMECONTAINER" samba-tool dbcheck --cross-ncs --reset-well-known-acls --fix --yes; then
  echo "OK"; sleep 0.5
fi
:; }

execute_main

exit 0
