Update readme; remove old files; fix multiple creation of wireless networks; add script to auto-archive important files on wifibox.

This commit is contained in:
Wouter R 2013-04-18 11:30:48 +02:00
parent 8b4d81a7e7
commit 1f4ccb6787
10 changed files with 75 additions and 149 deletions

View File

@ -1,17 +1,19 @@
Installation:
- place the autowifi directory in /usr/share/lua
- place the src directory in /usr/share/lua and name it 'autowifi'
- create a symlink to ext/wfcf in /www/cgi-bin (make sure the file is executable)
- create a symlink to ext/autowifi.html in /www
- create a symlink to ext/autowifi.css in /www
- create a symlink to ext/autowifi.js in /www
- create a symlink to ext/autowifi_init in /etc/rc.d and name it S19autowifi_init
- enable init script by calling it with 'enable' argument?
- create a symlink to admin in /www
- create a symlink to ext/autowifi_init in /etc/rc.d and name it S18autowifi_init
- (not necessary) enable init script by calling it with 'enable' argument?
- make sure radio0 in /etc/config/wireless is not disabled
- the wlan net must also be added to firewall in the lan zone
== these two items are now handled by the script
- create a wlan network in /etc/config/network as follows <<EOF
config interface 'wlan'
option ifname 'radio0'
option proto 'dhcp'
EOF
NOTE: apparently it should have no ifname (network reload will complain about an unsupported operation)
- HOWEVER in ap mode it should be static with address '192.168.10.1' and netmask '255.255.255.0'
AND act as dhcp server, add to /etc/config/dhcp <<EOF
config dhcp 'wlan'
@ -20,4 +22,6 @@ config dhcp 'wlan'
option limit '150'
option leasetime '12h'
EOF
== package creation
- starting point: http://manoftoday.wordpress.com/2007/10/11/writing-and-compiling-a-simple-program-for-openwrt/

View File

@ -1 +1 @@
/usr/share/lua/autowifi/admin/
/usr/share/lua/autowifi/admin

34
src/misc/collect-code.sh Executable file
View File

@ -0,0 +1,34 @@
#!/bin/sh
BASE_NAME=d3d-wifibox-backup
SRC_PATHS="/etc /root /www/ /usr/share/lua"
TEMP_DIR=/tmp
TGT_FILE=$BASE_NAME.tar.gz
if [ -e /www-external ]; then
echo "ERROR: switch back /www-regular to /www before running this script"
exit 1
fi
cd $TEMP_DIR
if [ $? != 0 ]; then
echo "ERROR: could not cd to temporary directory ($TEMP_DIR)"
exit 2
fi
TGT_DIR=$TEMP_DIR/$BASE_NAME
rm -rf $TGT_DIR
mkdir -p $TGT_DIR
for path in $SRC_PATHS; do
echo "copying $path -> $TGT_DIR..."
cp -a $path $TGT_DIR
done
echo "compressing $TGT_DIR into $BASE_NAME.tar.gz..."
tar czf $BASE_NAME.tar.gz $BASE_NAME
echo "removing staging dir..."
rm -rf $TGT_DIR
echo "done."

View File

@ -1,12 +0,0 @@
#!/bin/sh
echo "Content-type: text/plain"
echo ""
read QUERY_STRING
eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
#escaped
#echo $txtOutput
#unescaped
txtOutput=`uhttpd -d $txtOutput`
echo $txtOutput

View File

@ -1,9 +0,0 @@
#!/bin/sh
echo "Content-type: text/plain"
echo ""
echo "Sample CGI Output"
echo ""
echo ""
env
echo ""
echo ""

View File

@ -1,63 +0,0 @@
<html>
<head>
<title>Doodle3D</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$.get("cgi-bin/wifi-scan", function(data) {
data = data.split("\n");
console.log(data.length);
var options = $("#boxNetwork");
options.empty();
$.each(data, function(index,value) {
console.log(value);
if (value!="") options.append($("<option />").val(value).text(value));
});
});
});
</script>
<style type="text/css">
body {
width: 80%;
background-color: #ffe;
}
.catgroup {
border: 1px solid black;
padding: 0.5em;
margin-bottom: 10px;
background-color: white;
-moz-border-radius: 5px;
border-radius: 5px;
}
.cattitle {
display: block;
margin-left: 3em;
margin-bottom: 10px;
font-weight: bold;
}
</style>
</head>
<body>
<div class="catgroup">
<span class="cattitle">WiFi mode</span>
</div>
<div class="catgroup">
<span class="cattitle">Available networks</span>
<select id="boxNetwork">
<option value="" disabled selected>Scanning for neworks...</option>
</select>
<input id="txtPassword" placeholder="password" value="" type="password">
<input id="btnConnect" type="button" value="Connect">
</div>
<div class="catgroup">
<span class="cattitle">Known networks</span>
</div>
</body>
</html>

View File

@ -1,19 +0,0 @@
#!/bin/sh
# avoiding "Device or resource busy" error as per https://forum.openwrt.org/viewtopic.php?pid=121485#p121485
# note that iwinfo takes care of this internally
echo "Content-type: text/plain"
echo ""
DEV="${1:-wlan0}"
ifconfig $DEV down
iw dev $DEV interface add scan.$DEV type station
ifconfig scan.$DEV up
iwlist scan.$DEV scan | grep ESSID | cut -c 27- | tr -d '"'
ifconfig scan.$DEV down
iw dev scan.$DEV del
ifconfig $DEV up

View File

@ -1,33 +0,0 @@
[[1: { ["encryption"] =
{ ["enabled"] = true,
["auth_algs"] = { } ,
["description"] = mixed WPA/WPA2 PSK (TKIP),
["wep"] = false,
["auth_suites"] =
{ [1] = PSK,} ,
["wpa"] = 3,
["pair_ciphers"] =
{ [1] = TKIP,
[2] = CCMP,
} ,
["group_ciphers"] =
{ [1] = TKIP,} ,
} ,
["quality_max"] = 70,
["ssid"] = happiesnappie2,
["channel"] = 9,
["signal"] = -35,
["bssid"] = 00:22:6B:EF:BB:99,
["mode"] = Master,
["quality"] = 70,
} ]]
config wifi-iface
option network 'lan'
option ssid 'happiesnappie2'
option encryption 'psk2'
option device 'radio0'
option mode 'sta'
option bssid '00:22:6B:EF:BB:99'
option key 'pr4ppal4trappa'
option disabled '1'

View File

@ -10,6 +10,8 @@ M.WWW_CAPTIVE_PATH = "/usr/share/lua/autowifi/ext/www"
M.WWW_CAPTIVE_INDICATOR = "/www/.autowifi-inplace"
M.WWW_RENAME_NAME = "/www-regular"
local function reloadBit(dlist, itemname)
if dlist[itemname] == nil then dlist[itemname] = "" end
if dlist[itemname] == "" then dlist[itemname] = "r"
@ -24,6 +26,8 @@ local function commitBit(dlist, itemname)
end
local function bothBits(dlist, itemname) dlist[itemname] = "b" end
function M.init(wifiInstance, reloadSilent)
wifi = wifiInstance
silent = reloadSilent or false
@ -82,10 +86,10 @@ function reconf.wireless_reload(dirtyList) reloadBit(dirtyList, "wireless") end
--[[ Add wlan interface declaration to /etc/config/network ]]
function reconf.wifiiface_add(dirtyList)
uci:set("network", wifi.NET, "interface")
-- uci:set("network", wifi.NET, "proto", "dhcp")
commitBit(dirtyList, "network")
end
--[[ Add/remove access point network ]]
function reconf.apnet_add_noreload(dirtyList) reconf.apnet_add(dirtyList, true) end
function reconf.apnet_add(dirtyList, noReload)
@ -116,6 +120,7 @@ function reconf.apnet_rm(dirtyList)
reloadBit(dirtyList, "network"); commitBit(dirtyList, "wireless")
end
--[[ Switch between wireless static IP and DHCP ]]
function reconf.staticaddr_add(dirtyList)
uci:set("network", wifi.NET, "interface")
@ -137,6 +142,7 @@ function reconf.staticaddr_rm(dirtyList)
bothBits(dirtyList, "network")
end
--[[ Add/remove DHCP pool for wireless net ]]
function reconf.dhcppool_add(dirtyList)
uci:set("dhcp", wifi.NET, "dhcp") --create section
@ -153,6 +159,7 @@ function reconf.dhcppool_rm(dirtyList)
commitBit(dirtyList, "dhcp"); reloadBit(dirtyList, "dnsmasq")
end
--[[ Add/remove webserver 404 redirection and denial of dirlisting ]]
function reconf.wwwredir_add(dirtyList)
uci:set("uhttpd", "main", "error_page", "/admin/autowifi.html")
@ -165,6 +172,7 @@ function reconf.wwwredir_rm(dirtyList)
bothBits(dirtyList, "uhttpd")
end
--[[ Add/remove redirecton of all DNS requests to self ]]
function reconf.dnsredir_add(dirtyList)
local redirText = "/#/" .. wifi.AP_ADDRESS
@ -183,21 +191,29 @@ function reconf.dnsredir_rm(dirtyList)
commitBit(dirtyList, "dhcp"); reloadBit(dirtyList, "dnsmasq")
end
--TODO: handle os.rename() return values (nil+msg on error)
function reconf.wwwcaptive_add(dirtyList)
if u.exists(M.WWW_CAPTIVE_INDICATOR) then
return u:logdebug("WWW captive directory already in place, not redoing", false)
end
os.rename("/www", M.WWW_RENAME_NAME)
u.symlink(M.WWW_CAPTIVE_PATH, "/www")
return true
if os.rename("/www", M.WWW_RENAME_NAME) == true then
u.symlink(M.WWW_CAPTIVE_PATH, "/www")
return true
else
return u:logerror("Could not rename /www to " .. M.WWW_RENAME_NAME)
end
end
function reconf.wwwcaptive_rm(dirtyList)
if not u.exists(M.WWW_CAPTIVE_INDICATOR) then return u:logdebug("WWW captive directory not in place, not undoing", false) end
os.remove("/www")
return os.rename(M.WWW_RENAME_NAME, "/www")
if os.rename(M.WWW_RENAME_NAME, "/www") ~= true then
return u:logerror("Could not rename " .. M.WWW_RENAME_NAME .. " to /www")
end
return true
end
--[[ Setup/remove NAT reflection to redirect all IPs ]]
function reconf.natreflect_add(dirtyList)
uci:set("firewall", "portalreflect", "redirect");

View File

@ -143,6 +143,14 @@ function M.createConfigFromScanInfo(info, passphrase, disabled)
if passphrase ~= nil then apconfig.key = passphrase end
apconfig.disabled = disabled ~= nil and disabled and 1 or 0
uci:foreach("wireless", "wifi-iface", function(s)
if s.bssid == info.bssid then
util:logdebug("removing old wireless config for net '" .. s.ssid .. "(bssid: " .. s.bssid .. ")'")
uci:delete("wireless", s[".name"])
-- return false --keep looking, just in case multiple entries with this bssid exist
end
end)
local sname = uci:add("wireless", "wifi-iface");
for k, v in pairs(apconfig) do
uci:set("wireless", sname, k, v)