#!/bin/bash

####################################################################################################
# Name:         openSUSE Baldur (MicroOS with XFCE) - User Configurator                            #
# Description:  This file will configure the user settings on openSUSE Baldur.                     #
# Author:       Steve Zabka                                                                        #
# Author URI:   https://cryinkfly.com                                                              #
# License:      MIT                                                                                #
# Copyright (c) 2023                                                                               #
# Time/Date:    11:45/08.12.2023                                                                   #
# Version:      1.0.2                                                                              #
####################################################################################################

##############################################################################################################################################################################

# Checks if I am a root user?
function check_root_shell {
    if [ $(id -u) -eq 0 ]; then
        get_userdata
    else
        # Exit/Crash ...
        zenity --error --title="Ein Fehler ist aufgetreten" --text="Dieses Anwendung darf nur als Root-Benutzer ausgeführt werden!"
	    exit 2
    fi
}

##############################################################################################################################################################################

# Show a GUI for creating the new user ...
function get_userdata {
    userdata=`zenity --forms \
        --title="Benutzerkonto anlegen" \
        --text="<span font='9'>Sie müssen einen <span color='#2C423F'>Benutzername</span> für die reguläre\n(nicht-administrative) Nutzung Ihres Systems anlegen.\nUm einen <span color='#2C423F'>System-Benutzernamen</span> anzulegen, geben\nSie unten die erforderlichen Informationen ein.</span>" \
        --add-entry="Vollständiger Name:" \
        --add-entry="Benutzername:" \
        --add-password="Passwort:" \
        --add-password="Passwort bestätigen:" \
        --separator="," \
        --ok-label="Benutzer hinzufügen" \
        --cancel-label="Überspringen"`

    accepted=$?
    if ((accepted != 0)); then
        zenity --info --title="Wichtige Information" --text="Die Einrichtung eines neuen Benutzerkontos wurde übersprungen!"
        exit 1
    fi

    name=$(awk -F, '{print $1}' <<<$userdata)
    username=$(awk -F, '{print $2}' <<<$userdata)
    password0=$(awk -F, '{print $3}' <<<$userdata)
    password1=$(awk -F, '{print $4}' <<<$userdata)
    
    check_username
}

##############################################################################################################################################################################

# Checks if the new user does not already exist on this system!
function check_username {
    egrep "^$username" /etc/passwd >/dev/null
    if [ $? -eq 0 ]; then
		zenity --warning --title="Ein Fehler ist aufgetreten" --text="Der eingegebene Benutzername ist auf diesem System bereits vorhanden!\nBitte wähle einen anderen Benutzername."
		get_userdata
	else
		check_password
	fi
}

##############################################################################################################################################################################

# Check if passwords match and if not ask again!
function check_password {
    if [ $password0 == $password1 ]; then
        pass=$(perl -e 'print crypt($ARGV[0], "password")' $password0)
        create_new_user
    else
        zenity --warning --title="Ein Fehler ist aufgetreten" --text="Die eingegebenen Passwörter stimmen nicht überein!"
        get_userdata
  fi
}

##############################################################################################################################################################################

# Creates a new user account with the home directory ...
function create_new_user {
    useradd -m -p "$pass" "$username"
    zenity --info --title="Benutzerkonto anlegen" --text="Das Benutzerkonto wurde erfolgreich angelegt und Sie werden nun abgemeldet, um sich mit dem neuen Benutzerkonto anmelden zu können!"
    xfce4-session-logout --logout
}

##############################################################################################################################################################################

check_root_shell
