Preparing rewrite of WiFi configuration
authorSteven Barth <steven@midlink.org>
Sun, 17 Aug 2008 18:32:53 +0000 (18:32 +0000)
committerSteven Barth <steven@midlink.org>
Sun, 17 Aug 2008 18:32:53 +0000 (18:32 +0000)
12 files changed:
contrib/package/luci-addons/dist/etc/crontabs/root
i18n/english/luasrc/i18n/admin-core.en.lua
i18n/german/luasrc/i18n/admin-core.de.lua
libs/cbi/htdocs/luci-static/resources/cbi.js
libs/cbi/luasrc/cbi.lua
libs/cbi/luasrc/view/cbi/cell_valuefooter.htm
libs/cbi/luasrc/view/cbi/footer.htm
libs/cbi/luasrc/view/cbi/full_valuefooter.htm
libs/cbi/luasrc/view/cbi/lvalue.htm
libs/cbi/luasrc/view/cbi/ucisection.htm
modules/admin-full/luasrc/model/cbi/admin_wifi/devices.lua
modules/admin-full/luasrc/model/cbi/admin_wifi/networks.lua

index 6e2e417dcbdee7e50fb7cd3fa5d1c4db9542aa0f..1169c5c6d39f5e2ab6781a94dd3c228ca72758c9 100644 (file)
@@ -1,3 +1,3 @@
-0-59/1 * * * *  /usr/bin/run-parts /etc/cron.minutely
-0 * * * *       /usr/bin/run-parts /etc/cron.hourly
-0 0 * * *       /usr/bin/run-parts /etc/cron.daily
+* * * * *  /usr/bin/run-parts /etc/cron.minutely
+17 * * * *       /usr/bin/run-parts /etc/cron.hourly
+25 6 * * *       /usr/bin/run-parts /etc/cron.daily
index ed69e01101e72c339721a73e0cac12e9c59482c0..4a47e4f1d70594d24401011465e0f84f3cebb00a 100644 (file)
@@ -278,4 +278,13 @@ mem_buffered = "buffered"
 mem_free = "free"
 
 a_s_crontab = "Scheduled Tasks"
-a_s_crontab1 = "This is the system crontab in which scheduled tasks can be defined."
\ No newline at end of file
+a_s_crontab1 = "This is the system crontab in which scheduled tasks can be defined."
+
+a_w_nasid = "NAS ID"
+a_w_cacert = "Path to CA-Certificate"
+a_w_eaptype = "EAP-Method"
+a_w_tlsprivkey = "Path to Private Key"
+a_w_tlsprivkeypwd = "Password of Private Key"
+a_w_peapauth = "PEAP-Authentication"
+a_w_peapidentity = "PEAP-Identity"
+a_w_peappassword = "PEAP-Password"
\ No newline at end of file
index 2fcb8fbbc870fe683d1436277b64b4e3294ece80..c71dfc1de1abdd477ac4ffd3b68a0b43feddeecb 100644 (file)
@@ -355,4 +355,11 @@ mem_free = "frei"
 a_s_crontab = "Geplante Aufgaben"
 a_s_crontab1 = "Dies ist die System-Crontab in der geplante Aufgaben definiert werden können."
 
-a_w_nasid = "NAS ID"
\ No newline at end of file
+a_w_nasid = "NAS ID"
+a_w_cacert = "Pfad zum CA-Zertifikat"
+a_w_eaptype = "EAP-Methode"
+a_w_tlsprivkey = "Pfad zum Privaten Schlüssel"
+a_w_tlsprivkeypwd = "Passwort des Privaten Schlüssels"
+a_w_peapauth = "PEAP-Authentifizierung"
+a_w_peapidentity = "PEAP-Identitäz"
+a_w_peappassword = "PEAP-Passwort"
\ No newline at end of file
index 78a9e90bf6a420fd13eef15d953302beb8c907ea..d0e31e483a9cee23b3a9bf381ff838a9ee09bb21 100644 (file)
@@ -1,38 +1,30 @@
-var cbi_d = {};
+var cbi_d = [];
 
-function cbi_d_add(field, target, value) {
-       if (!cbi_d[target]) {
-               cbi_d[target] = {};
-       }
-       if (!cbi_d[target][value]) {
-               cbi_d[target][value] = [];
-       }
-       
+function cbi_d_add(field, dep) {       
        var obj = document.getElementById(field);
        if (obj) {
-               var entry = {
-                       "node": obj,
-                       "parent": obj.parentNode,
-                       "next": obj.nextSibling 
-               } 
-               cbi_d[target][value].unshift(entry);
-       }
-}
-
-function cbi_d_update(target) {
-       if (!cbi_d[target]) {
-               return;
-       }
-       
-       for (var x in cbi_d[target]) {
-               for (var i=0; i<cbi_d[target][x].length; i++) { 
-                       var entry = cbi_d[target][x][i];
-                       if (entry.node.parentNode) {
-                               entry.parent.removeChild(entry.node)
+               var entry
+               for (var i=0; i<cbi_d.length; i++) {
+                       if (cbi_d[i].id == field) {
+                               entry = cbi_d[i];
+                               break;
                        }
                }
+               if (!entry) {
+                       entry = {
+                               "id": field,
+                               "node": obj,
+                               "parent": obj.parentNode,
+                               "next": obj.nextSibling,
+                               "deps": []
+                       };
+                       cbi_d.unshift(entry);
+               }       
+               entry.deps.push(dep)
        }
-       
+}
+
+function cbi_d_value(target) {
        var t = document.getElementById(target);
        var value
        
@@ -46,21 +38,39 @@ function cbi_d_update(target) {
                }
        }
        
-       if (cbi_d[target][value]) {
-               for (var i=0; i<cbi_d[target][value].length; i++) {             
-                       var entry = cbi_d[target][value][i];
+       return value
+}
+
+function cbi_d_check(deps) {
+       for (var i=0; i<deps.length; i++) {
+               var istat = true
+               for (var j in deps[i]) {
+                       istat = (istat && cbi_d_value(j) == deps[i][j])
+               }
+               if (istat) {
+                       return true
+               }
+       }               
+}
+
+function cbi_d_update() {
+       var state = false;
+       for (var i=0; i<cbi_d.length; i++) {
+               var entry = cbi_d[i];
+               if (entry.node.parentNode && !cbi_d_check(entry.deps)) {
+                       entry.parent.removeChild(entry.node);
+                       state = (state || !entry.node.parentNode)
+               } else if (!entry.node.parentNode && cbi_d_check(entry.deps)) {
                        if (!entry.next) {
                                entry.parent.appendChild(entry.node);
                        } else {
                                entry.parent.insertBefore(entry.node, entry.next);
-                       }
+                       }               
+                       state = (state || entry.node.parentNode)
                }
        }
-}
-
-function cbi_d_init() {
-       for (var x in cbi_d) {
-               cbi_d_update(x);
+       if (state) {
+               cbi_d_update();
        }
 }
 
index fed53f6ee812c9103083e397993e0b66057da996..6cc090882395c11521c9de5726d58962318974e4 100644 (file)
@@ -710,7 +710,15 @@ end
 
 -- Add a dependencie to another section field
 function AbstractValue.depends(self, field, value)
-       table.insert(self.deps, {field=field, value=value})
+       local deps
+       if type(field) == "string" then
+               deps = {}
+               deps[field] = value
+       else
+               deps = field
+       end
+       
+       table.insert(self.deps, {deps=deps, add=""})
 end
 
 -- Generates the unique CBID
@@ -897,10 +905,14 @@ function ListValue.__init__(self, ...)
        self.widget = "select"
 end
 
-function ListValue.value(self, key, val)
+function ListValue.value(self, key, val, ...)
        val = val or key
        table.insert(self.keylist, tostring(key))
        table.insert(self.vallist, tostring(val))
+       
+       for i, deps in ipairs({...}) do
+               table.insert(self.deps, {add = "-"..key, deps=deps})
+       end
 end
 
 function ListValue.validate(self, val)
index 94121424655e9de498e2b57a3da40a38df2ecfcf..7d1ac4ee68c35695bd31f7fecad5e853b3a34c52 100644 (file)
@@ -25,7 +25,15 @@ $Id$
 <% if #self.deps > 0 then -%>
        <script type="text/javascript">
                <% for j, d in ipairs(self.deps) do -%>
-                       cbi_d_add("cbi-<%=self.config.."-"..section.."-"..self.option%>", "cbid.<%=self.config.."."..section.."."..d.field%>", "<%=d.value%>");
+                       cbi_d_add("cbi-<%=self.config.."-"..section.."-"..self.option..d.add%>", {
+               <%-
+                       for k,v in pairs(d.deps) do
+               -%>
+                       <%-=string.format('"cbid.%s.%s.%s"', self.config, section, k) .. ":" .. string.format("%q", v)-%>,
+               <%-
+                       end
+               -%>
+                       });
                <%- end %>
        </script>
 <%- end %>
index b719058200d169ed150a9f9cd3a39785671b562e..a688fcddde0b640d5ca93eedf78e945d97094436 100644 (file)
@@ -17,7 +17,7 @@ $Id$
                <input class="cbi-button cbi-button-apply" type="submit" name="cbi.apply" value="<%:saveapply%>" />
                <input class="cbi-button cbi-button-save" type="submit" value="<%:save%>" />
                <input class="cbi-button cbi-button-reset" type="reset" value="<%:reset%>" />
-               <script type="text/javascript">cbi_d_init();</script>
+               <script type="text/javascript">cbi_d_update();</script>
        </div>
 </form>
 <%+footer%>
index 5a52898d1779d394fdb93c42b5a79b61960da1ea..8084cfda984e74576ff79d454011c96d8c589320 100644 (file)
@@ -34,7 +34,15 @@ $Id$
 <% if #self.deps > 0 then -%>
        <script type="text/javascript">
                <% for j, d in ipairs(self.deps) do -%>
-                       cbi_d_add("cbi-<%=self.config.."-"..section.."-"..self.option%>", "cbid.<%=self.config.."."..section.."."..d.field%>", "<%=d.value%>");
+                       cbi_d_add("cbi-<%=self.config.."-"..section.."-"..self.option..d.add%>", {
+               <%-
+                       for k,v in pairs(d.deps) do
+               -%>
+                       <%-=string.format('"cbid.%s.%s.%s"', self.config, section, k) .. ":" .. string.format("%q", v)-%>,
+               <%-
+                       end
+               -%>
+                       });
                <%- end %>
        </script>
 <%- end %>
index 5108e85c48da0b9584a2ba839d5df4c65cf1a770..60dd682808acd2b1dcb00ef4d8f0b3697e0e1f27 100644 (file)
@@ -16,7 +16,7 @@ $Id$
 <% if self.widget == "select" then %>
        <select onchange="cbi_d_update(this.id)"<%= attr("id", cbid) .. attr("name", cbid) .. ifattr(self.size, "size") %>>
        <% for i, key in pairs(self.keylist) do -%>
-               <option<%= attr("value", key) .. ifattr(self:cfgvalue(section) == key, "selected", "selected") %>><%=luci.util.pcdata(self.vallist[i])%></option>
+               <option id="cbi-<%=self.config.."-"..section.."-"..self.option.."-"..key%>"<%= attr("value", key) .. ifattr(self:cfgvalue(section) == key, "selected", "selected") %>><%=luci.util.pcdata(self.vallist[i])%></option>
        <%- end %>
        </select>
 <% elseif self.widget == "radio" then
index 2ae85600383d2ea9721201758f2e4d43d33419e0..f8cf3d1bc0ba780f8a0f22b79f3310cfac8fe093 100644 (file)
@@ -27,8 +27,17 @@ $Id$
                        <%- end %>
                </select>
                <script type="text/javascript"><% for key, val in pairs(self.optionals[section]) do %>
-                       <% if #val.deps > 0 then %><% for j, d in ipairs(val.deps) do %>cbi_d_add("cbi-<%=self.config.."-"..section.."-"..val.option%>", "cbid.<%=self.config.."."..section.."."..d.field%>", "<%=d.value%>");
-               <% end %><% end %>
+                       <% if #val.deps > 0 then %><% for j, d in ipairs(val.deps) do -%>
+                       cbi_d_add("cbi-<%=self.config.."-"..section.."-"..val.option..d.add%>", {
+               <%-
+                       for k,v in pairs(d.deps) do
+               -%>
+                       <%-=string.format('"cbid.%s.%s.%s"', self.config, section, k) .. ":" .. string.format("%q", v)-%>,
+               <%-
+                       end
+               -%>
+                       });
+               <%- end %><% end %>
                <% end %></script>
        <% end %>
                <input type="submit" class="cbi-button cbi-button-fieldadd" value="<%:add%>" />
index de226191928789d13c641ed2e4ada4a6d6fd4fc7..e33f2416143abd5758cc28d9e6f1c211e06c87d4 100644 (file)
@@ -25,18 +25,7 @@ function en.cfgvalue(self, section)
        return Flag.cfgvalue(self, section) or "0"
 end
 
-t = s:option(ListValue, "type", translate("type"))
-t:value("broadcom")
-t:value("atheros")
-t:value("mac80211")
-t:value("prism2")
---[[
-require("luci.sys")
-local c = ". /etc/functions.sh;for i in /lib/wifi/*;do . $i;done;echo $DRIVERS"
-for driver in luci.util.execl(c)[1]:gmatch("[^ ]+") do
-       t:value(driver)
-end
-]]--
+t = s:option(DummyValue, "type", translate("type"))
 
 mode = s:option(ListValue, "mode", translate("mode"))
 mode:value("", "standard")
index 0c62b58e960976840b719aaef88131de8960b2a3..a109587d90a080b69ab8c9cab61a037036486523 100644 (file)
@@ -49,29 +49,71 @@ s:option(Flag, "bursting", translate("a_w_athburst")).optional = true
 encr = s:option(ListValue, "encryption", translate("encryption"))
 encr:value("none", "keine")
 encr:value("wep", "WEP")
-encr:value("psk", "WPA-PSK")
-encr:value("wpa", "WPA-Radius")
-encr:value("psk2", "WPA2-PSK")
-encr:value("wpa2", "WPA2-Radius")
-
-key = s:option(Value, "key", translate("key"))
-key:depends("encryption", "wep")
-key:depends("encryption", "psk")
-key:depends("encryption", "wpa")
-key:depends("encryption", "psk2")
-key:depends("encryption", "wpa2")
-key.rmempty = true
+encr:value("PSK", "WPA-PSK")
+encr:value("WPA", "WPA-EAP", {mode="ap"}, {mode="sta"})
+encr:value("PSK2", "WPA2-PSK")
+encr:value("WPA2", "WPA2-EAP", {mode="ap"}, {mode="sta"})
+encr:depends("mode", "ap")
+encr:depends("mode", "sta")
+encr:depends("mode", "wds")
 
 server = s:option(Value, "server", translate("a_w_radiussrv"))
-server:depends("encryption", "wpa")
-server:depends("encryption", "wpa2")
+server:depends({mode="ap", encryption="WPA"})
+server:depends({mode="ap", encryption="WPA2"})
 server.rmempty = true
 
 port = s:option(Value, "port", translate("a_w_radiusport"))
-port:depends("encryption", "wpa")
-port:depends("encryption", "wpa2")
+port:depends({mode="ap", encryption="WPA"})
+port:depends({mode="ap", encryption="WPA2"})
 port.rmempty = true
 
+key = s:option(Value, "key", translate("key"))
+key:depends("encryption", "wep")
+key:depends("encryption", "PSK")
+key:depends({mode="ap", encryption="WPA"})
+key:depends("encryption", "PSK2")
+key:depends({mode="ap", encryption="WPA2"})
+key.rmempty = true
+
+nasid = s:option(Value, "nasid", translate("a_w_nasid"))
+nasid:depends({mode="ap", encryption="WPA"})
+nasid:depends({mode="ap", encryption="WPA2"})
+nasid.rmempty = true
+
+eaptype = s:option(ListValue, "eap_type", translate("a_w_eaptype"))
+eaptype:value("TLS")
+eaptype:value("PEAP")
+eaptype:depends({mode="sta", encryption="WPA"})
+eaptype:depends({mode="sta", encryption="WPA2"})
+
+cacert = s:option(Value, "ca_cert", translate("a_w_cacert"))
+cacert:depends({mode="sta", encryption="WPA"})
+cacert:depends({mode="sta", encryption="WPA2"})
+
+privkey = s:option(Value, "priv_key", translate("a_w_tlsprivkey"))
+privkey:depends({mode="sta", eap_type="TLS", encryption="WPA2"})
+privkey:depends({mode="sta", eap_type="TLS", encryption="WPA"})
+
+privkeypwd = s:option(Value, "priv_key_pwd", translate("a_w_tlsprivkeypwd"))
+privkeypwd:depends({mode="sta", eap_type="TLS", encryption="WPA2"})
+privkeypwd:depends({mode="sta", eap_type="TLS", encryption="WPA"})
+
+
+auth = s:option(Value, "auth", translate("a_w_peapauth"))
+auth:depends({mode="sta", eap_type="PEAP", encryption="WPA2"})
+auth:depends({mode="sta", eap_type="PEAP", encryption="WPA"})
+
+identity = s:option(Value, "identity", translate("a_w_peapidentity"))
+identity:depends({mode="sta", eap_type="PEAP", encryption="WPA2"})
+identity:depends({mode="sta", eap_type="PEAP", encryption="WPA"})
+
+password = s:option(Value, "password", translate("a_w_peappassword"))
+password:depends({mode="sta", eap_type="PEAP", encryption="WPA2"})
+password:depends({mode="sta", eap_type="PEAP", encryption="WPA"})
+
+
+
+
 s:option(Flag, "isolate", translate("a_w_apisolation"), translate("a_w_apisolation1")).optional = true
 
 s:option(Flag, "hidden", translate("a_w_hideessid")).optional = true