--- /dev/null
+# Copyright (c) 2017 Stan Grishin (stangri@melmac.net)
+# This is free software, licensed under the GNU General Public License v3.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=luci-app-vpnbypass
+PKG_VERSION:=1.0.0
+PKG_RELEASE:=3
+PKG_LICENSE:=GPL-3.0+
+PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
+PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/luci-app-vpnbypass
+ SECTION:=luci
+ CATEGORY:=LuCI
+ SUBMENU:=3. Applications
+ TITLE:=VPN Bypass Web UI
+ DEPENDS:=+luci-mod-admin-full +vpnbypass
+ PKGARCH:=all
+endef
+
+define Package/luci-app-vpnbypass/description
+ This package will install VPN Bypass Web UI.
+endef
+
+define Build/Prepare
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+define Package/luci-app-vpnbypass/install
+ $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller/
+ $(INSTALL_BIN) ./luasrc/controller/vpnbypass.lua $(1)/usr/lib/lua/luci/controller/vpnbypass.lua
+ $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/
+ $(INSTALL_BIN) ./luasrc/model/cbi/vpnbypass.lua $(1)/usr/lib/lua/luci/model/cbi/vpnbypass.lua
+endef
+
+$(eval $(call BuildPackage,luci-app-vpnbypass))
\ No newline at end of file
--- /dev/null
+module("luci.controller.vpnbypass", package.seeall)
+function index()
+ if not nixio.fs.access("/etc/config/vpnbypass") then
+ return
+ end
+ entry({"admin", "services", "vpnbypass"}, cbi("vpnbypass"), translate("VPN Bypass"), 1)
+end
+
--- /dev/null
+m = Map("vpnbypass", translate("VPN Bypass Settings"), translate("Configuration of VPN Bypass Settings"))
+s = m:section(NamedSection, "config", "vpnbypass")
+
+-- General options
+o1 = s:option(Flag, "enabled", translate("Enable VPN Bypass"))
+o1.rmempty = false
+o1.default = 0
+
+-- Local Ports
+p1 = s:option(DynamicList, "localport", translate("Local Ports to Bypass"), translate("Local ports to trigger VPN Bypass"))
+p1.addremove = true
+p1.optional = true
+
+-- Remote Ports
+p2 = s:option(DynamicList, "remoteport", translate("Remote Ports to Bypass"), translate("Remote ports to trigger VPN Bypass"))
+p2.addremove = true
+p2.optional = true
+
+-- Local Subnets
+r1 = s:option(DynamicList, "localsubnet", translate("Local IP Subnets to Bypass"), translate("Local IP ranges with direct internet access (outside of the VPN tunnel)"))
+r1.addremove = true
+r1.optional = true
+
+-- Remote Subnets
+r2 = s:option(DynamicList, "remotesubnet", translate("Remote IP Subnets to Bypass"), translate("Remote IP ranges which will be accessed directly (outside of the VPN tunnel)"))
+r2.addremove = true
+r2.optional = true
+
+-- Domains
+d1 = s:option(DynamicList, "domain", translate("Domains to Bypass"), translate("Domains which will be accessed directly (outside of the VPN tunnel)"))
+d1.addremove = true
+d1.optional = true
+
+return m
+
--- /dev/null
+#!/bin/sh
+uci -q batch <<-EOF >/dev/null
+ delete ucitrack.@vpnbypass[-1]
+ add ucitrack vpnbypass
+ set ucitrack.@vpnbypass[-1].init=vpnbypass
+ commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0
+