diff options
| author | Robert Günzler <r@gnzler.io> | 2026-02-10 12:32:48 +0100 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2026-02-10 12:41:25 +0100 |
| commit | 63feeb9f369fc6176e85c1c2d8fcc863caad1946 (patch) | |
| tree | 41cd5d2d1ec36e74e464caab722cc9b460153f04 /bin/hspl | |
| parent | 5bd0a4aca65ecb9818ef1285982d160b6b6ff665 (diff) | |
start new
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to 'bin/hspl')
| -rwxr-xr-x | bin/hspl | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/bin/hspl b/bin/hspl deleted file mode 100755 index aca5516..0000000 --- a/bin/hspl +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/bash - -set -e -[ -n "$DEBUG" ] && set -x - -print_gateway_uri= -print_time_diff= -print_json= -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 (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 - ;; - esac -done -shift $((OPTIND - 1)) - -gateway=$(ip route show dev "$if" | awk '/default via/{print $3; exit}') - -if [ -n "$print_gateway_uri" ]; then - echo "$gateway" - exit 0 -fi - -html=$(curl -Ls --interface "$if" "$gateway") - -t= -tx= -rx= -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 '</' | tr -d ':' | sed -e 's,s, seconds,' -e 's,m, minutes,') - t=${t:-unlimited} - tx=$(grep -i 'transmitted' <<<"$html" | awk -F 'td>' '{print $4}' | tr -d '</') - rx=$(grep -i 'received' <<<"$html" | awk -F 'td>' '{print $4}' | tr -d '</') -fi - -if grep -q hotsplots <<<"$html"; then - vendor=hotsplots - html=$(sed 's,\/tr>,\/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 '</' | sed -e 's, ,,' -e 's,h, hours,' -e 's,min, minutes,' -e 's,sec, seconds,') - t=${t:-unlimited} - tx=$(grep -i 'übertragene daten' <<<"$html" | awk -F 'td>' '{print $3}' | tr -d '</' | sed -e 's, ,,' -e 's, (.*),,') - rx="-" - name=$(grep -i 'loginHead' <<<"$html" | awk -F 'h2>' '{print $2}' | tr -d '</') -fi - -# end of hotspot vendor implementations - -if [ "$logged_in" -eq 0 ]; then - echo "not logged in" >&2 - echo "open" "$gateway" "and complete hotspot sign in process" >&2 - echo "" >&2 - exit 1 -fi - -if [ -z "$t" ]; then - echo "no hotspot or unimplemented vendor" >&2 - exit 1 -fi - -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 '{ - remaining:$ARGS.positional[0], - tx:$ARGS.positional[1], - rx:$ARGS.positional[2], - t:$ARGS.positional[3], - 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 |