-- Copyright (C) 2016 zhangzf@kunteng.org -- Licensed to the public under the GNU General Public License v3. local sys = require "luci.sys" local opkg = require "luci.model.ipkg" local packageName = "wifidog" local m, s, o local function get_status() if luci.sys.call("pidof %s >/dev/null" %{packageName}) == 0 then local UpTime = luci.util.exec("wdctl status | grep Uptime | cut -d ' ' -f 2-6") local StatusUrl = "http://" .. luci.http.getenv('SERVER_NAME') .. ":2060/wifidog/status" return translate("已运行 " .. UpTime .."") -- .." 查看更多") else return translate("WifiDog 程序未启动") end end if opkg.status(packageName)[packageName] then return Map(packageName, translate("ApFree_WifiDog"), translate('Wifidog is not installed..')) end m = Map("wifidog", translate("ApFree_WifiDog"), translate("ApFree WiFiDog" .. "在完全兼容原版WiFiDog的基础上,在功能、性能和稳定性方面做了大量工作、改进及优化," .. "目前在坤腾固件中广泛使用,使用ApFree WiFidog的在线路由器数量达到1万多台且还在继续增长..." )) s = m:section(TypedSection, "wifidog", translate("运行状态"), get_status()) s.anonymous = true s = m:section(TypedSection, "wifidog", translate("程序配置")) s.anonymous = true s.addremove = false s:tab("general", translate("基本设置")) s:tab("policy", translate("访问控制")) s:tab("advanced", translate("高级设置")) -- 基本设置 Enable = s:taboption("general", Flag, "enable", translate("启用"),translate("打开或关闭认证")) Enable.rmempty = false Enable.default = "1" GatewayID = s:taboption("general",Value, "gateway_id", translate("设备 ID"), translate("默认为设备MAC地址")) GatewayID.placeholder = luci.util.exec("ifconfig br-lan| grep HWaddr | awk -F \" \" '{print $5}' | awk '$1~//{print;exit}' | sed 's/://g'") s:taboption("general", Value, "auth_server_hostname", translate("认证服务器"), translate("认证服务器地址, 可填写域名或IP")) ServerPort = s:taboption("general", Value, "auth_server_port", translate("服务器端口"), translate("认证服务器HTTP服务端口")) ServerPort.datatype = "port" s:taboption("general", Value, "auth_server_path", translate("服务器路径"), translate("服务端WEB目录,必须以'/'结尾,列'/wifidog/'")) -- 高级设置 WiredPass = s:taboption("advanced", Flag, "wired_passed", translate("有线免认证"), translate("仅 KunTeng 固件支持")) WiredPass.rmempty = false PoolMode = s:taboption("advanced",Flag, "pool_mode", translate("线程池模式"),translate("是否开启线程池")) PoolMode.rmempty = false ThreadNumber = s:taboption("advanced", Value, "thread_number", translate("线程数"), translate("设置线程池中的最大线程数")) ThreadNumber.datatype = "uinteger" ThreadNumber:depends("pool_mode", "1") ThreadNumber.default = "5" QueueSize = s:taboption("advanced", Value, "queue_size", translate("队列大小"), translate("线程池的任务队列长度")) QueueSizedatatype = "uinteger" QueueSize:depends("pool_mode", "1") QueueSize.default = "20" GatewayInterface = s:taboption("advanced", Value, "gateway_interface", translate("内网接口"), translate("指定开启portal认证的网络接口,默认'br-lan'")) GatewayInterface.default = "br-lan" for _, e in ipairs(sys.net.devices()) do if e ~= "lo" then GatewayInterface:value(e) end end CheckInterval = s:taboption("advanced", Value, "check_interval", translate("检查间隔"), translate("接入客户端在线检测间隔,默认60秒")) CheckInterval.datatype = "uinteger" CheckInterval.default = "60" ClientTimeout = s:taboption("advanced", Value, "client_timeout", translate("超时时间"), translate("客户离线后在此时间段内重新连接不需要再次认证,默认5分")) ClientTimeout.datatype = "uinteger" ClientTimeout.default = "5" MaxConnections = s:taboption("advanced", Value, "httpd_max_conn", translate("最大接入用户数"), translate("最大可同时在线的用户数")) MaxConnections.datatype = "uinteger" MaxConnections.default = "200" -- 访问控制 s:taboption("policy", Value, "trusted_domains", translate("域名白名单"), translate("不用通过认证既可访问的网址,不含\"http://\", 多个URL请用 ,号隔开")) s:taboption("policy", Value, "trusted_iplist", translate("IP白名单"), translate("不用通过认证既可连接的ip, 多个地址请用 ,号隔开")) s:taboption("policy", Value, "trusted_maclist", translate("MAC白名单"), translate("非强制认证的用户MAC,多个MAC请用 ,号隔开")) s:taboption("policy", Value, "untrusted_maclist", translate("MAC黑名单"), translate("禁止访问网络的MAC,多个MAC请用 ,号隔开")) m:section(SimpleSection).template = "apfree_wifidog/client_list" return m