#!/bin/bash
# ***** BEGIN LICENSE BLOCK *****
# * Copyright (C) 2009  Konstantin A. Baev <kipruss@etersoft.ru>, Etersoft
# *
# * This program is free software; you can redistribute it and/or modify
# * it under the terms of the GNU General Public License as published by
# * the Free Software Foundation; either version 2 of the License, or
# * (at your option) any later version.
# *
# * This program is distributed in the hope that it will be useful,
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# * GNU General Public License for more details.
# *
# * You should have received a copy of the GNU General Public License
# * along with this program; if not, write to the Free Software
# * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
# ***** END LICENSE BLOCK *****

if [ -f /etc/eterscripts.conf ] ; then
  . /etc/eterscripts.conf
else
  echo 'Ошибка! Не найден конфигурационный файл /etc/eterscripts.conf'
  exit 1
fi

. shell-ini-config
. shell-quote
. shell-error

fluxboxfile=07fluxbox

wmsessiondir=$X11CONFDIR/wmsession.d
wmfluxbox=$wmsessiondir/$fluxboxfile
kdmrc3=$X11CONFDIR/kdm/kdmrc
kdmrc4=$X11CONFDIR/kdm4/kdmrc

add_user()
{
    useradd "$1" -c "NX user" || fatal "Невозможно создать пользователя $1!"
}

add_single_mode()
{
    FLUXBOX=`which fluxbox`
    [ -x "$FLUXBOX" ] || fatal 'Не найден файл запуска fluxbox!'
    [ -x `which single-mode` ] || fatal 'Не найден скрипт single-mode!'
    single-mode -l "$1" "$FLUXBOX"
}

delete_single_mode()
{
    [ -x `which single-mode` ] || fatal 'Не найден скрипт single-mode!'
    single-mode -d "$1"
}

copy_fluxbox_settings()
{
    homedir=`getent passwd "$1" | cut -d":" -f 6`
    [ -d "$homedir" ] || fatal "Не найден домашний каталог пользователя $1!"
    [ -w "$homedir" ] || fatal "Каталог $homedir не доступен на запись!"
    if $(mkdir -p $homedir/.fluxbox) ; then
        cp $DATADIR/fluxbox/* $homedir/.fluxbox
        chown -R "$1:" $homedir/.fluxbox
    fi
}

delete_fluxbox_settings()
{
    homedir=`getent passwd "$1" | cut -d":" -f 6`
    [ -d "$homedir" ] || fatal "Не найден домашний каталог пользователя $1!"
    [ -w "$homedir" ] || fatal "Каталог $homedir не доступен на запись!"
    rm -rf $homedir/.fluxbox
}

change_kdmrc()
{
    kdmchanged=0
    change_single_kdmrc "$1" "$kdmrc3"
    if [ "$?" -eq 0 ] ; then kdmchanged=1 ; fi
    change_single_kdmrc "$1" "$kdmrc4"
    if [ "$?" -eq 0 ] ; then kdmchanged=1 ; fi
    if [ "$kdmchanged" != 1 ] ; then
        fatal 'Не удалось внести изменения в kdmrc!'
    fi
}

change_single_kdmrc()
{
    if [ -w "$2" ] ; then
        if $(ini_config_set "$2" 'X-:*-Core' 'NoPassEnable' 'true') &&
           $(ini_config_set "$2" 'X-:*-Core' 'NoPassUsers' "$1") &&
           $(ini_config_set "$2" 'X-:0-Core' 'AutoLoginEnable' 'true') &&
           $(ini_config_set "$2" 'X-:0-Core' 'AutoLoginUser' "$1") ; then
            echo 'Информация: параметры автоматического входа в систему успешно изменены'
            echo "для пользователя $1 (изменённый файл: $2)"
            return 0
        else
            echo 'Ошибка при установке параметров входа в систему!'
            return 1
        fi
    else
        return 1
    fi
}

delete_kdmrc()
{
    kdmchanged=0
    delete_single_kdmrc "$kdmrc3"
    if [ "$?" -eq 0 ] ; then kdmchanged=1 ; fi
    delete_single_kdmrc "$kdmrc4"
    if [ "$?" -eq 0 ] ; then kdmchanged=1 ; fi
    if [ "$kdmchanged" != 1 ] ; then
        fatal 'Не удалось внести изменения в kdmrc!'
    fi
}

delete_single_kdmrc()
{
    if [ -w "$1" ] ; then
        if $(ini_config_del "$1" 'X-:*-Core' 'NoPassEnable') &&
           $(ini_config_del "$1" 'X-:*-Core' 'NoPassUsers') &&
           $(ini_config_del "$1" 'X-:0-Core' 'AutoLoginEnable') &&
           $(ini_config_del "$1" 'X-:0-Core' 'AutoLoginUser') ; then
            echo 'Информация: параметры автоматического входа в систему успешно удалены'
            echo "(изменённый файл: $1)"
            return 0
        else
            echo 'Ошибка при установке параметров входа в систему!'
            return 1
        fi
    else
        return 1
    fi
}

change_wmsession()
{
    [ -d "$wmsessiondir" ] || fatal "Не найден каталог $wmsessiondir!"
    [ -w "$wmsessiondir" ] || fatal "Каталог $wmsessiondir не доступен на запись!"
    if [ -w "$wmfluxbox" ] ; then
        search=`grep NXClient $wmfluxbox`
        if [ -z "$search" ] ; then
            cp $wmfluxbox $wmfluxbox.orig
            name_old='NAME=Fluxbox'
            name_new='NAME=NXClient'
            sed -e "s/$name_old/$name_new/g" $wmfluxbox.orig > $wmfluxbox.orig1
            icon_old="ICON=/usr/share/icons/hicolor/32x32/apps/fluxbox.xpm"
            icon_new="ICON=/usr/share/nxclient/icons/48x48/nxclient-icon.png"
            icon_old="ICON=\/usr\/share\/icons\/hicolor\/32x32\/apps\/fluxbox.xpm"
            icon_new="ICON=\/usr\/share\/nxclient\/icons\/48x48\/nxclient-icon.png"
            sed "s/$icon_old/$icon_new/g" $wmfluxbox.orig1 > $wmfluxbox.orig2
            desc_old='DESC=Light and fast window manager'
            desc_new='DESC=Light and fast window manager for NXClient'
            sed -e "s/$desc_old/$desc_new/g" $wmfluxbox.orig2 > $wmfluxbox
            rm -f $wmfluxbox.orig*
            echo "Информация: файл $wmfluxbox успешно изменен"
        fi
    else
        rm -f $wmsessiondir/*fluxbox*
        if $(cp $DATADIR/nxclient-wmsession/$fluxboxfile $wmsessiondir) ; then
            echo 'Информация: параметры wmsession.d успешно изменены'
        else
            fatal 'Ошибка при установке параметров wmsession.d!'
        fi
    fi
}

case "$1" in
    autosetup)
        [ "$#" -eq 1 ] || fatal 'Usage: nxclient-setup autosetup'
        add_user "$NEW_NXUSER"
        copy_fluxbox_settings "$NEW_NXUSER"
        change_wmsession
        change_kdmrc "$NEW_NXUSER"
        add_single_mode "$NEW_NXUSER"
        ;;
    adduser)
        [ "$#" -eq 2 ] || fatal 'Usage: nxclient-setup adduser <newuser>'
        add_user "$2"
        ;;
    autologin)
        case "$2" in
            set)
                [ "$#" -eq 3 ] || fatal 'Usage: nxclient-setup autologin set <newuser>'
                change_kdmrc "$3"
                ;;
            delete)
                [ "$#" -eq 2 ] || fatal 'Usage: nxclient-setup autologin delete'
                delete_kdmrc
                ;;
            *)
                fatal 'Usage: nxclient-setup autologin {set <user>|delete}'
        esac
        ;;
    desktop)
        case "$2" in
            set)
                [ "$#" -eq 3 ] || fatal 'Usage: nxclient-setup desktop set <user>'
                copy_fluxbox_settings "$3"
                change_wmsession
                ;;
            delete)
                [ "$#" -eq 3 ] || fatal 'Usage: nxclient-setup desktop delete <user>'
                delete_fluxbox_settings "$3"
                ;;
            *)
                fatal 'Usage: nxclient-setup desktop {set|delete} <user>'
        esac
        ;;
    single)
        case "$2" in
            set)
                [ "$#" -eq 3 ] || fatal 'Usage: nxclient-setup single set <user>'
                add_single_mode "$3"
                ;;
            delete)
                [ "$#" -eq 3 ] || fatal 'Usage: nxclient-setup single delete <user>'
                delete_single_mode "$3"
                ;;
            *)
                fatal 'Usage: nxclient-setup single {set|delete} <user>'
        esac
        ;;
    *)
        fatal 'Usage: nxclient-setup {help|autosetup|adduser|autologin|desktop|single}'
esac


