summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-splash
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2008-05-08 15:37:41 +0000
committerSteven Barth <steven@midlink.org>2008-05-08 15:37:41 +0000
commitaa9ccf77c6648515ba58c37b9345cdbd561028db (patch)
treeb0270202d47b6c5e179f8475302bb3ef0d1c9402 /applications/luci-splash
parenta3a51464fd8cffa6d18fa3f18be9c699901abd0d (diff)
* Mördercommit ;-)
* Major Repository Reorganisation * API 0.4 Softfreeze to come
Diffstat (limited to 'applications/luci-splash')
-rw-r--r--applications/luci-splash/Makefile2
-rw-r--r--applications/luci-splash/root/etc/config/luci_splash2
-rw-r--r--applications/luci-splash/root/etc/cron.minutely/luci_splash2
-rw-r--r--applications/luci-splash/root/etc/init.d/luci_splash85
-rw-r--r--applications/luci-splash/root/etc/luci_splash_httpd.conf1
-rw-r--r--applications/luci-splash/root/usr/lib/luci-splash/htdocs/cgi-bin/index.cgi52
-rw-r--r--applications/luci-splash/root/usr/lib/luci-splash/htdocs/index.html10
-rw-r--r--applications/luci-splash/root/www/cgi-bin/luci_splash.cgi4
-rw-r--r--applications/luci-splash/src/controller/controller.lua19
-rw-r--r--applications/luci-splash/src/model/cbi/admin_services/splash.lua30
-rw-r--r--applications/luci-splash/src/model/menu/50luci-splash.lua2
-rw-r--r--applications/luci-splash/src/model/view/splash/splash.htm31
-rw-r--r--applications/luci-splash/src/model/view/splash_splash/index.htm2
-rw-r--r--applications/luci-splash/src/model/view/splash_splash/splash.htm7
14 files changed, 249 insertions, 0 deletions
diff --git a/applications/luci-splash/Makefile b/applications/luci-splash/Makefile
new file mode 100644
index 000000000..81a96f6a8
--- /dev/null
+++ b/applications/luci-splash/Makefile
@@ -0,0 +1,2 @@
+include ../../build/config.mk
+include ../../build/module.mk \ No newline at end of file
diff --git a/applications/luci-splash/root/etc/config/luci_splash b/applications/luci-splash/root/etc/config/luci_splash
new file mode 100644
index 000000000..c4cfef5dd
--- /dev/null
+++ b/applications/luci-splash/root/etc/config/luci_splash
@@ -0,0 +1,2 @@
+config core general
+ option leasetime 1 \ No newline at end of file
diff --git a/applications/luci-splash/root/etc/cron.minutely/luci_splash b/applications/luci-splash/root/etc/cron.minutely/luci_splash
new file mode 100644
index 000000000..eae429474
--- /dev/null
+++ b/applications/luci-splash/root/etc/cron.minutely/luci_splash
@@ -0,0 +1,2 @@
+#!/bin/sh
+[ "$(date +%M | cut -c2)" == "5" ] && luci-splash sync \ No newline at end of file
diff --git a/applications/luci-splash/root/etc/init.d/luci_splash b/applications/luci-splash/root/etc/init.d/luci_splash
new file mode 100644
index 000000000..20f7865fd
--- /dev/null
+++ b/applications/luci-splash/root/etc/init.d/luci_splash
@@ -0,0 +1,85 @@
+#!/bin/sh /etc/rc.common
+START=70
+
+iface_add() {
+ local cfg="$1"
+
+ config_get net "$cfg" network
+ [ -n "$net" ] || return 0
+
+ config_get iface "$net" ifname
+ [ -n "$iface" ] || return 0
+ iface="${iface%%:*}"
+
+ config_get ipaddr "$net" ipaddr
+ [ -n "$ipaddr" ] || return 0
+
+ config_get netmask "$net" netmask
+ [ -n "$netmask" ] || return 0
+
+ eval "$(ipcalc.sh $ipaddr $netmask)"
+
+ iptables -t nat -A luci_splash -i "$iface" -s "$NETWORK/$PREFIX" -j luci_splash_portal
+ iptables -t nat -A luci_splash_portal -i "$iface" -s "$NETWORK/$PREFIX" -d "$ipaddr" -p tcp -m multiport --dports 22,80,443 -j RETURN
+}
+
+blacklist_add() {
+ local cfg="$1"
+
+ config_get mac "$cfg" mac
+ [ -n "$mac" ] && iptables -t nat -A luci_splash_portal -m mac --mac-source "$mac" -j DROP
+}
+
+whitelist_add() {
+ local cfg="$1"
+
+ config_get mac "$cfg" mac
+ [ -n "$mac" ] && iptables -t nat -A luci_splash_portal -m mac --mac-source "$mac" -j RETURN
+}
+
+start() {
+ ### Read chains from config
+ include /lib/network
+ scan_interfaces
+ config_load luci_splash
+
+ ### Create subchains
+ iptables -t nat -N luci_splash
+ iptables -t nat -N luci_splash_portal
+ iptables -t nat -N luci_splash_leases
+
+ ### Build the main and portal rule
+ config_foreach blacklist_add blacklist
+ config_foreach whitelist_add whitelist
+ config_foreach iface_add iface
+
+ ### Build the portal rule
+ iptables -t nat -A luci_splash_portal -p udp --dport 53 -j RETURN
+ iptables -t nat -A luci_splash_portal -j luci_splash_leases
+
+ ### Build the leases rule
+ iptables -t nat -A luci_splash_leases -p tcp --dport 80 -j REDIRECT --to-ports 8082
+ iptables -t nat -A luci_splash_leases -j DROP
+
+ ### Start the splash httpd
+ httpd -c /etc/luci_splash_httpd.conf -p 8082 -h /usr/lib/luci-splash/htdocs
+
+ ### Hook in the chain
+ iptables -t nat -A prerouting_rule -j luci_splash
+}
+
+stop() {
+ ### Hook out the chain
+ iptables -t nat -D prerouting_rule -j luci_splash
+
+ ### Clear subchains
+ iptables -t nat -F luci_splash_leases
+ iptables -t nat -F luci_splash_portal
+ iptables -t nat -F luci_splash
+
+ ### Delete subchains
+ iptables -t nat -X luci_splash_leases
+ iptables -t nat -X luci_splash_portal
+ iptables -t nat -X luci_splash
+}
+
diff --git a/applications/luci-splash/root/etc/luci_splash_httpd.conf b/applications/luci-splash/root/etc/luci_splash_httpd.conf
new file mode 100644
index 000000000..6007e80db
--- /dev/null
+++ b/applications/luci-splash/root/etc/luci_splash_httpd.conf
@@ -0,0 +1 @@
+E404:index.html \ No newline at end of file
diff --git a/applications/luci-splash/root/usr/lib/luci-splash/htdocs/cgi-bin/index.cgi b/applications/luci-splash/root/usr/lib/luci-splash/htdocs/cgi-bin/index.cgi
new file mode 100644
index 000000000..3bff85ee5
--- /dev/null
+++ b/applications/luci-splash/root/usr/lib/luci-splash/htdocs/cgi-bin/index.cgi
@@ -0,0 +1,52 @@
+#!/usr/bin/haserl --shell=luac
+package.path = "/usr/lib/lua/?.lua;/usr/lib/lua/?/init.lua;" .. package.path
+package.cpath = "/usr/lib/lua/?.so;" .. package.cpath
+
+require("ffluci.http")
+require("ffluci.sys")
+require("ffluci.model.uci")
+
+local srv
+local net
+local ip = ffluci.http.remote_addr()
+for k, v in pairs(ffluci.model.uci.sections("network")) do
+ if v[".type"] == "interface" and v.ipaddr then
+ local p = ffluci.sys.net.mask4prefix(v.netmask)
+ if ffluci.sys.net.belongs(ip, v.ipaddr, p) then
+ net = k
+ srv = v.ipaddr
+ break
+ end
+ end
+end
+
+local stat = false
+for k, v in pairs(ffluci.model.uci.sections("luci_splash")) do
+ if v[".type"] == "iface" and v.network == net then
+ stat = true
+ end
+end
+
+if not srv then
+ ffluci.http.textheader()
+ return print("Unable to detect network settings!")
+end
+
+if not stat then
+ ffluci.http.redirect("http://" .. srv)
+end
+
+local action = "splash"
+
+local mac = ffluci.sys.net.ip4mac(ip)
+if not mac then
+ action = "unknown"
+end
+
+local status = ffluci.sys.execl("luci-splash status "..mac)[1]
+
+if status == "whitelisted" or status == "lease" then
+ action = "allowed"
+end
+
+ffluci.http.redirect("http://" .. srv .. "/cgi-bin/luci-splash/" .. action) \ No newline at end of file
diff --git a/applications/luci-splash/root/usr/lib/luci-splash/htdocs/index.html b/applications/luci-splash/root/usr/lib/luci-splash/htdocs/index.html
new file mode 100644
index 000000000..58387a5fe
--- /dev/null
+++ b/applications/luci-splash/root/usr/lib/luci-splash/htdocs/index.html
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=/cgi-bin/index.cgi" />
+</head>
+<body style="background-color: black">
+<a style="color: white; text-decoration: none" href="/cgi-bin/index.cgi">FFLuCI - Freifunk Lua Configuration Interface</a>
+</body>
+</html> \ No newline at end of file
diff --git a/applications/luci-splash/root/www/cgi-bin/luci_splash.cgi b/applications/luci-splash/root/www/cgi-bin/luci_splash.cgi
new file mode 100644
index 000000000..188ad7aa0
--- /dev/null
+++ b/applications/luci-splash/root/www/cgi-bin/luci_splash.cgi
@@ -0,0 +1,4 @@
+#!/bin/sh
+echo "Status: 302 Found"
+echo "Location: /cgi-bin/ffluci/splash/splash$PATH_INFO"
+echo \ No newline at end of file
diff --git a/applications/luci-splash/src/controller/controller.lua b/applications/luci-splash/src/controller/controller.lua
new file mode 100644
index 000000000..62088be52
--- /dev/null
+++ b/applications/luci-splash/src/controller/controller.lua
@@ -0,0 +1,19 @@
+module("ffluci.controller.splash.splash", package.seeall)
+
+function action_activate()
+ local mac = ffluci.sys.net.ip4mac(ffluci.http.env.REMOTE_ADDR)
+ if mac and ffluci.http.formvalue("accept") then
+ os.execute("luci-splash add "..mac.." >/dev/null 2>&1")
+ ffluci.http.redirect(ffluci.model.uci.get("freifunk", "community", "homepage"))
+ else
+ ffluci.http.redirect(ffluci.dispatcher.build_url())
+ end
+end
+
+function action_accepted()
+ ffluci.http.redirect(ffluci.dispatcher.build_url())
+end
+
+function action_unknown()
+ ffluci.http.redirect(ffluci.dispatcher.build_url())
+end \ No newline at end of file
diff --git a/applications/luci-splash/src/model/cbi/admin_services/splash.lua b/applications/luci-splash/src/model/cbi/admin_services/splash.lua
new file mode 100644
index 000000000..fe4d2c3ee
--- /dev/null
+++ b/applications/luci-splash/src/model/cbi/admin_services/splash.lua
@@ -0,0 +1,30 @@
+-- ToDo: Translate, Add descriptions and help texts
+require("ffluci.model.uci")
+
+m = Map("luci_splash", "Client-Splash", [[Client-Splash ist das Freifunk Hotspot-Authentifizierungs-System.]])
+
+s = m:section(NamedSection, "general", "core", "Allgemein")
+s:option(Value, "leasetime", "Freigabezeit", "h")
+
+s = m:section(TypedSection, "iface", "Schnittstellen")
+s.addremove = true
+s.anonymous = true
+
+iface = s:option(ListValue, "network", "Schnittstelle")
+for k, v in pairs(ffluci.model.uci.sections("network")) do
+ if v[".type"] == "interface" and k ~= "loopback" then
+ iface:value(k)
+ end
+end
+
+s = m:section(TypedSection, "whitelist", "Automatische Freigabe")
+s.addremove = true
+s.anonymous = true
+s:option(Value, "mac", "MAC-Adresse")
+
+s = m:section(TypedSection, "blacklist", "Automatische Sperrung")
+s.addremove = true
+s.anonymous = true
+s:option(Value, "mac", "MAC-Adresse")
+
+return m \ No newline at end of file
diff --git a/applications/luci-splash/src/model/menu/50luci-splash.lua b/applications/luci-splash/src/model/menu/50luci-splash.lua
new file mode 100644
index 000000000..99f7caa52
--- /dev/null
+++ b/applications/luci-splash/src/model/menu/50luci-splash.lua
@@ -0,0 +1,2 @@
+sel("admin", "services")
+act("splash", "Client-Splash") \ No newline at end of file
diff --git a/applications/luci-splash/src/model/view/splash/splash.htm b/applications/luci-splash/src/model/view/splash/splash.htm
new file mode 100644
index 000000000..db4bd0f78
--- /dev/null
+++ b/applications/luci-splash/src/model/view/splash/splash.htm
@@ -0,0 +1,31 @@
+<h1><%:welcome Willkommen%>!</h1>
+<p>
+Du bist jetzt mit dem freien Funknetz
+<a href="<%~freifunk.community.homepage%>"><%~freifunk.community.name%></a> verbunden.<br />
+Wir sind ein experimentelles Gemeinschaftsnetzwerk, aber kein Internetanbieter.
+</p>
+
+<p>
+Ein Zugang <strong>ins Internet</strong> ist trotzdem möglich,
+da einige Freifunker ihre privaten Internetzugänge zur Verfügung stellen.
+Diese Zugänge müssen sich hier alle teilen.
+Bitte sei Dir dessen bewusst und verhalte Dich dementsprechend:
+<ul>
+<li>bitte <strong>keine Filesharing-Programme</strong> betreiben!</li>
+<li>bitte <strong>keine unnötigen Downloads oder Streams</strong> starten!</li>
+<li>bitte <strong>keine illegalen Aktivitäten</strong>!</li>
+</ul>
+</p>
+
+<p>
+Wenn Du unsere Idee gut findest, kannst Du uns unterstützen:
+<ul>
+<li><a href="<%~freifunk.community.homepage%>">Werde selbst Freifunker oder teile deinen Internetzugang!</a></li>
+<li>Betreibe deine anderen WLAN-Geräte <em>NICHT</em> auf den Kanälen 1-5, diese stören oft unser Netz.</li>
+</ul>
+</p>
+
+<p>
+Mit einem Klick auf <em><%:accept Annehmen%></em> kannst du für <%~luci_splash.general.leasetime%> Stunden
+über unser Netz das Internet verwenden. Dann wirst du erneut aufgefordet, diese Bedingungen zu akzeptieren.
+</p> \ No newline at end of file
diff --git a/applications/luci-splash/src/model/view/splash_splash/index.htm b/applications/luci-splash/src/model/view/splash_splash/index.htm
new file mode 100644
index 000000000..75aa02658
--- /dev/null
+++ b/applications/luci-splash/src/model/view/splash_splash/index.htm
@@ -0,0 +1,2 @@
+<%+header%>
+<%+footer%> \ No newline at end of file
diff --git a/applications/luci-splash/src/model/view/splash_splash/splash.htm b/applications/luci-splash/src/model/view/splash_splash/splash.htm
new file mode 100644
index 000000000..9c165802f
--- /dev/null
+++ b/applications/luci-splash/src/model/view/splash_splash/splash.htm
@@ -0,0 +1,7 @@
+<%+header%>
+<%+splash/splash%>
+<form method="get" action="<%=controller%>/splash/splash/activate">
+ <input type="submit" value="<%:decline Ablehnen%>" />
+ <input type="submit" name="accept" value="<%:accept Annehmen%>" />
+</form>
+<%+footer%> \ No newline at end of file