#!/bin/sh -e
# Script to dispatch NetworkManager events
#
# Runs io.elementary.capnet-assist 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"
    local display="$2"

    export DISPLAY="$display"
    wait_for_process nm-applet

    $logger "Running browser as '$user' with display '$display' to login in captive portal"
    su "$user" -s /bin/sh -c "io.elementary.capnet-assist 2>/dev/null"
}

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

    # Match 2nd column of who's output with ' :[at least one digit] '
    who | awk '$2 ~ /:[0-9]+/ { print $1 " " $2; };' | \
    while read user display; do
        start_browser $user $display || $logger -p user.err "failed for user: '$user' display: '$display')"
    done
    ;;
    *)
    # In a down phase
    exit 0
    ;;
esac
