From b73395782aac97369f967e6cb7422faab991313b Mon Sep 17 00:00:00 2001 From: Robert Günzler Date: Wed, 30 Nov 2022 15:49:50 +0100 Subject: bin/hspl: support detecting login state and display name --- bin/hspl | 81 +++++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 26 deletions(-) (limited to 'bin') diff --git a/bin/hspl b/bin/hspl index 3059400..aca5516 100755 --- a/bin/hspl +++ b/bin/hspl @@ -6,22 +6,28 @@ set -e print_gateway_uri= print_time_diff= print_json= -while getopts djuh opt; do +if=wlan0 +debug= +while getopts djuhDI: opt; do case "$opt" in d) print_time_diff=1 ;; j) print_json=1 ;; u) print_gateway_uri=1 ;; + I) if=$OPTARG ;; + D) debug=1 ;; h | ?) printf "usage: hspl [options]\n" printf "\n" printf "supported hotspot vendors:\n" - printf " hotsplots.de (Espresso House Berlin)\n" - printf " pbspot (CoffeeFellows Berlin)\n" + printf " hotsplots.de (e.g. Espresso House / public libraries)\n" + printf " pbspot (e.g. CoffeeFellows)\n" printf "\n" printf "options:\n" printf " -d print time until expiry in seconds\n" printf " -j output json\n" printf " -u print gateway address\n" + printf " -I use a specific interface (default: %s)\n" "$if" + printf " -D emit the html for debugging\n" printf "\n" exit 2 ;; @@ -29,9 +35,7 @@ while getopts djuh opt; do done shift $((OPTIND - 1)) -if=wlan0 - -gateway=$(ip route show dev "$if" | awk '/default via/{print $3}') +gateway=$(ip route show dev "$if" | awk '/default via/{print $3; exit}') if [ -n "$print_gateway_uri" ]; then echo "$gateway" @@ -43,13 +47,22 @@ html=$(curl -Ls --interface "$if" "$gateway") t= tx= rx= -vendor= +logged_in=0 +vendor=unknown +name=unknown + +if [ -n "$debug" ]; then + echo "$html" + exit 1 +fi # hotspot vendor implementations go here: if grep -q pbspot <<<"$html"; then vendor=pbspot + # TODO: logged_in=$(grep -qi 'eingeloggt seit' && echo 1) t=$(grep -i 'expires' <<<"$html" | awk -F 'td>' '{print $4}' | tr -d '' '{print $4}' | tr -d '' '{print $4}' | tr -d ',\/tr>\n,g' <<<"$html") + logged_in=$(grep -qi 'eingeloggt seit' <<<"$html" && echo 1 || echo 0) t=$(grep -i 'verbleibende zeit' <<<"$html" | awk -F 'td>' '{print $3}' | tr -d '' '{print $3}' | tr -d '' '{print $2}' | tr -d '&2 + echo "open" "$gateway" "and complete hotspot sign in process" >&2 + echo "" >&2 exit 1 fi -expiry_time=$(date --date "now + $t" +%s) -remaining=$(((expiry_time - $(date +%s)))) - -if [ -n "$print_time_diff" ]; then - echo "$remaining" - exit 0 +if [ -z "$t" ]; then + echo "no hotspot or unimplemented vendor" >&2 + exit 1 fi -# format remaining time like: 5h30m or 10s -remaining=$(awk '{ - s=$0 - h=(s/60/60); - if(h>1){ printf "%dh", h } - m=(s/60%60) - if(m>1){ printf "%dm", m } - if(h<1 && m<1){ printf "%ds", $0 } -}' <<<"$remaining") +if [ "$t" != "unlimited" ]; then + expiry_time=$(date --date "now + $t" +%s) + remaining=$(((expiry_time - $(date +%s)))) + + if [ -n "$print_time_diff" ]; then + echo "$remaining" + exit 0 + fi + + # format remaining time like: 5h30m or 10s + remaining=$(awk '{ + s=$0 + h=(s/60/60); + if(h>1){ printf "%dh", h } + m=(s/60%60) + if(m>1){ printf "%dm", m } + if(h<1 && m<1){ printf "%ds", $0 } + }' <<<"$remaining") +else + remaining=$t +fi if [ -n "$print_json" ]; then jq -n --args '{ @@ -93,10 +120,12 @@ if [ -n "$print_json" ]; then tx:$ARGS.positional[1], rx:$ARGS.positional[2], t:$ARGS.positional[3], - vendor:$ARGS.positional[4] - }' "$remaining" "$tx" "$rx" "$t" "$vendor" + vendor:$ARGS.positional[4], + name:$ARGS.positional[5] + }' "$remaining" "$tx" "$rx" "$t" "$vendor" "$name" else echo "$remaining" echo "TX:" "$tx" echo "RX:" "$rx" + echo "[" "$name" "]" fi -- cgit 1.4.1