[PATCH v4 2/2] Add new WebUI
Dominik Heidler
dominik at heidler.eu
Fr Mär 4 12:27:22 CET 2016
Signed-off-by: Dominik Heidler <dominik at heidler.eu>
---
.../fff/fff-web/files/www/ssl/cgi-bin/footer | 12 ++
.../fff/fff-web/files/www/ssl/cgi-bin/header | 46 +++++
.../fff/fff-web/files/www/ssl/cgi-bin/helpers | 22 +++
.../fff/fff-web/files/www/ssl/cgi-bin/home.html | 88 +++++++++
.../fff/fff-web/files/www/ssl/cgi-bin/logout.html | 19 ++
.../fff-web/files/www/ssl/cgi-bin/password.html | 48 +++++
.../fff/fff-web/files/www/ssl/cgi-bin/ports.html | 97 ++++++++++
.../fff/fff-web/files/www/ssl/cgi-bin/reboot.html | 35 ++++
.../fff-web/files/www/ssl/cgi-bin/settings.html | 83 ++++++++
.../fff/fff-web/files/www/ssl/cgi-bin/upgrade.html | 77 ++++++++
.../fff-web/files/www/ssl/cgi-bin/wifiscan.html | 52 +++++
.../fff/fff-web/files/www/ssl/freifunk.svg | 8 +
src/packages/fff/fff-web/files/www/ssl/index.html | 13 ++
.../fff/fff-web/files/www/ssl/port_down.png | Bin 0 -> 982 bytes
src/packages/fff/fff-web/files/www/ssl/port_up.png | Bin 0 -> 1401 bytes
src/packages/fff/fff-web/files/www/ssl/style.css | 215 +++++++++++++++++++++
16 files changed, 815 insertions(+)
create mode 100755 src/packages/fff/fff-web/files/www/ssl/cgi-bin/footer
create mode 100755 src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
create mode 100755 src/packages/fff/fff-web/files/www/ssl/cgi-bin/helpers
create mode 100755 src/packages/fff/fff-web/files/www/ssl/cgi-bin/home.html
create mode 100755 src/packages/fff/fff-web/files/www/ssl/cgi-bin/logout.html
create mode 100755 src/packages/fff/fff-web/files/www/ssl/cgi-bin/password.html
create mode 100755 src/packages/fff/fff-web/files/www/ssl/cgi-bin/ports.html
create mode 100755 src/packages/fff/fff-web/files/www/ssl/cgi-bin/reboot.html
create mode 100755 src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
create mode 100755 src/packages/fff/fff-web/files/www/ssl/cgi-bin/upgrade.html
create mode 100755 src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html
create mode 100644 src/packages/fff/fff-web/files/www/ssl/freifunk.svg
create mode 100644 src/packages/fff/fff-web/files/www/ssl/index.html
create mode 100644 src/packages/fff/fff-web/files/www/ssl/port_down.png
create mode 100644 src/packages/fff/fff-web/files/www/ssl/port_up.png
create mode 100644 src/packages/fff/fff-web/files/www/ssl/style.css
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/footer b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/footer
new file mode 100755
index 0000000..95d43bf
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/footer
@@ -0,0 +1,12 @@
+#!/usr/bin/haserl
+
+ </div>
+ </div>
+ <div class="clearit"></div>
+ </div>
+ <div id="footer">
+ <%# Creative Commons Attribution %>
+ Design by <a href="http://templated.co" rel="nofollow">TEMPLATED</a>.
+ </div>
+</body>
+</html>
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
new file mode 100755
index 0000000..2393ec7
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/header
@@ -0,0 +1,46 @@
+#!/usr/bin/haserl
+
+<%
+echo -en "Content-Type: text/html\r\n\r\n"
+nav_entry() {
+ script_file="/cgi-bin/$1"
+ if [ "$script_file" == "$REQUEST_URI" ] ; then
+ local class_active=' class="active"'
+ fi
+ echo -ne "\t<li${class_active}><a href=\"${script_file}\">$2</a></li>\n\t\t"
+}
+
+HOSTNAME=$(uci get -q 'system. at system[0].hostname')
+
+%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <title><%= ${HOSTNAME} %></title>
+ <link href="/style.css" rel="stylesheet" type="text/css" media="screen" />
+</head>
+<body>
+ <div id="header" style="position: relative;">
+ <h1><%= ${HOSTNAME} %></h1>
+ <h2>Freifunk Franken Router</h2>
+ <img src="/freifunk.svg" style="position: absolute; top: 1px; right: 42px;" />
+ </div>
+ <div style="height: 30px; background-color: #ffb400;"></div>
+ <div id="menu">
+ <ul>
+ <%
+ nav_entry home.html "Home"
+ nav_entry settings.html "Einstellungen"
+ nav_entry ports.html "Anschlüsse"
+ nav_entry wifiscan.html "Wifi Scan"
+ nav_entry upgrade.html "Upgrade"
+ nav_entry password.html "Password"
+ nav_entry reboot.html "Neustart"
+ nav_entry logout.html "Logout"
+ %>
+ </ul>
+ <div></div>
+ </div>
+ <div id="container">
+ <div id="primarycontainer">
+ <div id="primarycontent">
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/helpers b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/helpers
new file mode 100755
index 0000000..528fcd4
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/helpers
@@ -0,0 +1,22 @@
+#!/usr/bin/haserl
+
+<%
+human_bytes() {
+ while read B ; do
+ [ $B -lt 1024 ] && echo ${B} B && break
+ KB=$(((B+512)/1024))
+ [ $KB -lt 1024 ] && echo ${KB} KB && break
+ MB=$(((KB+512)/1024))
+ [ $MB -lt 1024 ] && echo ${MB} MB && break
+ GB=$(((MB+512)/1024))
+ [ $GB -lt 1024 ] && echo ${GB} GB && break
+ echo $(((GB+512)/1024)) TB
+ done
+}
+
+show_msg() {
+ if [ "$MSG" != "" ] ; then
+ echo "<div class=\"msg\">${MSG}</div>"
+ fi
+}
+%>
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/home.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/home.html
new file mode 100755
index 0000000..af7841c
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/home.html
@@ -0,0 +1,88 @@
+#!/usr/bin/haserl
+
+<%in /www/ssl/cgi-bin/header %>
+<%in /www/ssl/cgi-bin/helpers %>
+<%
+if pidof fastd >/dev/null ; then
+ vpn_active="Ja"
+else
+ vpn_active="Nein"
+fi
+up="$(uptime)"
+load="${up##*:}"
+uptime="${up%%,*}"
+uptime="${uptime##*up}"
+
+#include OpenWrt version
+. /etc/openwrt_release
+. /etc/firmware_release
+
+addr() {
+ local addr="$(ip -$1 address show dev $2 2>/dev/null | tr '/' ' '| awk '/inet/{ printf("%s<br />", $2); }')"
+ echo "${addr:--}"
+}
+default_gw() {
+ ip -$1 route list 0/0 dev $2 2> /dev/null | awk '{print($3); exit(0)}'
+}
+wanif=$(uci -q get network.wan.ifname)
+if [ -n "$(default_gw 4 $wanif)" -o -n "$(default_gw 6 $wanif)" ]; then
+ internet_active="Ja"
+else
+ internet_active="Nein"
+fi
+
+%>
+<table style="width: 100%;">
+<tr><td>
+<fieldset style="min-height: 15.05em;">
+ <legend>System</legend>
+ <table>
+ <tr><th>Name:</th><td><%= ${HOSTNAME} %></td></tr>
+ <tr><th>Modell:</th><td><% cat /tmp/sysinfo/model 2>/dev/null %></td></tr>
+ <tr><th>MAC-Adresse:</th><td><% uci -q get network.mesh.macaddr %></td></tr>
+ <tr><th>Bekannte Knoten:</th><td><%= $((`cat /sys/kernel/debug/batman_adv/bat0/transtable_global | grep '^ [^ ]' | cut -b 39-55 | sort | uniq | wc -l 2>/dev/null`+1)) %></td></tr>
+ <tr><th>Nachbarknoten:</th><td><%= $(cat /sys/kernel/debug/batman_adv/bat0/originators | grep '^[0-9a-f]' | cut -b 37-53 | sort | uniq | wc -l 2>/dev/null) %></td></tr>
+ <tr><th>VPN Aktiv:</th><td><%= ${vpn_active} %></td></tr>
+ <tr><th>Laufzeit:</th><td><%= ${uptime} %></td></tr>
+ <tr><th>Auslastung:</th><td><%= ${load} %></td></tr>
+ <tr><th>Uhrzeit:</th><td><% date %></td></tr>
+ </table>
+</fieldset>
+</td><td>
+<fieldset style="min-height: 15.05em;">
+ <legend>Software</legend>
+ <table>
+ <tr><th>Firmware Version:</th><td><%= ${FIRMWARE_VERSION} %></td></tr>
+ <tr><th>OpenWRT Version:</th><td><%= ${DISTRIB_DESCRIPTION} %></td></tr>
+ <tr><th>Kernel Version:</th><td><% uname -s -m -r %></td></tr>
+ <tr><th>Batman-Adv Version:</th><td><% cat /sys/module/batman_adv/version 2>/dev/null %></td></tr>
+ <tr><th>Fastd Version:</th><td><% fastd --version 2> /dev/null | cut -d' ' -f 2 %></td></tr>
+ </table>
+</fieldset>
+</td></tr>
+<tr><td>
+<fieldset style="min-height: 12.65em;">
+ <legend>Netz: Freifunk</legend>
+ <table>
+ <tr><th>Nutzer:</th><td><% cat /sys/kernel/debug/batman_adv/bat0/transtable_local 2> /dev/null | grep -c 'W' %></td></tr>
+ <tr><th>Empfangen:</th><td><% cat /sys/class/net/br-mesh/statistics/rx_bytes | human_bytes %></td></tr>
+ <tr><th>Gesendet:</th><td><% cat /sys/class/net/br-mesh/statistics/tx_bytes | human_bytes %></td></tr>
+ <tr><th>IPv4 Adressen:</th><td><% addr 4 br-mesh %></td></tr>
+ <tr><th>IPv6 Adressen:</th><td><% addr 6 br-mesh %></td></tr>
+ </table>
+</fieldset>
+</td><td>
+<fieldset style="min-height: 12.65em;">
+ <legend>Netz: WAN</legend>
+ <table>
+ <tr><th>Internet vorhanden:</th><td><%= ${internet_active} %></td></tr>
+ <tr><th>Empfangen:</th><td><% cat /sys/class/net/${wanif}/statistics/rx_bytes | human_bytes %></td></tr>
+ <tr><th>Gesendet:</th><td><% cat /sys/class/net/${wanif}/statistics/tx_bytes | human_bytes %></td></tr>
+ <tr><th>IPv4 Adressen:</th><td><% addr 4 $wanif %></td></tr>
+ <tr><th>IPv6 Adressen:</th><td><% addr 6 $wanif %></td></tr>
+ </table>
+</fieldset>
+</td></tr>
+</table>
+
+<%in /www/ssl/cgi-bin/footer %>
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/logout.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/logout.html
new file mode 100755
index 0000000..40644fe
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/logout.html
@@ -0,0 +1,19 @@
+#!/usr/bin/haserl
+
+<%
+echo -en "Content-Type: text/html\r\n\r\n"
+url="//logout:logout@${HTTP_HOST}/"
+%>
+<html>
+<head>
+ <meta charset="utf-8"/>
+ <meta http-equiv="refresh" content="0; URL=<%= ${url} %>">
+ <meta http-equiv="cache-control" content="no-cache">
+ <meta http-equiv="expires" content="0">
+ <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT">
+ <meta http-equiv="pragma" content="no-cache">
+</head>
+<body>
+ <a href="<%= ${url} %>">Logging out...</a>
+</body>
+</html>
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/password.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/password.html
new file mode 100755
index 0000000..0323836
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/password.html
@@ -0,0 +1,48 @@
+#!/usr/bin/haserl
+
+<%
+# write
+if [ "$REQUEST_METHOD" == "POST" ] ; then
+ if [ "$POST_pass1" == "" ] ; then
+ MSG='<span class="red">Das Passwort darf nicht leer sein!</span>'
+ else
+ (echo "$POST_pass1"; sleep 1; echo "$POST_pass2") | passwd &>/dev/null
+ if [ $? -eq 0 ]; then
+ restart_uhttpd=1
+ MSG='<span class="green">Passwort geändert!</span>'
+ else
+ MSG='<span class="red">Die Passwörter stimmen nicht überein!</span>'
+ fi
+ fi
+fi
+%>
+<%in /www/ssl/cgi-bin/header %>
+<%in /www/ssl/cgi-bin/helpers %>
+<% show_msg %>
+<form method="POST">
+<input type="text" name="username" value="root" style="display: none;" />
+<table style="width: 100%;">
+<tr><td>
+<fieldset>
+ <legend>Passwort</legend>
+ <table>
+ <tr><th>Neues Passwort:</th><td><input type="password" name="pass1" value="" /></td></tr>
+ <tr><th>Bestätigung:</th><td><input type="password" name="pass2" value="" /></td></tr>
+ <tr><td colspan="2"></td></tr>
+ <tr><td colspan="2">
+ Das Passwort ist für den Zugriff auf die Weboberfläche des Routers<br /> und auch den Zugriff per SSH.
+ Der Benutzername ist 'root'.
+ </td></tr>
+ </table>
+</fieldset>
+</td></tr>
+</table>
+<input type="submit" style="margin-top: 5px; margin-left: 3px;" />
+</form>
+<%in /www/ssl/cgi-bin/footer %>
+<%
+#force instant password change
+if [ "$restart_uhttpd" == "1" ] ; then
+ /etc/init.d/uhttpd restart 2>/dev/null
+fi
+%>
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/ports.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/ports.html
new file mode 100755
index 0000000..6dbe98f
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/ports.html
@@ -0,0 +1,97 @@
+#!/usr/bin/haserl
+
+<%
+# write
+if [ "$REQUEST_METHOD" == "POST" ] ; then
+ sed -i '/^.*# set via WebUI/d' /etc/network.mode
+ echo "ETHMODE=\"${POST_mode}\" # set via WebUI" >> /etc/network.mode
+ cp /rom/etc/sysctl.conf /etc/sysctl.conf
+ cp /rom/etc/config/network /etc/config/network
+ do_reboot=1
+ MSG='<span class="green">Port Modus geändert! Router startet neu...</span>'
+fi
+%>
+<%in /www/ssl/cgi-bin/header %>
+<%in /www/ssl/cgi-bin/helpers %>
+<% show_msg %>
+<form method="POST">
+<table style="width: 100%;">
+<% if swconfig list | grep -q switch0 ; then %>
+ <%# Device has a switch %>
+ <tr><td>
+ <fieldset>
+ <legend>Switch</legend>
+ <table>
+ <tr>
+ <%
+ swconfig dev switch0 show | grep "\t*link:" | while read line ; do
+ line=$(echo "$line" | tr -d '\n' | tr -d '\t')
+ port=$(echo "$line" | sed 's/.* port:\([^ ]*\) .*/\1/')
+ link=$(echo "$line" | sed 's/.* link:\([^ ]*\).*/\1/')
+ if [ "$link" == "up" ] ; then
+ speed=$(echo "$line" | sed 's/.* speed:\([^ ]*\).*/\1/')
+ duplex=$(echo "$line" | sed 's/.* \([^ ]*-duplex\).*/\1/')
+ else
+ speed="no link"
+ duplex=""
+ fi
+ port="Port ${port}"
+ echo "<td class=\"swport\">"
+ echo "<span class=\"port\">${port}</span><br />"
+ echo "<img src=\"/port_${link}.png\" alt=\"${link}\" /><br />"
+ echo "<span class=\"stat\">$speed<br />$duplex</span>"
+ echo "</td>"
+ done
+ %>
+ </tr>
+ </table>
+ </fieldset>
+ </td></tr>
+<% fi %>
+<% if grep -q network.mode /etc/network.$(uci -q get board.model.name) ; then %>
+ <%
+ # Device has only one or two ports and makes use of /etc/network.mode
+ . /etc/network.mode
+ %>
+ <tr><td>
+ <fieldset>
+ <legend>Ethernet Anschluss</legend>
+ <table>
+ <tr>
+ <th style="width: 1em;">Anschluss Modus:</th>
+ <td>
+ <select name="mode">
+ <% if grep ETHMODE /etc/network.$(uci -q get board.model.name) | grep -q WAN ; then %>
+ <option value="WAN" <% [ "$ETHMODE" == "WAN" ] && echo -n selected %>>WAN</option>
+ <% fi %>
+ <% if grep ETHMODE /etc/network.$(uci -q get board.model.name) | grep -q CLIENT ; then %>
+ <option value="CLIENT" <% [ "$ETHMODE" == "CLIENT" ] && echo -n selected %>>Client</option>
+ <% fi %>
+ <option value="BATMAN" <% [ "$ETHMODE" == "BATMAN" ] && echo -n selected %>>BATMAN</option>
+ </select>
+ </td>
+ </tr>
+ <tr><td colspan="2"><input type="submit" name="change_mode" /></td></tr>
+ <tr><td colspan="2"></td></tr>
+ <tr><td colspan="2">
+ WAN: Knoten stellt über Ethernet Anschluss Verbindung zum Internet her.<br />
+ Client: Normale Clients stellen über Ethernet Anschluss des Knotens Verbindung zum Freifunk Netz her.<br />
+ BATMAN: Knoten stellt über Ethernet Anschluss Verbindung anderen MESH Knoten her.<br /><br />
+
+ Wenn diese Einstellung verändert wird, wird eine evtl. vorhandene manuelle Netzwerkkonfiguration in der
+ <tt>/etc/config/network</tt> überschrieben.<br />
+ Anschließend wird der Router neugestartet.
+ </td></tr>
+ </table>
+ </fieldset>
+ </td></tr>
+<% fi %>
+</table>
+</form>
+<%in /www/ssl/cgi-bin/footer %>
+<%
+# write
+if [ "$do_reboot" == "1" ] ; then
+ reboot
+fi
+%>
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/reboot.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/reboot.html
new file mode 100755
index 0000000..eddc4ff
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/reboot.html
@@ -0,0 +1,35 @@
+#!/usr/bin/haserl
+
+<%
+# prepare
+if [ "$REQUEST_METHOD" == "POST" ] ; then
+ if [ "$POST_reboot" != "" ] ; then
+ do_reboot=1
+ MSG='<span class="green">Router wird neugestartet...</span>'
+ fi
+fi
+%>
+<%in /www/ssl/cgi-bin/header %>
+<%in /www/ssl/cgi-bin/helpers %>
+<% show_msg %>
+<form method="POST">
+<table style="width: 100%;">
+<tr><td>
+<fieldset>
+ <legend>Router neustarten</legend>
+ <table>
+ <tr><td colspan="2"><input type="submit" name="reboot" value="Router neustarten" /></td></tr>
+ <tr><td colspan="2"></td></tr>
+ <tr><td colspan="2">Der Neustart dauert etwa 2 Minuten.</td></tr>
+ </table>
+</fieldset>
+</td></tr>
+</table>
+</form>
+<%in /www/ssl/cgi-bin/footer %>
+<%
+# write
+if [ "$do_reboot" == "1" ] ; then
+ reboot
+fi
+%>
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
new file mode 100755
index 0000000..752633f
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/settings.html
@@ -0,0 +1,83 @@
+#!/usr/bin/haserl
+
+<%
+# write
+if [ "$REQUEST_METHOD" == "POST" ] ; then
+ #check for valid hostname as specified in rfc 1123
+ #see http://stackoverflow.com/a/3824105
+ regex='^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])'
+ regex=$regex'(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$'
+ if [ "${#POST_hostname}" -ge "255" ] ; then
+ MSG='<span class="red">Knotenname ist länger als 255 Zeichen!</span>'
+ elif ! echo -n "$POST_hostname" | egrep -q "$regex"; then
+ MSG='<span class="red">Knotenname enthält ungültige Zeichen!</span>'
+ else
+ # Allgemeine Einstellungen
+ uci set -q "system. at system[0].hostname=${POST_hostname}"
+ uci get -q 'system. at system[0].hostname' > /proc/sys/kernel/hostname
+ uci set -q "system. at system[0].description=${POST_description}"
+ uci set -q "system. at system[0].latitude=${POST_latitude}"
+ uci set -q "system. at system[0].longitude=${POST_longitude}"
+ uci set -q "system. at system[0].position_comment=${POST_position_comment}"
+ uci set -q "system. at system[0].contact=${POST_contact}"
+
+ # Bandbreitenbegrenzung
+ if [ "$POST_traffic_limit" == "on" ] ; then
+ uci set -q "simple-tc.example.enabled=1"
+ else
+ uci set -q "simple-tc.example.enabled=0"
+ fi
+ uci set -q "simple-tc.example.limit_ingress=${POST_limit_ingress}"
+ uci set -q "simple-tc.example.limit_egress=${POST_limit_egress}"
+
+ uci commit
+ MSG='<span class="green">Daten gespeichert! - Bitte Router neustarten.</span>'
+ fi
+fi
+%>
+<%in /www/ssl/cgi-bin/header %>
+<%in /www/ssl/cgi-bin/helpers %>
+<%
+# read
+if [ "$(uci get -q 'simple-tc.example.enabled')" == "1" ] ; then
+ traffic_checked="checked"
+else
+ traffic_checked=""
+fi
+%>
+<% show_msg %>
+<form method="POST">
+<table style="width: 100%;">
+<tr><td>
+<fieldset style="min-height: 13em;">
+ <legend>Allgemeine Einstellungen</legend>
+ <table>
+ <tr><th>Knotenname:</th><td><input type="text" name="hostname" value="<%= ${HOSTNAME} %>" /></td></tr>
+ <tr><th>Knotenbeschreibung:</th><td><input type="text" name="description" value="<%= $(uci get -q 'system. at system[0].description') %>" /></td></tr>
+ <tr><th>GPS Breitengrad:</th>
+ <td><input type="text" name="latitude" value="<%= $(uci get -q 'system. at system[0].latitude') %>" /></td>
+ <td rowspan="2" style="vertical-align: middle;">
+ <button type="button" style="height: 100%; width: 126px; margin-left: 5px;" onclick="window.open('/map.html', '_blank', 'location=0,status=0,scrollbars=1,width=400,height=300');">Position auf Karte anzeigen / setzen</button>
+ </td>
+ </tr>
+ <tr><th>GPS Längengrad:</th><td><input type="text" name="longitude" value="<%= $(uci get -q 'system. at system[0].longitude') %>" /></td></tr>
+ <tr><th>Standortbeschreibung:</th><td><input type="text" name="position_comment" value="<%= $(uci get -q 'system. at system[0].position_comment') %>" /></td></tr>
+ <tr><th>E-Mail Adresse:</th><td><input type="email" name="contact" value="<%= $(uci get -q 'system. at system[0].contact') %>" /></td></tr>
+ </table>
+</fieldset>
+</td><td>
+<fieldset style="min-height: 13em;">
+ <legend>Bandbreitenkontrolle</legend>
+ <table>
+ <tr><th>Aktiviert:</th><td>
+ <input type="checkbox" name="traffic_limit" <%= ${traffic_checked} %>>
+ </td></tr>
+ <tr><th>Freifunk Download:</th><td><input type="text" name="limit_ingress" value="<%= $(uci get -q 'simple-tc.example.limit_ingress') %>" /></td></tr>
+ <tr><th>Freifunk Upload:</th><td><input type="text" name="limit_egress" value="<%= $(uci get -q 'simple-tc.example.limit_egress') %>" /></td></tr>
+ </table>
+</fieldset>
+</td></tr>
+</table>
+<input type="submit" style="margin-top: 5px; margin-left: 3px;" />
+</form>
+<%in /www/ssl/cgi-bin/footer %>
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/upgrade.html b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/upgrade.html
new file mode 100755
index 0000000..601d97b
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/upgrade.html
@@ -0,0 +1,77 @@
+#!/usr/bin/haserl --upload-dir=/tmp --upload-limit=12000
+
+<%
+# prepare
+if [ "$REQUEST_METHOD" == "POST" ] ; then
+ if [ "$POST_reset" != "" ] ; then
+ # reset
+ if [ "$FORM_really_reset" == "on" ] ; then
+ do_reset=1
+ MSG='<span class="green">Router wird zurückgesetzt und anschließend neugestartet...</span>'
+ fi
+ elif [ "$POST_upgrade" != "" ] ; then
+ # upgrade
+ if [ ! -f "$HASERL_firmware_path" ] ; then
+ MSG='<span class="red">Firmware Datei nicht gefunden!</span>'
+ elif [ "$(du -k "$HASERL_firmware_path" | cut -f1)" == "0" ] ; then
+ MSG='<span class="red">Firmware Datei ist leer!</span>'
+ elif ! error=$(sysupgrade -T "$HASERL_firmware_path") ; then
+ MSG="<span class=\"red\">Firmware Datei ungültig: <tt>${error}</tt></span>"
+ else
+ if [ "$POST_keep_config" == "on" ] ; then
+ args=""
+ else
+ args="-n"
+ fi
+ do_sysupgrade=1
+ MSG='<span class="green">Firmware Upgrade wird gestartet...</span>'
+ fi
+ fi
+fi
+%>
+<%in /www/ssl/cgi-bin/header %>
+<%in /www/ssl/cgi-bin/helpers %>
+<% show_msg %>
+<form method="POST" enctype="multipart/form-data">
+<table style="width: 100%;">
+<tr><td>
+<fieldset style="min-height: 9em;">
+ <legend>Manuelles Upgrade</legend>
+ <table>
+ <tr><th style="width: 1em;">Firmware Image:</th><td><input type="file" name="firmware" /></td></tr>
+ <tr><th>Konfiguration erhalten:</th><td><input type="checkbox" name="keep_config" checked /></td></tr>
+ <tr><td colspan="2"><input type="submit" name="upgrade" value="Upgrade" /></td></tr>
+ <tr><td colspan="2"></td></tr>
+ <tr><td colspan="2">Hier kann ein Freifunk-Image verwendet werden (*-sysupgrade.bin) oder die Firmware des Routerherstellers.</td></tr>
+ </table>
+</fieldset>
+</td><td>
+<fieldset style="min-height: 9em;">
+ <legend>Router zurücksetzen</legend>
+ <table>
+ <tr><th style="width: 1em;">Wirklich zurücksetzen:</th><td>
+ <input type="checkbox" name="really_reset">
+ </td></tr>
+ <tr><td colspan="2"><input type="submit" name="reset" value="Zurücksetzen" /></td></tr>
+ <tr><td colspan="2"></td></tr>
+ <tr><td colspan="2">Alle Einstellungen werden zurückgesetzt und der Router startet neu.</td></tr>
+ </table>
+</fieldset>
+</td></tr>
+</table>
+</form>
+<%in /www/ssl/cgi-bin/footer %>
+<%
+# write
+if [ "$do_reset" == "1" ] ; then
+ echo "<pre>"
+ echo y | firstboot
+ reboot
+ echo "</pre>"
+elif [ "$do_sysupgrade" == "1" ] ; then
+ echo "<pre>"
+ echo "# sysupgrade $args $HASERL_firmware_path"
+ sysupgrade $args $HASERL_firmware_path
+ echo "</pre>"
+fi
+%>
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
new file mode 100755
index 0000000..26122ec
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/wifiscan.html
@@ -0,0 +1,52 @@
+#!/usr/bin/haserl
+
+<%in /www/ssl/cgi-bin/header %>
+<table style="width: 100%">
+<tr><td>
+<fieldset>
+ <legend>Wifi Scan</legend>
+ <table class="wifitable">
+ <tr>
+ <th>Name</th>
+ <th>Kanal</th>
+ <th>Signal</th>
+ <th>Typ</th>
+ </tr>
+
+<%
+IFSOLD="$IFS"
+IFS="
+"
+for line in $(iw dev w2mesh scan 2> /dev/null | grep '^BSS \|SSID\|set: channel\|signal\|capability\|MESH ID') ; do
+ line=$(echo "$line" | tr -d '\n')
+ if echo "$line" | grep -q "^BSS " && [ "$ssid" != "" ] ; then
+ echo "<tr><td>${ssid}</td><td>${channel}</td><td>${signal}</td><td>${type}</td></tr>"
+ ssid="???"
+ channel="???"
+ signal="???"
+ type="???"
+ elif echo "$line" | grep -q "SSID:" ; then
+ ssid=$(echo "$line"| sed 's/\tSSID: \(.*\)$/\1/')
+ elif echo "$line" | grep -q "signal:" ; then
+ signal=$(echo "$line"| sed 's/\tsignal: \(.*\)$/\1/')
+ elif echo "$line" | grep -q "channel " ; then
+ channel=$(echo "$line"| sed 's/.* channel \(.*\)$/\1/')
+ elif echo "$line" | grep -q "capability:" ; then
+ if echo "$line" | grep -q "ESS" ; then
+ type="Access Point"
+ elif echo "$line" | grep -q "IBSS" ; then
+ type="AdHoc"
+ else
+ type="???"
+ fi
+ fi
+done
+IFS="$IFSOLD"
+echo "<tr><td>${ssid}</td><td>${channel}</td><td>${signal}</td><td>${type}</td></tr>"
+%>
+ </table>
+</fieldset>
+</td></tr>
+</table>
+
+<%in /www/ssl/cgi-bin/footer %>
diff --git a/src/packages/fff/fff-web/files/www/ssl/freifunk.svg b/src/packages/fff/fff-web/files/www/ssl/freifunk.svg
new file mode 100644
index 0000000..ae01585
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/freifunk.svg
@@ -0,0 +1,8 @@
+<svg xmlns="http://www.w3.org/2000/svg" version="1.2" width="81" height="60" viewBox="0 0 170 165" preserveAspectRatio="true">
+ <g transform="matrix(1.57375 0 0 1.57375 -52.396 -15.488)">
+ <circle cx="36" cy="54" r="22" transform="matrix(1.47762 0 0 1.5065 -3.122 -2.435)" fill="none" stroke="#de2c68" stroke-width="1.14544892"/>
+ <circle cx="74" cy="44" r="22" transform="matrix(1.59505 0 0 1.62233 -10.072 -9.178)" fill="none" stroke="#de2c68" stroke-width="1.06239557"/>
+ <circle cx="74" cy="44" r="29" transform="matrix(1.58313 0 0 1.59864 -9.34 -8.136)" fill="none" stroke="#de2c68" stroke-width="5.81192684"/>
+ <path fill="#fc3" d="M42.23 62.95h-7.247l5.798 5.497H29.187v5.495H40.78l-5.797 5.495h7.247l8.696-8.243M117.514 85.333l-9.095-9.414h19.706v-9.414H108.42l9.094-9.414h-12.127l-13.644 14.12 13.644 14.12"/>
+ </g>
+</svg>
diff --git a/src/packages/fff/fff-web/files/www/ssl/index.html b/src/packages/fff/fff-web/files/www/ssl/index.html
new file mode 100644
index 0000000..878abbc
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/index.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+ <meta charset="utf-8"/>
+ <meta http-equiv="refresh" content="0; URL=/cgi-bin/home.html">
+ <meta http-equiv="cache-control" content="no-cache">
+ <meta http-equiv="expires" content="0">
+ <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT">
+ <meta http-equiv="pragma" content="no-cache">
+</head>
+<body>
+ <a href="/cgi-bin/home.html">Redirecting...</a>
+</body>
+</html>
diff --git a/src/packages/fff/fff-web/files/www/ssl/port_down.png b/src/packages/fff/fff-web/files/www/ssl/port_down.png
new file mode 100644
index 0000000000000000000000000000000000000000..25ea172324c04e222c575cd01089e36a5c416c3e
GIT binary patch
literal 982
zcmV;{11bE8P)<h;3K|Lk000e1NJLTq0015U000;W1^@s6?P*QF00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyq@
z4g)HQF(jJ+00UM at L_t(Y$HkUmZyQArhM$?;bL?0mkdlZmq)1d1p;bxM3L$~`2IM~=
zBz|B1L5nIxnj#`Ziz^6xC{m#kO(Mr>9H+ML&bxfr^ZA at RC#jIY(rUf8bMxLi^Umzb
z#>R%{fB0E|&%gL=#<qWjr&Sx(mfzgH7l6kGXE{_+R29U}1oVJ&BfR(ci!k>7Ojtw&
zV-zm{TCtzanQfB9=LRGI&j3|57}em}dme1vr}emn_htK9ZI1QzbynWKOcd4d-jj~f
zg6;G>;q$#O4Pz|U7(@gC;w0h8A5SVl0pfVbpHH6#ry>|t=As%Z5<*{aUtoNiX$bA0
z-{;QVJ3N2>H))yz&^vj_y>GYh-XS8W2+PY$e0Y0}*5ejCzwOXy)LFZ6lMmKz5=Ave
z!+wc$iE&`02*RVEAM)(kU!-YD94G9z57^%R2 at x>HV2q+h>2x~$vhzEG!H^_L=ys3U
z+}fml&_+ZN(cr#-U72IalpDth0NX!4Vs~#pXJ}MI3bLUJySsbr?d at Z&<;L|@78e)k
zc8^(lb14&_pJHvtiz#Ry96IN6wHj4KB?p(OLH>*^p8&=P!Z^piqMS;M2`^;8MipZw
zET at 3Az+A}x16Z|_TJtmOxVS4IF!C-Fn_`R!A5;wSDdsurab0Kcc;`#xY}Mz45-NmR
zi+LqyS`PX6S?1iB5V?Z?ama0PF+mRTcB2VnHOgC;`ZVT7c!HonFe2GnXuoI at r%@hi
zqoEIYHzUWTjwRFL8Y}tQl at 807`V8ZU`drFzXlc|(4C07JE#*P$9omOAvfhfZq3bzZ
z30TLBiz7&DA}%$dp+pw0UOvQ)l&dQpoHJZm>EN95?#cl#`%xA#pQ$>^8K3UhcCwt#
zgNQKSYy$B9>U#hT`H0P(VDsI0{&h01UYm|w6xqC-W}Hsb8%Yw=sL%7s$Dh*a9B_Ep
zDW5VP;<)-0vet6z)@@#2cq302oK?r!G#C!3*M}^;w!l|kem&!?%&VrL$nvk-JDSb7
z>gMp`=#b`olUl7lDX~ngDv~3s=%ndn`_4I%B<8qxL|izV&pwX}&7^nIgOlEQ7oH1V
zg{sP_A{77jUUi;@EsEt;oL$&z#>K$`e1HFk|NMIU5B8^)T!cwsE&u=k07*qoM6N<$
Ef)7g4YybcN
literal 0
HcmV?d00001
diff --git a/src/packages/fff/fff-web/files/www/ssl/port_up.png b/src/packages/fff/fff-web/files/www/ssl/port_up.png
new file mode 100644
index 0000000000000000000000000000000000000000..e06303791092800beef5f08cd3dd9ba70cf68fa7
GIT binary patch
literal 1401
zcmV-<1%~>GP)<h;3K|Lk000e1NJLTq0015U000;W1^@s6?P*QF00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyq@
z4;&z+e5ot|00j9-L_t(Y$HkV*Z&Xzr$3N$Br!##>U(?PE^f4_3Q6gvzMmK5{s5|3E
zV>Fn!FuE|tm7&pvYySmFOkCkw5;O`?Bmp0ENGJrUZ7FSs&J5|y)Xse$7k4 at gbc&jo
zcs4iZp5Og_ at AvzA9dYvHNyGoJG{BLghqpO4|Ke?{gVvVce)C-fylL<thf+wSlpxHu
zfCdP|0Amd1pD;G&fv^Z6P)cG1fNXJIf7We1&;46LBH(R6rBo;>BhSY0)43nXUCv?5
zR{L12jmgPLhKEM5tQf`^{J?LrHCq|e!jaNe1X^FN=W%292JgP}9#Sf#lqjVz#!#tN
zDBUSCKR3tl&<Iip5CSD*xSmT8hTBNJg=r+MU8`~Wo71eUEaUq=AH4q|e&FM}E^FmA
zR#%s)RI80}%v_ye=IRWIM4W?<J<frHk7HRe0;jfx^cKbj5JJ-)@1P^m$;9|xUVrTk
zj4>1nc`DT^wo}8lZ9LBhAQ4Zn|Iq`y`1~Y`w-(6fm-+t88Fmg0(chOu2uXM!>y|MN
z0-s{B$n5Ma<KyEL3I(JTgvOw?Li-w}6iR8*sh#ZIvkyyKEG;iGH$RKxH~>^CRg(S5
zdh(fjSnJJAGjz35=E}?!f*@eEm<J#`nkAh|qf`Xi7K<}7oTay?4}g{Y5_9vj6iWp<
zJ36C0Q38R8%FCDsGj<$@Vxh#?=orOPfp~iy6N2M8R5zk{O0C(bg{)P|tZ!712yQOk
zWVLX+9=XV$milh3nQiMBeBZ-$TxvC&bY_s`U=lCzSYM9-{lIH{xT8}Ngf4*#VHlFX
zy>d5C>JEicQ6+|EOE~Z8TtN^JghBL?jA9tG+Q>~`rc^57dI3voh9DH|pV-NvgA<J(
zZeHOgW2GXgn?M_CG;e|+AP6F0DWW=+LUQWsQ~YrLS4v(FT7<~Z!2~uRO&#ZzBZqKZ
zbr0}n+?7-aAtJ`6CF8A2DUFsIAq8E7d+}0TWMYPd_UVjE78aMeHor!^ErDoiqXWql
zy*<74CKPqOkZ_yi+Kh=1h<Y+uS|gR>tFt#av)IR;M+WHWP;_-Fex1IKt$kwc4-s!m
zG!m!3FUdf1pdqzVR)g{V9b4bs8nmTRUL;#!1fPC!k+aiF3?&~TJCdZcvz at aSu2WM<
z`ZFCIej<g|8f|HMx_cQMOk;q{mvhn2Te?wB+e|0Zh^u8;08D-UGcyZ!$fmo=jtn5A
z;`F(z*tScuC&9622icoV0|wi+$z*mRfUDQ9F+Dxakt0Xx-qF+4u^v>%2G;%z`Rvpx
zYkvl0)7?yrrKxN<ocrZ>JU?LnXb&I1d4R5VtKKLCu~-`d$ma{}fA}$;Ja~vqCKGk9
z_44+NH*t$)o2e6**l-LJLw)QXOR;pj%*EV1p)pK8HOeQ)p2pJm&SU}H&KDRR877hF
zKx>WbI#k!oxJ|RU<vcEy9i~o9v*8%VhkMyGwv+kgJ6z1oVGO+f!fxJvX&-iN9lM^0
zn+f^bZ<pB7+eOW-;RYVDn8k*(exJH6q%M_hrcUH=J=i_e&%{_d0-c`20LKnzIgoP6
z<#H`cZ`W|TJ~W!@`M!zQQtIO;a`=H at G}F!Qu at nm{YYou1j%IoJnO*<rZrAc2V_M&C
z^p}?uo)5#RZpO#b+$vPLkoyAzy!zY_1K|?q&n^Au*W14Uf*Mc=Aj6}|00000NkvXX
Hu0mjfviOV$
literal 0
HcmV?d00001
diff --git a/src/packages/fff/fff-web/files/www/ssl/style.css b/src/packages/fff/fff-web/files/www/ssl/style.css
new file mode 100644
index 0000000..08afc14
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/style.css
@@ -0,0 +1,215 @@
+* {
+ margin: 0px;
+}
+
+body {
+ font-family: verdana, helvetica, sans-serif;
+ font-size: 13px;
+ padding: 0px;
+ background-color: #ffffff;
+ color: #222222;
+}
+
+a {
+ background-color: inherit;
+ color: #007ee0;
+}
+
+a:hover {
+ text-decoration: none;
+}
+
+p {
+ text-align: justify;
+ margin-bottom: 15px;
+ line-height: 22px;
+}
+
+ul {
+ list-style: disc;
+ padding-left: 15px;
+ margin-bottom: 15px;
+}
+
+h3 {
+ font-size: 20px;
+ margin-bottom: 30px;
+}
+
+h4 {
+ font-size: 13px;
+ margin-bottom: 5px;
+}
+
+#header {
+ color: #222;
+ padding: 5px 40px;
+}
+
+#header h1 {
+ font-size: 30px;
+}
+
+#header h2 {
+ font-size: 14px;
+}
+
+#menu {
+ padding: 5px 40px 0px 40px;
+ margin-bottom: 30px;
+ color: #222222;
+ background-color: #f5f5f5;
+ border-bottom: solid 1px #DADADA;
+}
+
+#menu div {
+ clear: both;
+}
+
+#menu ul {
+ display: block;
+ position: relative;
+ top: 1px;
+ list-style: none;
+ padding: 0px;
+ margin-bottom: 0px;
+}
+
+#menu ul li {
+ position: relative;
+ float: left;
+ border: solid 1px #dadada;
+ border-bottom: 0px;
+ margin-right: 5px;
+}
+
+#menu ul li a {
+ display: block;
+ padding: 5px 10px 8px 10px;
+ text-decoration: none;
+ background-color: inherit;
+ color: #333333;
+}
+
+#menu ul li a:hover {
+ background-color: #d22755;
+ color: #fff;
+}
+
+#menu ul li.active, #menu ul li.active a, #menu ul li.active a:hover {
+ background-color: #ffffff;
+ color: #333333;
+}
+
+#container {
+ margin: 0px 40px 0px 40px;
+}
+
+#primarycontainer {
+ float: left;
+ margin-right: -200px;
+ width: 100%;
+}
+
+#primarycontent p {
+ margin-bottom: 20px;
+}
+
+#secondarycontent {
+ float: right;
+ width: 200px;
+}
+
+#footer {
+ text-align: center;
+ margin: 20px 0px 0px 0px;
+ padding-top: 15px;
+ border-top: solid 1px #DADADA;
+ clear: both;
+ color: #DADADA;
+ font-size: 8px;
+}
+
+#footer a {
+ color: #DADADA;
+ text-decoration: none;
+}
+
+.clearit {
+ clear: both;
+ height: 1px;
+}
+
+/* my */
+fieldset th {
+ text-align: right;
+ vertical-align: top;
+}
+
+.wifitable th {
+ text-align: center;
+}
+
+.wifitable td, .wifitable th {
+ padding-right: 10px;
+}
+
+form fieldset th {
+ vertical-align: middle;
+}
+
+td {
+ vertical-align: top;
+}
+
+fieldset input[type=text], fieldset input[type=email], fieldset input[type=password], fieldset input[type=file] {
+ width: 20em;
+}
+
+input, button, select {
+ font-size: 13px;
+}
+
+input[type=text], input[type=email], input[type=password], input[type=number] {
+ border: 1px solid #DADADA;
+}
+
+.msg {
+ border: 1px solid #DADADA;
+ font-weight: bold;
+ margin: -10px 3px 10px;
+ padding: 5px 10px;
+}
+
+tt {
+ font-weight: normal;
+}
+
+.msg .red {
+ color: red;
+}
+
+.msg .green {
+ color: green;
+}
+
+pre {
+ margin: 0 43px;
+}
+
+.swport {
+ width: 80px;
+ text-align: center;
+}
+
+.swport .port {
+ font-weight: bold;
+}
+
+.swport img {
+ margin-top: 8px;
+}
+
+.swport .stat {
+ font-size: 10px;
+}
--
2.7.1
Mehr Informationen über die Mailingliste franken-dev