#!/bin/bash

ReadToContinue() {
  echo "Return Taste zum fortfahren..."
  read
}

AddUser() {
  echo -n "Benutzername : "
  read username
  echo -n "IP Adresse   : "
  read ip
  echo -n "Passwort     : "
  read pwd
  export string_to_hash="${pwd}"
  hash="$(/opt/openvpn/sysoper/hashme.py)"
  echo "${hash}"                           > /opt/openvpn/users/${username}.pwd
  echo "ifconfig-push ${ip} 255.255.0.0"   > /opt/openvpn/ccd/${username}
  echo "User ${username} wurde erzeugt"
  ReadToContinue
}

ChangePassword() {
  echo -n "Benutzername : "
  read username
  if [ -f /opt/openvpn/users/${username}.pwd ]; then
    echo -n "Passwort     : "
    read pwd
    export string_to_hash="${pwd}"
    hash="$(/opt/openvpn/sysoper/hashme.py)"
    echo "${hash}"                           > /opt/openvpn/users/${username}.pwd
    ReadToContinue
  else
    echo "User ${username} existiert nicht"
    ReadToContinue
  fi
}

DeleteUser() {
  echo -n "Benutzername : "
  read username
  if [ -f /opt/openvpn/users/${username}.pwd ]; then
    rm /opt/openvpn/users/${username}.pwd 
    echo "User ${username} wurde geloescht"
    # Das CCD-File loeschen wir auch, falls vorhanden
    if [ -f /opt/openvpn/ccd/${username} ]; then
      rm /opt/openvpn/ccd/${username}
    fi
    ReadToContinue
  else
    echo "User ${username} existiert nicht"
    ReadToContinue
  fi
}

ShowUser() {
  echo -n "Benutzername : "
  read username
  ip=""
  if [ -f /opt/openvpn/users/${username}.pwd ]; then
    if [ -f /opt/openvpn/ccd/${username} ]; then
      ip="$(cat /opt/openvpn/ccd/${username} |awk '{print $2}')"
    fi   
    echo "User ${username} existiert und hat die IP Adresse ${ip}"
    echo
    echo "Folgendes sind die letzten 20 Logeintraege fuer diesen User:"
    echo
    if [ -f /opt/openvpn/log/${username}.log ]; then
       tail -20 /opt/openvpn/log/${username}.log 
    else
       echo "Es existieren keine Logeintraege"
    fi
    ReadToContinue
  else
    echo "User ${username} existiert nicht"
    ReadToContinue
  fi
}

ListUsers() {
  echo
  echo "Username              IP Adresse"
  echo "=================================="
  for userfile in $(ls -1 /opt/openvpn/users/*.pwd 2>/dev/null) ; do
    user="${userfile##*/}"
    user="${user%.pwd}"
    ip="N/A"
    if [ -f /opt/openvpn/ccd/${user} ]; then
      ip="$(cat /opt/openvpn/ccd/${user} |awk '{print $2}')"
    fi
    printf "%-20s  %-15s\n" "$user" "$ip"
  done
  echo
  ReadToContinue
}

ShowLogfile() {
  echo "Hinweis: mit Taste G zum Ende des Logs gehen..., Space fuer Seitenweises vorwaertsgehen..."
  echo
  ReadToContinue
  /bin/less /opt/openvpn/log/logon.log
}

AdvancedMenu() {
  acharacter=0
  while [ "${acharacter}" != "9" ]; do
    clear
    echo "Advanced Functions"
    echo "=================="
    echo "1 - OpenVPN Dienst stoppen"
    echo "2 - OpenVPN Dienst starten"
    echo "3 - OpenVPN Dienst Statusabfrage"
    echo "4 - Passwort von sysoper aendern"
    echo 
    echo "9 - Zurueck zum Hauptmenu"
    echo
    echo -n "Bitte Option waehlen > "
    read  acharacter
    case ${acharacter} in 
      1) /bin/sudo /bin/systemctl stop myopenvpn
         ReadToContinue
         ;;
      2) /bin/sudo /bin/systemctl start myopenvpn
         ReadToContinue
         ;;
      3) /bin/sudo /bin/systemctl status myopenvpn
         ReadToContinue
         ;;
      4) /bin/passwd sysoper
         ;;
      9) echo Zurueck...
         ;;
      *) echo "Ungueltige Option..."
         read
    esac
  done
}

character=0
while [ "${character}" != "9" ]; do
  clear
  echo "Userverwaltung OpenVPN"
  echo "======================"
  echo "1 - OpenVPN Benutzer hinzufuegen"
  echo "2 - OpenVPN Benutzer Passwort setzen"
  echo "3 - OpenVPN Benutzer entfernen"
  echo "4 - OpenVPN Benutzer anzeigen"
  echo "5 - OpenVPN Benutzer auflisten"
  echo 
  echo "7 - Logfile anzeigen"
  echo "8 - Advanced Functions"
  echo 
  echo "9 - Exit"
  echo
  echo -n "Bitte Option waehlen > "
  read  character
  case ${character} in 
    1) AddUser
       ;;
    2) ChangePassword
       ;;
    3) DeleteUser
       ;;
    4) ShowUser
       ;;
    5) ListUsers
       ;;
    7) ShowLogfile 
       ;;
    8) AdvancedMenu
       ;;
    9) echo Exit...
       ;;
    *) echo "Ungueltige Option..."
       read
  esac
done
exit 0
