[2/2] fff-web: Label Freifunk routers individually in wifiscan.html

Submitted by Adrian Schmutzler on Aug. 24, 2017, 11:19 a.m.

Details

Message ID 1503573543-1858-2-git-send-email-freifunk@adrianschmutzler.de
State Superseded
Delegated to: Adrian Schmutzler
Headers show

Commit Message

Adrian Schmutzler Aug. 24, 2017, 11:19 a.m.
This patch enables labelling of routers in the WebUI's WiFi
scan page, so their hostname is displayed instead of
freifunk.franken.net. The evaluation is performed based on
a WifiAnalyzer style node file /tmp/wifinodelist.

In the WebUI, this file may be provided by file upload or by
downloading from the Monitoring API (if the router has
internet access).

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>

Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
---
 .../fff-web/files/www/ssl/cgi-bin/wifiscan.html    | 91 ++++++++++++++++++++--
 1 file changed, 85 insertions(+), 6 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html
index 254c24b..29f99e5 100755
--- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html
@@ -1,8 +1,61 @@ 
-#!/usr/bin/haserl
+#!/usr/bin/haserl --upload-dir=/tmp --upload-limit=12000
 
+<%
+# treat post
+if [ "$REQUEST_METHOD" == "POST" ] ; then
+	if [ "$POST_wifiupload" != "" ] ; then
+		if [ ! -f "$HASERL_nodelist_path" ] ; then
+			MSG='<span class="red">Node-Datei nicht gefunden!</span>'
+		elif [ "$(du -k "$HASERL_nodelist_path" | cut -f1)" == "0" ] ; then
+			MSG='<span class="red">Node-Datei ist leer!</span>'
+		else
+			mv "$HASERL_nodelist_path" /tmp/wifinodelist
+			MSG='<span class="green">Upload erfolgreich!</span>'
+		fi
+	fi
+	if [ "$POST_wifidownload" != "" ] ; then
+		if [ ! -n "$POST_hood" ] ; then
+			MSG='<span class="red">Hood nicht angegeben!</span>'
+		else
+			if /bin/wget -T 10 -O /tmp/wifinodelist "https://monitoring.freifunk-franken.de/api/wifianal/$POST_hood" 2> /dev/null ; then
+				MSG='<span class="green">Download erfolgreich!</span>'
+			else
+				MSG='<span class="red">Download fehlgeschlagen!</span>'
+			fi
+		fi
+	fi
+fi
+%>
 <%in /www/ssl/cgi-bin/header %>
+<%in /www/ssl/cgi-bin/helpers %>
+<% show_msg %>
+<%
+if [ -s /tmp/wifinodelist ] ; then
+	numentries="$(grep -c '^[^#]' /tmp/wifinodelist)"
+	filehood="$(grep -e "#Hood:" /tmp/wifinodelist | awk -F" " '{print $2}')"
+	havelist="<span style='color:green'>Ja (Hood: ${filehood}, ${numentries} Einträge)</span>"
+else
+	havelist='<span style="color:red">Nein</span>'
+fi
+%>
 <table style="width: 100%">
 <tr><td>
+<form method="post" enctype="multipart/form-data">
+<fieldset>
+	<legend>Wifi Node File</legend>
+	<table>
+		<tr><th style="width: 20em;text-align:left;padding-bottom:10px">Alias Liste vorhanden:</th><td style="padding-bottom:10px"><%= "$havelist" %></td></tr>
+		<tr><th style="width: 20em;text-align:left">Upload Node-Liste:</th><td><input type="file" name="nodelist" /></td></tr>
+		<tr><td colspan="2" style="padding:10px 0">Hier kann eine Node-Liste (WiFiAnalyzer-Stil) hochgeladen werden.</td></tr>
+		<tr><td colspan="2"><input type="submit" name="wifiupload" value="Datei-Upload auf Router" /></td></tr>
+		<tr><td colspan="2" style="padding:10px 0">Wenn der Router mit dem Internet verbunden ist, kann die Node-Liste vom Monitoring bezogen werden:</td></tr>
+		<tr><th style="width: 20em;text-align:left">Name der Hood:</th><td><input type="text" name="hood" value="" /></td></tr>
+		<tr><td colspan="2" style="padding:10px 0"><input type="submit" name="wifidownload" value="Datei-Download von Monitoring" /></td></tr>
+	</table>
+</fieldset>
+</form>
+</td></tr>
+<tr><td>
 <fieldset>
 	<legend>Wifi Scan</legend>
 	<table class="wifitable">
@@ -16,11 +69,37 @@ 
 		</tr>
 
 <%
-iwinfo w2mesh scan |\
-	awk -v RS='' \
-	'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID: "?(unknown|[^"]*)"?[ ]*\n.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-9]*) dBm.*Encryption: ([^"]*).*/, \
-	"<!-- \\5 --><tr><td>\\2</td><td>\\4</td><td>\\5 dBm</td><td>\\3</td><td>\\1</td><td>\\6</td></tr>", "g"); print r;}' | sort -n | sed 's#&#\&amp;#'
-	# The HTML comment contains the signal quality to allow sorting
+if [ -s /tmp/wifinodelist ] ; then
+	firststep=$(iwinfo w2mesh scan |\
+		awk -v RS='' \
+		'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID: "?(unknown|[^"]*)"?[ ]*\n.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-9]*) dBm.*Encryption: ([^"]*).*/, \
+		"<!-- \\5 --><tr><ssid>\\2</ssid><td>\\4</td><td>\\5 dBm</td><td>\\3</td><mac>\\1</mac><td>\\6</td></tr>", "g"); print r;}' | sort -n | sed 's#&#\&amp;#')
+		# The HTML comment contains the signal quality to allow sorting
+
+	echo "$firststep" | while read line ; do
+		mac="$(echo "$line" | sed -e 's#.*<mac>\(.*\)</mac>.*#\1#')"
+		routerid="$(grep -i -e "$mac" /tmp/wifinodelist | awk -F"|" '{print $2}')"
+		if [ -n "$routerid" ] ; then
+			ssid="<span style='color:green'>${routerid}</span>"
+		else
+			ssidtmp="$(echo "$line" | sed -e 's#.*<ssid>\(.*\)</ssid>.*#\1#')"
+			if [ "$ssidtmp" = "unknown" ] ; then
+				ssid="<span style='color:blue'>${ssidtmp}</span>"
+			else
+				ssid="$ssidtmp"
+			fi
+		fi
+		midpart=$(echo "$line" | sed -e 's#.*</ssid>\(.*\)<mac>.*#\1#')
+		endpart=$(echo "$line" | sed -e 's#.*</mac>\(.*\)</tr>.*#\1#')
+		echo "<tr><td>${ssid}</td>${midpart}<td>${mac}</td>${endpart}</tr>"
+	done
+else
+	iwinfo w2mesh scan |\
+		awk -v RS='' \
+		'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID: "?(unknown|[^"]*)"?[ ]*\n.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-9]*) dBm.*Encryption: ([^"]*).*/, \
+		"<!-- \\5 --><tr><td>\\2</td><td>\\4</td><td>\\5 dBm</td><td>\\3</td><td>\\1</td><td>\\6</td></tr>", "g"); print r;}' | sort -n | sed 's#&#\&amp;#'
+		# The HTML comment contains the signal quality to allow sorting
+fi
 %>
 	</table>
 </fieldset>

Comments

Adrian Schmutzler Aug. 24, 2017, 12:46 p.m.
Hallo zusammen,

im Anhang ein Screenshot der neuen wifiscan.html Seite.

Grüße

Adrian

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf
> Of Adrian Schmutzler
> Sent: Donnerstag, 24. August 2017 13:19
> To: franken-dev@freifunk.net
> Subject: [PATCH 2/2] fff-web: Label Freifunk routers individually in
> wifiscan.html
> 
> This patch enables labelling of routers in the WebUI's WiFi scan page, so
their
> hostname is displayed instead of freifunk.franken.net. The evaluation is
> performed based on a WifiAnalyzer style node file /tmp/wifinodelist.
> 
> In the WebUI, this file may be provided by file upload or by downloading
> from the Monitoring API (if the router has internet access).
> 
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> 
> Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> ---
>  .../fff-web/files/www/ssl/cgi-bin/wifiscan.html    | 91
> ++++++++++++++++++++--
>  1 file changed, 85 insertions(+), 6 deletions(-)
> 
> diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html
> b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html
> index 254c24b..29f99e5 100755
> --- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html
> +++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html
> @@ -1,8 +1,61 @@
> -#!/usr/bin/haserl
> +#!/usr/bin/haserl --upload-dir=/tmp --upload-limit=12000
> 
> +<%
> +# treat post
> +if [ "$REQUEST_METHOD" == "POST" ] ; then
> +	if [ "$POST_wifiupload" != "" ] ; then
> +		if [ ! -f "$HASERL_nodelist_path" ] ; then
> +			MSG='<span class="red">Node-Datei nicht
> gefunden!</span>'
> +		elif [ "$(du -k "$HASERL_nodelist_path" | cut -f1)" == "0" ]
;
> then
> +			MSG='<span class="red">Node-Datei ist
> leer!</span>'
> +		else
> +			mv "$HASERL_nodelist_path" /tmp/wifinodelist
> +			MSG='<span class="green">Upload
> erfolgreich!</span>'
> +		fi
> +	fi
> +	if [ "$POST_wifidownload" != "" ] ; then
> +		if [ ! -n "$POST_hood" ] ; then
> +			MSG='<span class="red">Hood nicht
> angegeben!</span>'
> +		else
> +			if /bin/wget -T 10 -O /tmp/wifinodelist
> "https://monitoring.freifunk-franken.de/api/wifianal/$POST_hood" 2>
> /dev/null ; then
> +				MSG='<span class="green">Download
> erfolgreich!</span>'
> +			else
> +				MSG='<span class="red">Download
> fehlgeschlagen!</span>'
> +			fi
> +		fi
> +	fi
> +fi
> +%>
>  <%in /www/ssl/cgi-bin/header %>
> +<%in /www/ssl/cgi-bin/helpers %>
> +<% show_msg %>
> +<%
> +if [ -s /tmp/wifinodelist ] ; then
> +	numentries="$(grep -c '^[^#]' /tmp/wifinodelist)"
> +	filehood="$(grep -e "#Hood:" /tmp/wifinodelist | awk -F" " '{print
> $2}')"
> +	havelist="<span style='color:green'>Ja (Hood: ${filehood},
> ${numentries} Einträge)</span>"
> +else
> +	havelist='<span style="color:red">Nein</span>'
> +fi
> +%>
>  <table style="width: 100%">
>  <tr><td>
> +<form method="post" enctype="multipart/form-data"> <fieldset>
> +	<legend>Wifi Node File</legend>
> +	<table>
> +		<tr><th style="width: 20em;text-align:left;padding-
> bottom:10px">Alias Liste vorhanden:</th><td style="padding-
> bottom:10px"><%= "$havelist" %></td></tr>
> +		<tr><th style="width: 20em;text-align:left">Upload Node-
> Liste:</th><td><input type="file" name="nodelist" /></td></tr>
> +		<tr><td colspan="2" style="padding:10px 0">Hier kann eine
> Node-Liste (WiFiAnalyzer-Stil) hochgeladen werden.</td></tr>
> +		<tr><td colspan="2"><input type="submit"
> name="wifiupload" value="Datei-Upload auf Router" /></td></tr>
> +		<tr><td colspan="2" style="padding:10px 0">Wenn der
> Router mit dem Internet verbunden ist, kann die Node-Liste vom Monitoring
> bezogen werden:</td></tr>
> +		<tr><th style="width: 20em;text-align:left">Name der
> Hood:</th><td><input type="text" name="hood" value="" /></td></tr>
> +		<tr><td colspan="2" style="padding:10px 0"><input
> type="submit" name="wifidownload" value="Datei-Download von
> Monitoring" /></td></tr>
> +	</table>
> +</fieldset>
> +</form>
> +</td></tr>
> +<tr><td>
>  <fieldset>
>  	<legend>Wifi Scan</legend>
>  	<table class="wifitable">
> @@ -16,11 +69,37 @@
>  		</tr>
> 
>  <%
> -iwinfo w2mesh scan |\
> -	awk -v RS='' \
> -	'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID: "?(unknown|[^"]*)"?[
> ]*\n.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-9]*) dBm.*Encryption:
> ([^"]*).*/, \
> -	"<!-- \\5 --><tr><td>\\2</td><td>\\4</td><td>\\5
> dBm</td><td>\\3</td><td>\\1</td><td>\\6</td></tr>", "g"); print r;}' |
> sort -n | sed 's#&#\&amp;#'
> -	# The HTML comment contains the signal quality to allow sorting
> +if [ -s /tmp/wifinodelist ] ; then
> +	firststep=$(iwinfo w2mesh scan |\
> +		awk -v RS='' \
> +		'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID:
> "?(unknown|[^"]*)"?[ ]*\n.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-
> 9]*) dBm.*Encryption: ([^"]*).*/, \
> +		"<!-- \\5 --><tr><ssid>\\2</ssid><td>\\4</td><td>\\5
> dBm</td><td>\\3</td><mac>\\1</mac><td>\\6</td></tr>", "g"); print r;}'
> | sort -n | sed 's#&#\&amp;#')
> +		# The HTML comment contains the signal quality to allow
> sorting
> +
> +	echo "$firststep" | while read line ; do
> +		mac="$(echo "$line" | sed -e
> 's#.*<mac>\(.*\)</mac>.*#\1#')"
> +		routerid="$(grep -i -e "$mac" /tmp/wifinodelist | awk -F"|"
> '{print $2}')"
> +		if [ -n "$routerid" ] ; then
> +			ssid="<span style='color:green'>${routerid}</span>"
> +		else
> +			ssidtmp="$(echo "$line" | sed -e
> 's#.*<ssid>\(.*\)</ssid>.*#\1#')"
> +			if [ "$ssidtmp" = "unknown" ] ; then
> +				ssid="<span
> style='color:blue'>${ssidtmp}</span>"
> +			else
> +				ssid="$ssidtmp"
> +			fi
> +		fi
> +		midpart=$(echo "$line" | sed -e
> 's#.*</ssid>\(.*\)<mac>.*#\1#')
> +		endpart=$(echo "$line" | sed -e
> 's#.*</mac>\(.*\)</tr>.*#\1#')
> +		echo
> "<tr><td>${ssid}</td>${midpart}<td>${mac}</td>${endpart}</tr>"
> +	done
> +else
> +	iwinfo w2mesh scan |\
> +		awk -v RS='' \
> +		'{r = gensub(/.*Address: ([0-9A-F:]*)?.*ESSID:
> "?(unknown|[^"]*)"?[ ]*\n.*Mode: ([^ ]*).*Channel: ([0-9]*).*Signal: (-[0-
> 9]*) dBm.*Encryption: ([^"]*).*/, \
> +		"<!-- \\5 --><tr><td>\\2</td><td>\\4</td><td>\\5
> dBm</td><td>\\3</td><td>\\1</td><td>\\6</td></tr>", "g"); print r;}' |
> sort -n | sed 's#&#\&amp;#'
> +		# The HTML comment contains the signal quality to allow
> sorting fi
>  %>
>  	</table>
>  </fieldset>
> --
> 2.7.4
> 
> --
> franken-dev mailing list
> franken-dev@freifunk.net
> http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net