#!/bin/sh

set -e

case "$1" in
    configure)
	sed -i.bak-xbmc-live s/allowed_users=console/allowed_users=anybody/ /etc/X11/Xwrapper.config

	# Add the 'xbmc' user if the primary one is missing
	xbmcUser=$(getent passwd 1000 | sed -e 's/\:.*//')
	if [ ! -n "$xbmcUser" ]; then
		adduser --gecos "XBMC Live User" xbmc
		xbmcUser=xbmc
	fi

	# Add 'xbmcUser' user to the appropriate groups
	# Below is a listing of groups and their purpose
	# adm - For reading system logs (minimal systems may have this user only)
	# sudo - allow optional passwordless sudo (with trivial intervention on /etc/sudoers)
	# cdrom - optical disc drive access
	# floppy - floppy drive access
	# audio - audio device access
	# video - video device access
	# plugdev - enable automatic notifications of new devices
	# netdev - managing network connections via NetworkManager
	# powerdev - to be able to hibernate/suspend
	# fuse - to be able to mount filesystems as normal user
	GROUPS="adm
		sudo
		cdrom
		floppy
		audio
		video
		plugdev
		netdev
		powerdev
		fuse"

	# TODO: this probably isn't necessary anymore as PolicyKit is now being
	# used
	for GROUP in $GROUPS; do
		if getent group $GROUP >/dev/null && \
			! getent group $GROUP | grep -q $xbmcUser; then
			adduser $xbmcUser $GROUP
		fi
	done

	# Add xbmc to the sudoers file (if not already done)
	if [ ! $(grep -i XBMC-specific /etc/sudoers) ]; then
		echo "" >> /etc/sudoers
		echo "# XBMC" >> /etc/sudoers
		echo "# XBMC-specific configuration" >> /etc/sudoers
		echo "# XBMC" >> /etc/sudoers
		echo "Cmnd_Alias SHUTDOWN_CMDS = /sbin/shutdown, /sbin/reboot, /sbin/halt # XBMC"  >> /etc/sudoers
		echo "Cmnd_Alias MOUNT_CMDS = /bin/mount, /bin/umount # XBMC" >> /etc/sudoers
		echo "$xbmcUser ALL=(ALL) ALL" >> /etc/sudoers
		echo "$xbmcUser ALL=NOPASSWD: SHUTDOWN_CMDS, MOUNT_CMDS # XBMC" >> /etc/sudoers
	fi

	# Our set of PolicyKit actions

	# This is a list of actions that the 'xbmc' user should be allowed to
	# do. If we missed one, or we have one that's not necessary, please
	# submit a bug report.
	POLKIT_ACTIONS="org.freedesktop.hal.dockstation.undock
		org.freedesktop.hal.wol.enabled
		org.freedesktop.hal.wol.enable
		org.freedesktop.hal.wol.supported
		org.freedesktop.hal.leds.brightness
		org.freedesktop.hal.device-access.audio-player
		org.freedesktop.hal.device-access.camera
		org.freedesktop.hal.device-access.cdrom
		org.freedesktop.hal.device-access.dvb
		org.freedesktop.hal.device-access.fingerprint-reader
		org.freedesktop.hal.device-access.floppy
		org.freedesktop.hal.device-access.ieee1394-avc
		org.freedesktop.hal.device-access.ieee1394-iidc
		org.freedesktop.hal.device-access.joystick
		org.freedesktop.hal.device-access.mouse
		org.freedesktop.hal.device-access.obex
		org.freedesktop.hal.device-access.pda
		org.freedesktop.hal.device-access.printer
		org.freedesktop.hal.device-access.scanner
		org.freedesktop.hal.device-access.sound
		org.freedesktop.hal.device-access.video
		org.freedesktop.hal.device-access.video4linux
		org.freedesktop.hal.lock
		org.freedesktop.hal.killswitch.bluetooth
		org.freedesktop.hal.killswitch.wlan
		org.freedesktop.hal.killswitch.wwan
		org.freedesktop.hal.storage.mount-removable
		org.freedesktop.hal.storage.eject
		org.freedesktop.hal.storage.crypto-setup-removable
		org.freedesktop.hal.power-management.shutdown
		org.freedesktop.hal.power-management.reboot
		org.freedesktop.hal.power-management.set-powersave
		org.freedesktop.hal.power-management.suspend
		org.freedesktop.hal.power-management.hibernate
		org.freedesktop.hal.power-management.cpufreq
		org.freedesktop.hal.power-management.lcd-panel
		org.freedesktop.hal.power-management.light-sensor
		org.freedesktop.hal.power-management.keyboard-backlight"

	# Grant the 'xbmc' user each action from the list if not done already
	for ACTION in $POLKIT_ACTIONS; do
		if polkit-auth --user $xbmcUser --show-obtainable | \
			grep -q $ACTION; then
			polkit-auth --user $xbmcUser --grant $ACTION
		fi
	done
    ;;

    abort-upgrade|abort-remove|abort-deconfigure)
    ;;

    *)
        echo "postinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac

# Upstart scripts tested on karmic only and not backward compatible ATM
if [ "$(lsb_release -c | grep karmic)" ]; then
	if [ -f "/etc/init.d/xbmc-live" ]; then
		rm /etc/init.d/xbmc-live >/dev/null
		update-rc.d -f xbmc-live remove >/dev/null
	fi

	ln -s /lib/init/upstart-job /etc/init.d/xbmc-live
else
	if [ -f "/etc/init/xbmc-live.conf" ]; then
		rm /etc/init/xbmc-live.conf >/dev/null
	fi
	if [ -f "/etc/init/xbmc-live-install" ]; then
		rm /etc/init/xbmc-live-install.conf >/dev/null
	fi

	if [ -x "/etc/init.d/xbmc-live" ]; then
		update-rc.d xbmc-live defaults >/dev/null
		if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
			invoke-rc.d xbmc-live start || exit $?
		else
			/etc/init.d/xbmc-live start || exit $?
		fi
	fi
fi
exit 0
