#!/usr/bin/bash
#
# Author: Dmitry Razumov <asmeron@ublinux.com>
# Copyright (c) 2021-2025 UBLinux <support@ublinux.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later
#
# Initial script for Linux UBLinux
# This script are launching before starting init from initrd script
# Current dir allways must be set to root (/)
# All system path must be relative, except initrd dirs

ENABLED=yes
[[ ${ENABLED} == "yes" ]] || { return 0 2>/dev/null && return 0 || exit 0; }
DEBUGMODE=no

PATH=.:/:/usr/bin:/usr/local/bin:/usr/local/sbin

[[ ! -f /init ]] && { ROOTFS= ; CMD_CHROOT= ; } || { [[ -d /sysroot ]] && ROOTFS="/sysroot" || ROOTFS="."; CMD_CHROOT="chroot ${ROOTFS}"; }
SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
debug_mode "${SSC_ARGV0:-$0}" "$@"
SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null

SYSCONF="${ROOTFS}${SYSCONF}"
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/desktop; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null

    AUTOLOGINUSER_CMDLINE=$(cmdline_value autologin) && [[ -n ${AUTOLOGINUSER_CMDLINE} ]] && AUTOLOGINUSER=${AUTOLOGINUSER_CMDLINE}
    FILE_LIGHTDM_CONF="${ROOTFS}/etc/lightdm/lightdm.conf"
    FILE_LIGHTDM_AUTOLOGIN_CONF="${ROOTFS}/etc/lightdm/lightdm.conf.d/100-autologin-ubconfig.conf"
    FILE_GDM_AUTOLOGIN_CONF=("${ROOTFS}/etc/X11/gdm/custom.conf" "${ROOTFS}/etc/gdm/custom.conf")
    FILE_SDDM_CONF=("${ROOTFS}/etc/sddm.conf.d/" "${ROOTFS}/etc/sddm.conf")
    FILE_SDDM_AUTOLOGIN_CONF="${ROOTFS}/etc/sddm.conf.d/autologin-ubconfig.conf"

    autologin_enable(){
        grep -q "^${AUTOLOGINUSER}:" ${ROOTFS}/etc/passwd 2>/dev/null || return 0
        [[ -f ${ROOTFS}/etc/slim.conf ]] && sed -i "s/^default_user[[:space:]].*/default_user        ${AUTOLOGINUSER}/g" ${ROOTFS}/etc/slim.conf
        [[ -f ${ROOTFS}/etc/X11/slim/slim.conf ]] && sed -i "s/^default_user[[:space:]].*/default_user        ${AUTOLOGINUSER}/g" ${ROOTFS}/etc/X11/slim/slim.conf
        [[ -f ${ROOTFS}/etc/lxdm/lxdm.conf ]] && sed -i "s/^#autologin=.*/autologin=${AUTOLOGINUSER}/g" ${ROOTFS}/etc/lxdm/lxdm.conf
        # Lightdm
        if [[ -f ${FILE_LIGHTDM_CONF} ]]; then
            sed "/^autologin-user=.*/d" -i ${FILE_LIGHTDM_CONF}
            mkdir -p ${FILE_LIGHTDM_AUTOLOGIN_CONF%/*}
            cat <<-EOF | sed 's/^\s*\t*//' > "${FILE_LIGHTDM_AUTOLOGIN_CONF}"
                [Seat:*]
                autologin-user=${AUTOLOGINUSER}
EOF
            AUTOLOGIN_IDGROUP=$(grep -i "g\s*autologin\s*[[:digit:]]\s*" ${ROOTFS}/usr/share/ublinux-sysusers/*.sysusers | cut -d: -f2 | xargs | cut -d " " -f3 | head -1)
            [[ -n ${AUTOLOGIN_IDGROUP} ]] && ARG_AUTOLOGIN_IDGROUP="-g ${AUTOLOGIN_IDGROUP}"
            ${CMD_CHROOT} /usr/bin/groupadd -f ${ARG_AUTOLOGIN_IDGROUP} autologin >/dev/null 2>&1
            ${CMD_CHROOT} /usr/bin/gpasswd -M ${AUTOLOGINUSER} autologin >/dev/null 2>&1
        fi

        # GDM
        for SELECT_FILE_GDM_AUTOLOGIN_CONF in ${FILE_GDM_AUTOLOGIN_CONF[@]}; do
            [[ -f ${SELECT_FILE_GDM_AUTOLOGIN_CONF} ]] || continue
            sed -E "/^[[:blank:]]*AutomaticLogin=.*/d; /^[[:blank:]]*AutomaticLoginEnable=.*/d" -i ${SELECT_FILE_GDM_AUTOLOGIN_CONF}
            sed -E "/\[daemon\]/aAutomaticLogin=${AUTOLOGINUSER}" -i ${SELECT_FILE_GDM_AUTOLOGIN_CONF}
            sed -E "/\[daemon\]/aAutomaticLoginEnable=True" -i ${SELECT_FILE_GDM_AUTOLOGIN_CONF}
        done
        # SDDM
        for SELECT_FILE_SDDM_CONF in ${FILE_SDDM_CONF[@]}; do
            [[ -f ${SELECT_FILE_SDDM_CONF} ]] && sed -E "s/^[[:blank:]]*User=.*/d" -i ${SELECT_FILE_SDDM_CONF}
            [[ -d ${SELECT_FILE_SDDM_CONF} ]] && find ${SELECT_FILE_SDDM_CONF} -type f -name "*.conf" -exec sed -E "s/^[[:blank:]]*User=.*/d" -i {} \;
        done
        install -dm755 -g root -o root ${FILE_SDDM_AUTOLOGIN_CONF%/*}
        cat <<-EOF | sed 's/^\s*\t*//' > "${FILE_SDDM_AUTOLOGIN_CONF}"
            [Autologin]
            User=${AUTOLOGINUSER}
            Session=default
EOF
        # KDE4
        [[ -f ${ROOTFS}/usr/share/ublinux/kde4/share/config/kdm/kdmrc ]] && sed -i "s/^AutoLoginUser=.*/AutoLoginUser=${AUTOLOGINUSER}/g" ${ROOTFS}/usr/share/ublinux/kde4/share/config/kdm/kdmrc
    }
    autologin_disable(){
        # Удалить конфигурационные файлы DM
        [[ -f ${ROOTFS}/etc/slim.conf ]] && sed -i "s/^default_user[[:space:]].*//g" ${ROOTFS}/etc/slim.conf
        [[ -f ${ROOTFS}/etc/X11/slim/slim.conf ]] && sed -i "s/^default_user[[:space:]].*//g" ${ROOTFS}/etc/X11/slim/slim.conf
        [[ -f ${ROOTFS}/etc/lxdm/lxdm.conf ]] && sed -i "s/^autologin=.*//g" ${ROOTFS}/etc/lxdm/lxdm.conf
        # Lightdm
        if [[ -f ${FILE_LIGHTDM_CONF} ]]; then
            sed "/^autologin-user=.*/d" -i ${FILE_LIGHTDM_CONF}
            rm -f "${FILE_LIGHTDM_AUTOLOGIN_CONF}"
        fi
        # GDM
        for SELECT_FILE_GDM_AUTOLOGIN_CONF in ${FILE_GDM_AUTOLOGIN_CONF[@]}; do
            [[ -f ${SELECT_FILE_GDM_AUTOLOGIN_CONF} ]] || continue
            sed -E "/^[[:blank:]]*AutomaticLogin=.*/d; /^[[:blank:]]*AutomaticLoginEnable=.*/d" -i ${SELECT_FILE_GDM_AUTOLOGIN_CONF}
        done
        # SDDM
        find ${FILE_SDDM_CONF[0]} -type f -name "*.conf" -exec sed -E "s/^[[:blank:]]*User=.*/d" -i {} \;
        [[ -f ${FILE_SDDM_CONF[1]} ]] && sed -E "s/^[[:blank:]]*User=.*/d" -i ${FILE_SDDM_CONF[1]}
        [[ -f ${FILE_SDDM_AUTOLOGIN_CONF} ]] && rm -f ${FILE_SDDM_AUTOLOGIN_CONF}
        # KDE4
        [[ -f ${ROOTFS}/usr/share/ublinux/kde4/share/config/kdm/kdmrc ]] && sed -i "s/^AutoLoginUser=.*//g" ${ROOTFS}/usr/share/ublinux/kde4/share/config/kdm/kdmrc
    }
    # Если в системе один пользователь, то включить автологин
    if [[ -z ${AUTOLOGINUSER} ]]; then
        #PASS_ADMUID=$(grep "^$(grep ":${ADMUID}:${ADMUID}:" ${ROOTFS}/etc/passwd | cut -d: -f1):" ${ROOTFS}/etc/shadow | cut -d: -f2) #"
        [[ $(cat "${ROOTFS}/etc/login.defs") =~ ($'\n'|^)+UID_MIN[[:blank:]]+([[:digit:]]+)($'\n'|$)+ ]] && UID_MIN=${BASH_REMATCH[2]:-1000}
        MORE_ONE_USER=$(awk -F':' -v USER_MIN=${UID_MIN} '$3 > USER_MIN && $1 != "nobody" {print $1}' ${ROOTFS}/etc/passwd)
        # Если в системе всего один пользователь и DM_HINT_PASSWORD, то автологин
        [[ -z ${MORE_ONE_USER} && -n ${DM_HINT_PASSWORD} ]] && AUTOLOGINUSER=yes
    fi

    if [[ ${AUTOLOGINUSER} == @("yes"|"enable") && -n ${DISPLAYMANAGER_DEFAULTUSER} ]]; then
        AUTOLOGINUSER="${DISPLAYMANAGER_DEFAULTUSER}"
    elif [[ ${AUTOLOGINUSER} == @("yes"|"enable") ]]; then
        AUTOLOGINUSER=$(grep ":${ADMUID}:${ADMUID}:" ${ROOTFS}/etc/passwd | cut -d: -f1)
    fi

    if [[ -n ${AUTOLOGINUSER} ]]; then
        [[ ${AUTOLOGINUSER} == @("no"|"none"|"disable") ]] && autologin_disable || autologin_enable ${AUTOLOGINUSER}
    else
        # Если параметр не задан, то всегда отключать автологин
        #autologin_disable
        true
    fi
