Message ID | 1508451907-49231-2-git-send-email-freifunk@adrianschmutzler.de |
---|---|
State | Superseded |
Headers | show |
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>
Hi Am Freitag, den 20.10.2017, 00:25 +0200 schrieb Adrian Schmutzler: > 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). > > Changes in v2: none > > 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 Können bei dem upload-dir wichtige Status-Files etc überschrieben werden? Sollte ein extra Verzeichnis gewählt werden? Vielleicht mit sowas: mktemp -d, vielleicht geht auch -u (für den Fall, dass gar nicht hochgeladen wurde). > +<% > +# 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 Vielleicht direkt aus dem Hoodfile laden? > + 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 Wenn wir das monitoring endlich per v6 im Freifunk erreichbar haben, sollte da eigentlich jeder Knoten drauf zugreifen können.. :-) > + 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 Die Zuweisung von firststep kann man vor der If-Abfrage machen. > + > > + 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>" Irgendwie wirkt der ganze Abschnitt von hinten durchs Knie.. Erst wird alles kompliziert geparsed und in HTML gebracht. Dann schnibbelst du das ganze html wieder auseinader, um am Ende teile davon dann doch wieder dran zu kleben .. uff .. Naja. Es ist eine Lösung, ich könnte damit leben, aber wirklich schön ist das nicht. Vielleicht kann man das Zeug aus firststep irgendwie in ein Übergangsformat bringen? Vielleicht sogar einfach eine Funktion aufrufen oder so.. > + 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 Man kann hier einfach "echo $firststep" machen. Tim > +fi > %> > > </table> > </fieldset> > -- > 2.7.4 >