luci-app-vpnbypass: better start/stop controls, create entry in the VPN menu if it... 3046/head
authorStan Grishin <stangri@melmac.net>
Sat, 7 Sep 2019 17:36:58 +0000 (10:36 -0700)
committerStan Grishin <stangri@melmac.net>
Sat, 7 Sep 2019 17:36:58 +0000 (10:36 -0700)
Signed-off-by: Stan Grishin <stangri@melmac.net>
applications/luci-app-vpnbypass/Makefile
applications/luci-app-vpnbypass/luasrc/controller/vpnbypass.lua
applications/luci-app-vpnbypass/luasrc/model/cbi/vpnbypass.lua

index f426acc537f4a1feaf40a163c93ccda3bfbef518..2e26a5158e243f4ead9a6f6b158bbeb711bce4ab 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Stan Grishin (stangri@melmac.net)
+# Copyright 2017-2019 Stan Grishin (stangri@melmac.net)
 # This is free software, licensed under the GNU General Public License v3.
 
 include $(TOPDIR)/rules.mk
@@ -8,9 +8,9 @@ PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
 
 LUCI_TITLE:=VPN Bypass Web UI
 LUCI_DESCRIPTION:=Provides Web UI for VPNBypass service.
-LUCI_DEPENDS:=+luci +vpnbypass
+LUCI_DEPENDS:=+luci-mod-admin-full +vpnbypass
 LUCI_PKGARCH:=all
-PKG_RELEASE:=4
+PKG_RELEASE:=9
 
 include ../../luci.mk
 
index ed6f4f4da48531a9dfba58afca4faab1156f2991..56221e043ff86136371ba5fe5927adc0fd368c64 100644 (file)
@@ -1,7 +1,10 @@
 module("luci.controller.vpnbypass", package.seeall)
 function index()
-       if not nixio.fs.access("/etc/config/vpnbypass") then
-               return
+       if nixio.fs.access("/etc/config/vpnbypass") then
+               if luci.dispatcher.lookup("admin/vpn") then
+                       entry({"admin", "vpn", "vpnbypass"}, cbi("vpnbypass"), _("VPN Bypass"))
+               else
+                       entry({"admin", "services", "vpnbypass"}, cbi("vpnbypass"), _("VPN Bypass"))
+               end
        end
-       entry({"admin", "services", "vpnbypass"}, cbi("vpnbypass"), _("VPN Bypass"))
 end
index 6545154c2cc22d826fcfd9819292cbad8ec47a36..95971fab1bf7a3c4f0d16000d70b1961bdea152c 100644 (file)
@@ -1,18 +1,40 @@
-readmeURL = "https://github.com/openwrt/packages/blob/master/net/vpnbypass/files/README.md"
+local readmeURL = "https://github.com/openwrt/packages/blob/master/net/vpnbypass/files/README.md"
 
 m = Map("vpnbypass", translate("VPN Bypass Settings"))
-s = m:section(NamedSection, "config", "vpnbypass")
-
--- General options
-e = s:option(Flag, "enabled", translate("Start VPNBypass service"))
-e.rmempty = false
-function e.write(self, section, value)
-       if value ~= "1" then
-               luci.sys.init.stop("vpnbypass")
+
+h = m:section(NamedSection, "config", "vpnbypass", translate("Service Status"))
+local packageName = "vpnbypass"
+local uci = require "luci.model.uci".cursor()
+local sys = require "luci.sys"
+local http = require "luci.http"
+local dispatcher = require "luci.dispatcher"
+en = h:option(Button, "__toggle")
+if enabledFlag ~= "1" then
+       en.title      = translate("Service is disabled/stopped")
+       en.inputtitle = translate("Enable/Start")
+       en.inputstyle = "apply important"
+else
+       en.title      = translate("Service is enabled/started")
+       en.inputtitle = translate("Stop/Disable")
+       en.inputstyle = "reset important"
+end
+function en.write()
+       enabledFlag = enabledFlag == "1" and "0" or "1"
+       uci:set(packageName, "config", "enabled", enabledFlag)
+       uci:save(packageName)
+       uci:commit(packageName)
+       if enabledFlag == "0" then
+               sys.init.stop(packageName)
+               sys.init.disable(packageName)
+       else
+               sys.init.enable(packageName)
+               sys.init.start(packageName)
        end
-       return Flag.write(self, section, value)
+       http.redirect(dispatcher.build_url("admin/services/" .. packageName))
 end
 
+s = m:section(NamedSection, "config", "vpnbypass", translate("VPN Bypass Rules"))
+
 -- Local Ports
 p1 = s:option(DynamicList, "localport", translate("Local Ports to Bypass"), translate("Local ports to trigger VPN Bypass"))
 p1.datatype    = "portrange"
@@ -30,7 +52,7 @@ p2.optional = false
 -- Local Subnets
 r1 = s:option(DynamicList, "localsubnet", translate("Local IP Addresses to Bypass"), translate("Local IP addresses or subnets with direct internet access (outside of the VPN tunnel)"))
 r1.datatype    = "ip4addr"
--- r1.placeholder = luci.ip.new(m.uci:get("network", "lan", "ipaddr"), m.uci:get("network", "lan", "netmask"))
+-- r1.placeholder = ip.new(m.uci:get("network", "lan", "ipaddr"), m.uci:get("network", "lan", "netmask"))
 r1.addremove = false
 r1.optional = false
 
@@ -49,5 +71,8 @@ di = s4:option(DynamicList, "ipset", translate("Domains to Bypass"),
     translate("Domains to be accessed directly (outside of the VPN tunnel), see ")
                .. [[<a href="]] .. readmeURL .. [[#bypass-domains-formatsyntax" target="_blank">]]
     .. translate("README") .. [[</a> ]] .. translate("for syntax"))
+function d.on_after_commit(map)
+    sys.init.restart("dnsmasq")
+end
 
 return m, d