#!/bin/sh -e
# Script to dispatch NetworkManager events
#
# Runs captive-login helper on walled garden networks.
# See NetworkManager(8) for further documentation of the dispatcher events.

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

if [ -x "/usr/bin/logger" ]; then
    logger="/usr/bin/logger -s -t CapNetAssist"
else
    logger=":"
fi

wait_for_process() {
    PNAME=$1
    while [ -z "$(/usr/bin/pgrep $PNAME)" ]; do
        sleep 3;
    done
}

#launch the browser, but on boot we need to wait that nm-applet starts
start_browser() {
    local user="$1"
    wait_for_process nm-applet
    $logger "Running browser as '$user' to login in captive portal"
    su "$user" -s /bin/sh -c "captive-login 2>/dev/null"
}

# Run the right scripts
case "$2" in
    up|vpn-up)
    $logger -p user.debug "DetectCaptivePortal script triggered"

    # assume the DISPLAY where to show the browser
    if [ -z $DISPLAY ];then
        export DISPLAY=':0'
    fi

    $logger -p user.debug "Display set as: $DISPLAY"

    #get the usernames
    users=$(who | grep "$DISPLAY" | awk '{print $1}')

    for u in $users; do
        start_browser $u || $logger -p user.err "captive-login browser failed for user: $u"
    done
    ;;
    *)
    # In a down phase
    exit 0
    ;;
esac
