[PATCH 2/2] fff-web: Label Freifunk routers individually in wifiscan.html
Adrian Schmutzler
freifunk at adrianschmutzler.de
Do Aug 24 13:19:03 CEST 2017
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 at adrianschmutzler.de>
Tested-by: Adrian Schmutzler <freifunk at 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#&#\&#'
- # 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#&#\&#')
+ # 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#&#\&#'
+ # The HTML comment contains the signal quality to allow sorting
+fi
%>
</table>
</fieldset>
--
2.7.4
Mehr Informationen über die Mailingliste franken-dev