# linuxmuster.net environment
# thomas@linuxmuster.net
# 20190311
#

# get ubuntu version
SUPPORTED_VERSION="18.04"
ISSUE="$(grep ^Ubuntu /etc/issue | awk '{ print $2 }')"
if ! echo "$ISSUE" | grep -q "$SUPPORTED_VERSION"; then
 echo "Incompatible ubuntu version $ISSUE!"
 exit 0
else
 echo "Ubuntu $ISSUE detected."
 ISSUE="$SUPPORTED_VERSION"
fi

# variables
ADMINUSER="opsiadmin"
ADMINGROUP="opsiadmin"

OPSISYSDIR="/etc/opsi"
OPSIREPOHOOKS="$OPSISYSDIR/package-updater.repos.d"
OPSIWINREPO="$OPSIREPOHOOKS/uib-windows.repo"
OPSIBCKNDMGR="$OPSISYSDIR/backendManager"
PCKEYS="$OPSISYSDIR/pckeys"
CONFDPEM="$OPSISYSDIR/opsiconfd.pem"
OPSICONFIGDIR="/var/lib/opsi/config"
OPSICLIENTSDIR="$OPSICONFIGDIR/clients"
OPSICONFIG="$OPSICONFIGDIR/config.ini"
OPSIPKGS="opsi-depotserver opsi-configed opsi-tftpd-hpa"
OPSIKEYURL="http://download.opensuse.org/repositories/home:/uibmz:/opsi:/4.1:/stable/xUbuntu_${ISSUE}/Release.key"

SHAREDIR="/usr/share/linuxmuster-opsi"
DATADIR="/var/lib/linuxmuster-opsi"
WIMPORTDATA="$DATADIR/workstations"
SETTINGS="$DATADIR/settings"
SUDOERS_TPL="$SHAREDIR/sudoers"
SUDOERS_TGT="/etc/sudoers"
OPSILIST_TPL="$SHAREDIR/opsi.list"
SOURCESLIST="/etc/apt/sources.list.d"
OPSILIST_TGT="$SOURCESLIST/opsi.list"

# linuxmuster.net 7
SSLDIR="/etc/linuxmuster/ssl"
OPSIKEY="$SSLDIR/opsi.key.pem"
OPSICERT="$SSLDIR/opsi.cert.pem"

# functions

# parse command line options
getopt() {
 until [ -z "$1" ]; do
  if [ ${1:0:2} = "--" ]; then
   tmp=${1:2}               # Strip off leading '--' . . .
   parameter=${tmp%%=*}     # Extract name.
   value=${tmp##*=}         # Extract value.
   eval $parameter=$value
   # [ -z "$parameter" ] && parameter=yes
  fi
  shift
 done
}

# set passwords
set_opsipassword(){
 id "$ADMINUSER" &> /dev/null || (echo "$ADMINUSER account does not exist!" ; return 1)
 local i
 local password="$1"
 local rpassword=""
 if [ -z "$password" ]; then
  while [ -z "$password" ]; do
   stty -echo
   read -p "Please enter admin password: " password; echo
   stty echo
   stty -echo
   read -p "Please re-enter admin password: " rpassword; echo
   stty echo
   if [ "$password" != "$rpassword" ]; then
    echo "Passwords do not match!"
    password=""
   fi
   rpassword=""
  done
 fi
 for i in root "$ADMINUSER"; do
  echo "Setting password for $i ..."
  echo "${i}:${password}" | chpasswd || (echo "Failed to set unix password for $i!" ; return 1)
 done
 echo "Setting $ADMINUSER samba password ..."
 echo -e "${password}\n${password}\n" | smbpasswd -a -s "$ADMINUSER" || (echo "Failed to set samba password!" ; return 1)
 echo "Setting $ADMINUSER pcpatch password ..."
 echo -e "${password}\n${password}\n" | opsi-admin -d task setPcpatchPassword || (echo "Failed to set pcpatch password!" ; return 1)
 password=""
 return 0
}

# test if necessary pkgs are installed
pkgs_installed(){
 local RC=0
 echo "Looking for installed opsi packages ..."
 for i in $OPSIPKGS; do
  echo -n " * $i "
  dpkg --status "$i" 2> /dev/null | grep -q "install ok installed" || RC="1"
  if [ "$RC" = "0" ]; then
   echo "installed ok."
  else
   echo "not installed."
   break
  fi
 done
 echo
 return "$RC"
}

# validate ip address
validip(){
  local ip=$1
  local stat=1
  if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
    OIFS=$IFS
    IFS='.'
    ip=($ip)
    IFS=$OIFS
    [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
      && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
    stat=$?
  fi
  return $stat
}

# validate netmask
validmask(){
  grep -E -q '^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)' <<< "$1" && return 0 || return 1
}
