#!/bin/bash
#
#Server-Manager: o_newAdmin (System Command: Creates a new admin user) [Power: 700]
#
#Version: 0.5.1
#Date:    2026.03.02
#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_newAdmin.$(date +'%H%M%S')$(pwgen -s -0 -N 1 2).tmp"

#Parameters
    newUser=${1}       #User name

#Functions
    VersionAtLeast () {
        currentVersion=${1}
        requiredVersion=${2}

        if [[ -z ${currentVersion} ]] || [[ -z ${requiredVersion} ]]
        then
            return 1
        fi

        if [[ $(printf '%s\n%s\n' "${requiredVersion}" "${currentVersion}" | sort -V | head -n 1) == "${requiredVersion}" ]]
        then
            return 0
        fi

        return 1
    }

    SetDownloadMode () {
        downloadMode='legacy'
        omotiServerVersion=''

        if ! command -v omoti-server &> /dev/null
        then
            return
        fi

        if ! [[ -f /etc/omoti/credentials.json ]]
        then
            return
        fi

        omotiServerVersion=$(omoti-server -V 2> /dev/null)
        omotiServerVersion=${omotiServerVersion##* }

        if VersionAtLeast "${omotiServerVersion}" '0.7.0'
        then
            downloadMode='omoti-server'
        fi
    }

    DownloadFile () {
        source=${1}
        targetFile=${source##*/}
        downloadPath="/tmp/o_newAdmin.$(date +'%H%M%S')$(pwgen -s -0 -N 1 2).${targetFile}"

        #check parameter
            if [[ -z ${source} ]]
            then
                echo -e '\033[31mUnknown error!\033[0m Please check the log.'
                o_log -e 'Function DownloadFile: Missing parameter'
                exit 1
            fi

        if [[ ${downloadMode} == 'omoti-server' ]]
        then
            if ! omoti-server download --url "${source}" --path "${downloadPath}" --login &>> /srv/omoti/tmp/setup.log
            then
                echo -e "\033[31mFailed to download ${targetFile}\033[0m"
                o_log -e "Failed to download ${targetFile} via omoti-server"
                exit 1
            fi

            if ! [[ -f ${downloadPath} ]]
            then
                echo -e "\033[31mFailed to download ${targetFile}\033[0m"
                o_log -e "Downloaded file ${targetFile} is missing after omoti-server download"
                exit 1
            fi

            if ! mv "${downloadPath}" "${targetFile}"
            then
                echo -e "\033[31mFailed to move ${targetFile}\033[0m"
                o_log -e "Failed to move downloaded file ${targetFile} from /tmp"
                exit 1
            fi

        else
            o_download -a "${source}"
        fi
    }

#Dependencies
    if [ -z "${newUser}" ]; then
        echo
        echo -e "\033[31m !!! Wrong parameters !!! \033[0m"
        echo -e " o_newAdmin \033[36m <User name>\033[0m"
        echo
        exit 0
    fi

    if getent passwd ${newUser} > /dev/null; then
        echo
        echo -e "\033[31m User (${newUser}) already exists \033[0m"
        echo
        exit 0
    fi

#Variables
    #downloadMode   -> Functions/SetDownloadMode
    #downloadPath   -> Functions/DownloadFile
    #newUser        -> Parameters
    #omotiServerVersion -> Functions/SetDownloadMode
    #source         -> Functions/DownloadFile
    #targetFile     -> Functions/DownloadFile
    #tmp            -> Temporary file
    #version        -> Version

#Preparation
    SetDownloadMode

#Main
    #add user
        useradd -c '' -G omoti -m -s /bin/bash ${newUser}

    #sudo
        usermod -aG sudo ${newUser}

        #admin login info
            echo 'echo -e "\033[32m Successfully logged in as admin \033[0m"' >> /home/${newUser}/.profile
            echo 'echo -e "\033[33m Please use your rights wisely \033[0m"' >> /home/${newUser}/.profile
            echo 'echo' >> /home/${newUser}/.profile
            echo '' >> /home/${newUser}/.profile
            echo '#### INFO ####' >> /home/${newUser}/.profile
            echo 'if [ -f /home/${USER}/.info ]; then' >> /home/${newUser}/.profile
            echo '/home/${USER}/.info' >> /home/${newUser}/.profile
            echo 'fi' >> /home/${newUser}/.profile

    #ssh-key
        mkdir -p /home/${newUser}/.ssh/
        chmod -R 700 /home/${newUser}/
        DownloadFile "https://mgmt.omoti.de/Keys/SSH/${newUser}-key-ecdsa.pub"
        mv ${newUser}-key-ecdsa.pub  /home/${newUser}/.ssh/authorized_keys
        chmod 600 /home/${newUser}/.ssh/authorized_keys
        chown -R ${newUser}:${newUser} /home/${newUser}/.ssh/

    #vim config
        #jksrpinski
            if [[ ${newUser} == 'jkarpinski' ]]
            then
                DownloadFile "https://mgmt.omoti.de/Parts/Vim/${newUser}/vimrc"
                mv vimrc /home/${newUser}/.vimrc

                if [[ -f /home/${newUser}/.vimrc ]]
                then
                    o_log -i "vim-config added for ${newUser}"
                fi
            fi

    echo "Admin user ${newUser} was createt"
    echo
    o_log -i "Admin user ${newUser} was createt"
