From 602aa8a12741a7b76ba7ca962d810c3638187861 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 15 May 2018 17:20:49 +0200 Subject: [PATCH] Add bypass IPs and network support --- .../luasrc/controller/omr-bypass.lua | 22 +++++++++++--- .../luasrc/view/omr-bypass/bypass.htm | 12 ++++++-- luci-app-omr-bypass/po/fr/omr-bypass.po | 20 ++++++++----- .../po/templates/omr-bypass.pot | 4 +-- .../root/etc/config/omr-bypass | 1 + .../root/etc/init.d/omr-bypass | 29 +++++++++++++++++++ .../root/etc/uci-defaults/41_omr-bypass | 11 +++++++ 7 files changed, 83 insertions(+), 16 deletions(-) create mode 100644 luci-app-omr-bypass/root/etc/config/omr-bypass create mode 100755 luci-app-omr-bypass/root/etc/init.d/omr-bypass create mode 100644 luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass diff --git a/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua b/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua index 1b29d4cc7..7bb049a4a 100644 --- a/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua +++ b/luci-app-omr-bypass/luasrc/controller/omr-bypass.lua @@ -1,4 +1,5 @@ local ucic = luci.model.uci.cursor() +local dt = require "luci.cbi.datatypes" module("luci.controller.omr-bypass", package.seeall) function index() @@ -12,16 +13,29 @@ function bypass_add() if (type(hosts) ~= "table") then hosts = {hosts} end - local ipset = "" + local domains_ipset = "" + local ip_ipset = {} for _, k in pairs(hosts) do if k ~= "" then - ipset = ipset .. '/' .. k + if dt.ipaddr(k) then + table.insert(ip_ipset, k) + else + domains_ipset = domains_ipset .. '/' .. k + end end end - ucic:set_list("dhcp",ucic:get_first("dhcp","dnsmasq"),"ipset",ipset .. "/ss_rules_dst_bypass") + ucic:delete("omr-bypass","ips","ip") + if table.getn(ip_ipset) > 0 then + for _, i in pairs(ip_ipset) do + ucic:set_list("omr-bypass","ips","ip",ip_ipset) + end + end + ucic:save("omr-bypass") + ucic:commit("omr-bypass") + ucic:set_list("dhcp",ucic:get_first("dhcp","dnsmasq"),"ipset",domains_ipset .. "/ss_rules_dst_bypass") ucic:save("dhcp") ucic:commit("dhcp") - luci.sys.exec("/etc/init.d/dnsmasq restart") + --luci.sys.exec("/etc/init.d/dnsmasq restart") luci.http.redirect(luci.dispatcher.build_url("admin/services/omr-bypass")) return end \ No newline at end of file diff --git a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm index 2ac8b2b00..ab8442f04 100644 --- a/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm +++ b/luci-app-omr-bypass/luasrc/view/omr-bypass/bypass.htm @@ -5,6 +5,7 @@ <% local uci = require("luci.model.uci").cursor() local hosts = uci:get_list("dhcp", uci:get_first("dhcp","dnsmasq"), "ipset") + local ips = uci:get_list("omr-bypass", "ips", "ip") %> <% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %> @@ -12,15 +13,14 @@

<%:Bypass%>

-
<%:Set domains name you want to bypass.%>
+
<%:Set domains name, ips or networks you want to bypass.%>
- +
<% local j = 1 for _ , host in pairs(hosts) do -%><%=host%><% j = j+1 for hst in string.gmatch(host,"([^/]*)/") do if hst ~= "" then @@ -30,6 +30,12 @@ end end end + for _ , ip in pairs(ips) do + j = j+1 +%> +
+<% + end if j == 1 then %>
diff --git a/luci-app-omr-bypass/po/fr/omr-bypass.po b/luci-app-omr-bypass/po/fr/omr-bypass.po index ee2c3b593..188c4b691 100644 --- a/luci-app-omr-bypass/po/fr/omr-bypass.po +++ b/luci-app-omr-bypass/po/fr/omr-bypass.po @@ -1,25 +1,31 @@ msgid "" msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" +"Last-Translator: Ycarus \n" "Language-Team: \n" +"Language: fr\n" "MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.6\n" -"Last-Translator: Ycarus \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: fr\n" msgid "Bypass" msgstr "Contourne" -msgid "Domains" -msgstr "Domaines" +msgid "Domain, IP or network" +msgstr "Domaine, IP ou réseau" msgid "OMR-Bypass" msgstr "" -msgid "Set domains name you want to bypass." -msgstr "Configurer les domaines que vous voulez contourner." +msgid "Set domains name, ips or networks you want to bypass." +msgstr "Configurer les domaines, adresses IPs ou réseaux que vous voulez contourner." + +#~ msgid "Domains" +#~ msgstr "Domaines" + +#~ msgid "Set domains name you want to bypass." +#~ msgstr "Configurer les domaines que vous voulez contourner." diff --git a/luci-app-omr-bypass/po/templates/omr-bypass.pot b/luci-app-omr-bypass/po/templates/omr-bypass.pot index a69225fe3..1937c7ac0 100644 --- a/luci-app-omr-bypass/po/templates/omr-bypass.pot +++ b/luci-app-omr-bypass/po/templates/omr-bypass.pot @@ -4,11 +4,11 @@ msgstr "Content-Type: text/plain; charset=UTF-8" msgid "Bypass" msgstr "" -msgid "Domains" +msgid "Domain, IP or network" msgstr "" msgid "OMR-Bypass" msgstr "" -msgid "Set domains name you want to bypass." +msgid "Set domains name, ips or networks you want to bypass." msgstr "" diff --git a/luci-app-omr-bypass/root/etc/config/omr-bypass b/luci-app-omr-bypass/root/etc/config/omr-bypass new file mode 100644 index 000000000..dd5fe7665 --- /dev/null +++ b/luci-app-omr-bypass/root/etc/config/omr-bypass @@ -0,0 +1 @@ +config bypass 'ips' \ No newline at end of file diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass new file mode 100755 index 000000000..f6f37059e --- /dev/null +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -0,0 +1,29 @@ +#!/bin/sh /etc/rc.common +# shellcheck disable=SC2039 +# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : + +# shellcheck disable=SC2034 +{ + START=90 + STOP=10 + USE_PROCD=1 +} + +_bypass_ip() { + local ip="$1" + ipset add ss_rules_dst_bypass $ip +} + +start_service() { + config_load omr-bypass + config_list_foreach ips "ip" _bypass_ip +} + +service_triggers() { + procd_add_reload_trigger omr-bypass shadowsocks-libev +} + +reload_service() { + stop + start +} diff --git a/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass b/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass new file mode 100644 index 000000000..bd9381dc5 --- /dev/null +++ b/luci-app-omr-bypass/root/etc/uci-defaults/41_omr-bypass @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@omr-bypass[-1] + add ucitrack omr-bypass + set ucitrack.@omr-bypass[-1].init=omr-bypass + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0