#!/bin/bash
#
#Server-Manager: o_delServer (System Command: Deletes a server from the management system) [Power: 700]
#
#Version: 0.3.1
#Date:    2023.05.30
#Unix:    Debian 11
#Author:  P.Klapp
#Company: Omoti UG (haftungsbeschränkt)
#Website: https://omoti.de
#
#Path:    /Commands/


#Version
    version=$(sed -n '5p' ${0})
    version=${version#*\ }

#Temporary file
    tmp='/srv/omoti/tmp/o_delServer.tmp'

#Parameters
    server=${1}         #Hostname
    dbUser=${2}         #Database access user
    dbPW=${3}           #Database access password
    domainPW=${4}       #Domain-API access token

#Functions
#Dependencies
    #user
        if [[ ${USER} != 'root' ]]; then
            echo
            echo -e "\033[33mRoot rights required\033[0m"
            echo 'Please run the script as root!'
            echo
            exit 0
        fi

    #parameters
        if [ -z "${server}" ]; then
            echo
            echo -e "\033[31m !!! Wrong parameters !!! \033[0m"
            echo -e " o_delServer \033[36m <Hostname>\033[0m"
            echo
            exit 0
        fi

    #mysql keys
        if ! [ -d /srv/omoti/keys/mysql/ ]; then
            echo
            echo -e "\033[31m MySQL ssl certificates are required \033[0m"
            echo
            exit 0
        fi

#Variables
    #controll           -> Main/controll
    dbName='server_manager'
    #dbPW               -> Main/initialization/database access
    #dbUser             -> Main/initialization/database access
    #domainPW           -> Main/initialization/domain-api access
    #oldDomain          -> Main/get data/domain
    #oldHost            -> Main/get data
    #oldIPv4            -> Main/get data/ipv4
    #oldIPv4_status     -> Main/get data/ipv4
    #oldIPv6            -> Main/get data/ipv6
    #oldIPv6_status     -> Main/get data/ipv6
    result='/srv/omoti/.db_result.tmp'
    #server             -> Parameters

#Main
    #initialization
        if [ -z "${dbUser}" ] || [ -z "${dbPW}" ] || [ -z "${domainPW}" ]; then
            #database access
                echo
                echo
                echo ' Database access'
                echo
                read -p ' User: ' dbUser
                read -sp ' Password: ' dbPW
                echo

                if [ -z "${dbUser}" ] && [ -z "${dbPW}" ]; then
                    echo -e "\033[31m Error during data entry! (Database access) \033[0m"
                    echo ' Please start again'
                    exit 0
                fi

            #domain-api access
                echo
                echo
                echo ' Domain-API access'
                echo
                read -sp ' Token: ' domainPW
                echo

                if [ -z "${domainPW}" ]; then
                    echo -e "\033[31m Error during data entry! (Domain-API access) \033[0m"
                    echo ' Please start again'
                    exit 0
                fi
        fi

    #get data
        o_database ${dbUser} ${dbPW} "SELECT Host FROM RootServer WHERE Host = \"${server}\";" 'n' ${dbName}
        oldHost=$(sed -n '2p;3q' ${result})

        if [ ${oldHost} != ${server} ]; then
            echo -e "\033[33m The server ${server} does not exist! \033[0m"
            exit 0
        fi

        #domain
            o_database ${dbUser} ${dbPW} "SELECT FQDN FROM RootServer WHERE Host = \"${server}\";" 'n' ${dbName}
            oldDomain=$(sed -n '2p;3q' ${result})

        #ipv4
            o_database ${dbUser} ${dbPW} "SELECT IPv4 FROM RootServer WHERE Host = \"${server}\";" 'n' ${dbName}
            oldIPv4=$(sed -n '2p;3q' ${result})

            if ! [ -z "${oldIPv4}" ]; then
                oldIPv4_status='true'
            else
                oldIPv4_status='false'
            fi

        #ipv6
            o_database ${dbUser} ${dbPW} "SELECT IPv6 FROM RootServer WHERE Host = \"${server}\";" 'n' ${dbName}
            oldIPv6=$(sed -n '2p;3q' ${result})

            if ! [ -z "${oldIPv6}" ]; then
                oldIPv6_status='true'
            else
                oldIPv6_status='false'
            fi

    #controll
        echo
        echo 'Do you want to delete the following server?'
        echo
        echo -e "Hostname: \033[36m ${oldHost} \033[0m"
        echo -e "Domain:   \033[36m ${oldDomain} \033[0m"

        if [ ${oldIPv4_status} == 'true' ]; then
            echo -e "IPv4:     \033[36m ${oldIPv4} \033[0m"
        fi
        if [ ${oldIPv6_status} == 'true' ]; then
            echo -e "IPv6:     \033[36m ${oldIPv6} \033[0m"
        fi

        echo
        read -p 'Continue (y/n): ' controll
        echo

        if [ ${controll} == 'y' ] || [ ${controll} == 'yes' ]; then
            echo -e "\033[32m Confirmed \033[0m"
            echo
        else
            if [[ -f ${result} ]]; then
                rm ${result}
            fi

            echo -e "\033[31m Aborted \033[0m"
            exit 0
        fi

    #delete server
        #database
            o_database ${dbUser} ${dbPW} "DELETE FROM ClientServer WHERE Server = \"${oldHost}\";" 'n' ${dbName}
            o_database ${dbUser} ${dbPW} "DELETE FROM RootServer WHERE Host = \"${oldHost}\";" 'n' ${dbName}

        #domain
            if [ ${oldIPv4_status} == 'true' ]; then
                if [[ -f /bin/o_domain ]]; then
                    o_domain -d ${oldDomain} -t ${domainPW}
                else
                    o_domainDelete ${domainPW} ${oldDomain} 'y'
                fi
            fi
            if [ ${oldIPv6_status} == 'true' ]; then
                if [[ -f /bin/o_domain ]]; then
                    o_domain -d ${oldDomain} -t ${domainPW}
                else
                    o_domainDelete ${domainPW} ${oldDomain} 'y'
                fi
            fi

    #controll
        echo
        unset controll
        o_database ${dbUser} ${dbPW} "SELECT Host FROM RootServer WHERE Host = \"${server}\";" 'n' ${dbName}
        controll=$(sed -n "2p;3q" ${result})

        if [ -z "${controll}" ]; then
            echo
            echo -e "\033[32m Old server (${server}) deleted \033[0m"
            o_log -i "Old server (${server}) deleted"
        else
            echo
            echo -e "\033[31m Cant delete old server (${server}) \033[0m"
            o_log -w "Cant delete old server (${server})"
        fi

    if [[ -f ${result} ]]; then
        rm ${result}
    fi