From 676e5b7450d95bf06fa0b2154bc54d8d4da6b011 Mon Sep 17 00:00:00 2001 From: Stan Grishin Date: Sat, 7 Sep 2019 10:36:58 -0700 Subject: [PATCH] luci-app-vpnbypass: better start/stop controls, create entry in the VPN menu if it exists Signed-off-by: Stan Grishin --- applications/luci-app-vpnbypass/Makefile | 6 +-- .../luasrc/controller/vpnbypass.lua | 9 ++-- .../luasrc/model/cbi/vpnbypass.lua | 47 ++++++++++++++----- 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/applications/luci-app-vpnbypass/Makefile b/applications/luci-app-vpnbypass/Makefile index f426acc53..2e26a5158 100644 --- a/applications/luci-app-vpnbypass/Makefile +++ b/applications/luci-app-vpnbypass/Makefile @@ -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 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 diff --git a/applications/luci-app-vpnbypass/luasrc/controller/vpnbypass.lua b/applications/luci-app-vpnbypass/luasrc/controller/vpnbypass.lua index ed6f4f4da..56221e043 100644 --- a/applications/luci-app-vpnbypass/luasrc/controller/vpnbypass.lua +++ b/applications/luci-app-vpnbypass/luasrc/controller/vpnbypass.lua @@ -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 diff --git a/applications/luci-app-vpnbypass/luasrc/model/cbi/vpnbypass.lua b/applications/luci-app-vpnbypass/luasrc/model/cbi/vpnbypass.lua index 6545154c2..95971fab1 100644 --- a/applications/luci-app-vpnbypass/luasrc/model/cbi/vpnbypass.lua +++ b/applications/luci-app-vpnbypass/luasrc/model/cbi/vpnbypass.lua @@ -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 ") .. [[]] .. translate("README") .. [[ ]] .. translate("for syntax")) +function d.on_after_commit(map) + sys.init.restart("dnsmasq") +end return m, d -- 2.25.1