diff --git a/luci-app-nikki/Makefile b/luci-app-nikki/Makefile index dd754c720..f3b3be45e 100644 --- a/luci-app-nikki/Makefile +++ b/luci-app-nikki/Makefile @@ -1,6 +1,6 @@ include $(TOPDIR)/rules.mk -PKG_VERSION:=1.17.5 +PKG_VERSION:=1.18.0 LUCI_TITLE:=LuCI Support for nikki LUCI_DEPENDS:=+luci-base +nikki diff --git a/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js b/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js index 672c57b1e..8900b2743 100644 --- a/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js +++ b/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js @@ -10,6 +10,9 @@ const subscriptionsDir = `${homeDir}/subscriptions`; const mixinFilePath = `${homeDir}/mixin.yaml`; const runDir = `${homeDir}/run`; const runProfilePath = `${runDir}/config.yaml`; +const providersDir = `${runDir}/providers`; +const ruleProvidersDir = `${providersDir}/rule`; +const proxyProvidersDir = `${providersDir}/proxy`; const logDir = `/var/log/nikki`; const appLogPath = `${logDir}/app.log`; const coreLogPath = `${logDir}/core.log`; @@ -21,6 +24,8 @@ return baseclass.extend({ homeDir: homeDir, profilesDir: profilesDir, subscriptionsDir: subscriptionsDir, + ruleProvidersDir: ruleProvidersDir, + proxyProvidersDir: proxyProvidersDir, mixinFilePath: mixinFilePath, runDir: runDir, appLogPath: appLogPath, @@ -56,6 +61,14 @@ return baseclass.extend({ return L.resolveDefault(fs.list(this.profilesDir), []); }, + listRuleProviders: function () { + return L.resolveDefault(fs.list(this.ruleProvidersDir), []); + }, + + listProxyProviders: function () { + return L.resolveDefault(fs.list(this.proxyProvidersDir), []); + }, + updateSubscription: function (section_id) { return fs.exec_direct('/usr/libexec/nikki-call', ['subscription', 'update', section_id]); }, diff --git a/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js b/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js index 3d0096518..698b37f96 100644 --- a/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js +++ b/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js @@ -9,12 +9,16 @@ return view.extend({ load: function () { return Promise.all([ uci.load('nikki'), - nikki.listProfiles() + nikki.listProfiles(), + nikki.listRuleProviders(), + nikki.listProxyProviders(), ]); }, render: function (data) { const subscriptions = uci.sections('nikki', 'subscription'); const profiles = data[1]; + const ruleProviders = data[2]; + const proxyProviders = data[3]; let m, s, o; @@ -33,6 +37,14 @@ return view.extend({ o.value(nikki.subscriptionsDir + '/' + subscription['.name'] + '.yaml', _('Subscription:') + subscription.name); }; + for (const ruleProvider of ruleProviders) { + o.value(nikki.ruleProvidersDir + '/' + ruleProvider.name, _('Rule Provider:') + ruleProvider.name); + }; + + for (const proxyProvider of proxyProviders) { + o.value(nikki.proxyProvidersDir + '/' + proxyProvider.name, _('Proxy Provider:') + proxyProvider.name); + }; + o.value(nikki.mixinFilePath, _('File for Mixin')); o.value(nikki.runProfilePath, _('Profile for Startup')); o.value(nikki.reservedIPNFT, _('File for Reserved IP')); diff --git a/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js b/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js index 813ae1774..8f8d1999b 100644 --- a/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js +++ b/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js @@ -311,9 +311,11 @@ return view.extend({ o.rmempty = false; o = s.taboption('sniffer', form.SectionValue, '_sniffer_sniffs', form.TableSection, 'sniff', _('Sniff By Protocol')); + o.retain = true; + o.depends('sniffer_sniff', '1'); + o.subsection.anonymous = true; o.subsection.addremove = false; - o.depends('sniffer_sniff', '1'); so = o.subsection.option(form.Flag, 'enabled', _('Enable')); so.rmempty = false; @@ -330,6 +332,122 @@ return view.extend({ so = o.subsection.option(form.Flag, 'overwrite_destination', _('Overwrite Destination')); so.rmempty = false; + s.tab('rule', _('Rule Config')); + + o = s.taboption('rule', form.Flag, 'rule_provider', '*' + ' ' + _('Append Rule Provider')); + o.rmempty = false; + + o = s.taboption('rule', form.SectionValue, '_rule_providers', form.GridSection, 'rule_provider', _('Edit Rule Providers')); + o.retain = true; + o.depends('rule_provider', '1'); + + o.subsection.anonymous = true; + o.subsection.addremove = true; + o.subsection.sortable = true; + + so = o.subsection.option(form.Flag, 'enabled', _('Enable')); + so.default = 1; + so.editable = true; + so.modalonly = false; + so.rmempty = false; + + so = o.subsection.option(form.Value, 'name', _('Name')); + so.rmempty = false; + + so = o.subsection.option(form.ListValue, 'type', _('Type')); + so.default = 'http'; + so.rmempty = false; + so.value('http'); + so.value('file'); + + so = o.subsection.option(form.Value, 'url', _('Url')); + so.modalonly = true; + so.rmempty = false; + so.depends('type', 'http'); + + so = o.subsection.option(form.Value, 'node', _('Node')); + so.default = 'DIRECT'; + so.modalonly = true; + so.depends('type', 'http'); + so.value('GLOBAL'); + so.value('DIRECT'); + + so = o.subsection.option(form.Value, 'file_size_limit', _('File Size Limit')); + so.datatype = 'uinteger'; + so.default = 0; + so.modalonly = true; + so.depends('type', 'http'); + + so = o.subsection.option(form.FileUpload, 'file_path', _('File Path')); + so.modalonly = true; + so.rmempty = false; + so.root_directory = nikki.ruleProvidersDir; + so.depends('type', 'file'); + + so = o.subsection.option(form.ListValue, 'file_format', _('File Format')); + so.default = 'yaml'; + so.value('mrs'); + so.value('yaml'); + so.value('text'); + + so = o.subsection.option(form.ListValue, 'behavior', _('Behavior')); + so.default = 'classical'; + so.rmempty = false; + so.value('classical'); + so.value('domain'); + so.value('ipcidr'); + + so = o.subsection.option(form.Value, 'update_interval', _('Update Interval')); + so.datatype = 'uinteger'; + so.default = 0; + so.modalonly = true; + so.depends('type', 'http'); + + o = s.taboption('rule', form.Flag, 'rule', '*' + ' ' + _('Append Rule')); + o.rmempty = false; + + o = s.taboption('rule', form.SectionValue, '_rules', form.TableSection, 'rule', _('Edit Rules')); + o.retain = true; + o.depends('rule', '1'); + + o.subsection.anonymous = true; + o.subsection.addremove = true; + o.subsection.sortable = true; + + so = o.subsection.option(form.Flag, 'enabled', _('Enable')); + so.default = 1; + so.rmempty = false; + + so = o.subsection.option(form.Value, 'type', _('Type')); + so.optional = true; + so.rmempty = true; + so.value('RULE-SET', _('Rule Set')); + so.value('DOMAIN', _('Domain Name')); + so.value('DOMAIN-SUFFIX', _('Domain Name Suffix')); + so.value('DOMAIN-KEYWORD', _('Domain Name Keyword')); + so.value('DOMAIN-REGEX', _('Domain Name Regex')); + so.value('IP-CIDR', _('Destination IP')); + so.value('DST-PORT', _('Destination Port')); + so.value('PROCESS-NAME', _('Process Name')); + so.value('GEOSITE', _('Domain Name Geo')); + so.value('GEOIP', _('Destination IP Geo')); + + so = o.subsection.option(form.Value, 'match', _('Matcher')); + so.rmempty = false; + + so = o.subsection.option(form.Value, 'node', _('Node')); + so.default = 'GLOBAL'; + so.value('GLOBAL'); + so.value('DIRECT'); + so.value('REJECT'); + so.value('REJECT-DROP'); + + so = o.subsection.option(form.Flag, 'no_resolve', _('No Resolve')); + so.rmempty = false; + so.depends('type', 'IP-CIDR'); + so.depends('type', 'IP-CIDR6'); + so.depends('type', 'GEOIP'); + s.tab('geox', _('GeoX Config')); o = s.taboption('geox', form.ListValue, 'geoip_format', _('GeoIP Format')); diff --git a/luci-app-nikki/po/templates/nikki.pot b/luci-app-nikki/po/templates/nikki.pot index a8fc655ca..bf52f190d 100644 --- a/luci-app-nikki/po/templates/nikki.pot +++ b/luci-app-nikki/po/templates/nikki.pot @@ -44,10 +44,22 @@ msgstr "" msgid "App Version" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:406 +msgid "Append Rule" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:337 +msgid "Append Rule Provider" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:43 msgid "Auto" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:393 +msgid "Behavior" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:199 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66 msgid "Block Mode" @@ -73,7 +85,7 @@ msgstr "" msgid "Bypass User" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:25 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:29 msgid "Choose File" msgstr "" @@ -123,6 +135,18 @@ msgstr "" msgid "DNS Port" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:429 +msgid "Destination IP" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:433 +msgid "Destination IP Geo" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:430 +msgid "Destination Port" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:134 msgid "Destination TCP Port to Proxy" msgstr "" @@ -164,9 +188,26 @@ msgid "DoH Prefer HTTP/3" msgstr "" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:237 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:425 msgid "Domain Name" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:432 +msgid "Domain Name Geo" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:427 +msgid "Domain Name Keyword" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:428 +msgid "Domain Name Regex" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:426 +msgid "Domain Name Suffix" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:117 msgid "Edit Authentications" msgstr "" @@ -191,11 +232,19 @@ msgstr "" msgid "Edit Nameservers" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:340 +msgid "Edit Rule Providers" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:409 +msgid "Edit Rules" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/profile.js:32 msgid "Edit Subscription" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:23 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:27 #: applications/luci-app-nikki/root/usr/share/luci/menu.d/luci-app-nikki.json:45 msgid "Editor" msgstr "" @@ -208,8 +257,10 @@ msgstr "" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:253 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:276 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:286 -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:318 -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:320 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:348 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:417 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:484 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:31 msgid "Enable" msgstr "" @@ -242,20 +293,32 @@ msgstr "" msgid "Fast Reload" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:36 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:387 +msgid "File Format" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:381 +msgid "File Path" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:375 +msgid "File Size Limit" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:48 msgid "File for Mixin" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:38 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:50 msgid "File for Reserved IP" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:39 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:51 msgid "File for Reserved IP6" msgstr "" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:103 -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:29 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:33 msgid "File:" msgstr "" @@ -275,39 +338,39 @@ msgstr "" msgid "General Config" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:339 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:457 msgid "GeoData Loader" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:335 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:453 msgid "GeoIP Format" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:352 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:470 msgid "GeoIP(ASN) Url" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:349 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:467 msgid "GeoIP(DAT) Url" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:346 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:464 msgid "GeoIP(MMDB) Url" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:343 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:461 msgid "GeoSite Url" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:355 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:473 msgid "GeoX Auto Update" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:333 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:451 msgid "GeoX Config" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:358 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:476 msgid "GeoX Update Interval" msgstr "" @@ -390,10 +453,11 @@ msgid "Match Process" msgstr "" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:435 msgid "Matcher" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:341 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:459 msgid "Memory Conservative Loader" msgstr "" @@ -406,7 +470,7 @@ msgstr "" msgid "Mixin Config" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:364 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:482 msgid "Mixin File Content" msgstr "" @@ -419,6 +483,10 @@ msgstr "" msgid "Mode" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:354 +msgid "Name" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:282 msgid "Nameserver" @@ -429,6 +497,15 @@ msgstr "" msgid "Nikki" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:445 +msgid "No Resolve" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:368 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:438 +msgid "Node" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:15 msgid "Not Running" msgstr "" @@ -450,7 +527,7 @@ msgid "Overwrite DNS Hijack" msgstr "" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295 -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:330 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:332 msgid "Overwrite Destination" msgstr "" @@ -486,11 +563,11 @@ msgstr "" msgid "Password" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:484 msgid "Please go to the editor tab to edit the file for mixin" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:327 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:329 msgid "Port" msgstr "" @@ -498,16 +575,20 @@ msgstr "" msgid "Prefer" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:431 +msgid "Process Name" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/profile.js:18 #: applications/luci-app-nikki/root/usr/share/luci/menu.d/luci-app-nikki.json:21 msgid "Profile" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:37 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:49 msgid "Profile for Startup" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:321 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:323 msgid "Protocol" msgstr "" @@ -516,6 +597,10 @@ msgstr "" msgid "Proxy Config" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:45 +msgid "Proxy Provider:" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:35 msgid "Redirect Mode" msgstr "" @@ -544,10 +629,22 @@ msgstr "" msgid "Router Proxy" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:335 +msgid "Rule Config" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:39 msgid "Rule Mode" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:41 +msgid "Rule Provider:" +msgstr "" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:424 +msgid "Rule Set" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:15 msgid "Running" msgstr "" @@ -569,8 +666,8 @@ msgstr "" msgid "Scroll To Bottom" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:100 -#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:118 +#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:113 +#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:131 msgid "Service is not running." msgstr "" @@ -594,7 +691,7 @@ msgstr "" msgid "Stack" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:340 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:458 msgid "Standard Loader" msgstr "" @@ -619,7 +716,7 @@ msgid "Subscription Url" msgstr "" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:107 -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:33 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:37 msgid "Subscription:" msgstr "" @@ -674,6 +771,8 @@ msgid "Transparent Proxy with Mihomo on OpenWrt." msgstr "" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:256 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:357 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:421 msgid "Type" msgstr "" @@ -693,8 +792,8 @@ msgstr "" msgid "Unify Delay" msgstr "" -#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:80 -#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:84 +#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:93 +#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:97 msgid "Unknown" msgstr "" @@ -710,10 +809,18 @@ msgstr "" msgid "Update Dashboard" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:400 +msgid "Update Interval" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/profile.js:20 msgid "Upload Profile" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:363 +msgid "Url" +msgstr "" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:220 msgid "Use Hosts" msgstr "" diff --git a/luci-app-nikki/po/zh_Hans/nikki.po b/luci-app-nikki/po/zh_Hans/nikki.po index 3b987b2a3..16cb72a23 100644 --- a/luci-app-nikki/po/zh_Hans/nikki.po +++ b/luci-app-nikki/po/zh_Hans/nikki.po @@ -51,10 +51,22 @@ msgstr "插件日志" msgid "App Version" msgstr "插件版本" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:406 +msgid "Append Rule" +msgstr "追加规则" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:337 +msgid "Append Rule Provider" +msgstr "追加规则提供者" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:43 msgid "Auto" msgstr "自动" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:393 +msgid "Behavior" +msgstr "行为" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:199 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:66 msgid "Block Mode" @@ -80,7 +92,7 @@ msgstr "绕过用户组" msgid "Bypass User" msgstr "绕过用户" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:25 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:29 msgid "Choose File" msgstr "选择文件" @@ -130,6 +142,18 @@ msgstr "DNS 模式" msgid "DNS Port" msgstr "DNS 端口" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:429 +msgid "Destination IP" +msgstr "目标 IP" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:433 +msgid "Destination IP Geo" +msgstr "目标 IP(Geo)" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:430 +msgid "Destination Port" +msgstr "目标端口" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:134 msgid "Destination TCP Port to Proxy" msgstr "要代理的 TCP 目标端口" @@ -171,9 +195,26 @@ msgid "DoH Prefer HTTP/3" msgstr "DoH 优先 HTTP/3" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:237 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:425 msgid "Domain Name" msgstr "域名" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:432 +msgid "Domain Name Geo" +msgstr "域名(Geo)" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:427 +msgid "Domain Name Keyword" +msgstr "域名(关键字)" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:428 +msgid "Domain Name Regex" +msgstr "域名(正则表达式)" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:426 +msgid "Domain Name Suffix" +msgstr "域名(后缀)" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:117 msgid "Edit Authentications" msgstr "编辑身份验证" @@ -198,11 +239,19 @@ msgstr "编辑 DNS 服务器查询策略" msgid "Edit Nameservers" msgstr "编辑 DNS 服务器" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:340 +msgid "Edit Rule Providers" +msgstr "编辑规则提供者" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:409 +msgid "Edit Rules" +msgstr "编辑规则" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/profile.js:32 msgid "Edit Subscription" msgstr "编辑订阅" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:23 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:27 #: applications/luci-app-nikki/root/usr/share/luci/menu.d/luci-app-nikki.json:45 msgid "Editor" msgstr "编辑器" @@ -215,8 +264,10 @@ msgstr "编辑器" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:253 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:276 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:286 -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:318 -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:320 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:348 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:417 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:484 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:31 msgid "Enable" msgstr "启用" @@ -249,20 +300,32 @@ msgstr "Fake-IP 范围" msgid "Fast Reload" msgstr "快速重载" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:36 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:387 +msgid "File Format" +msgstr "文件格式" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:381 +msgid "File Path" +msgstr "文件路径" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:375 +msgid "File Size Limit" +msgstr "文件大小限制" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:48 msgid "File for Mixin" msgstr "用于混入的文件" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:38 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:50 msgid "File for Reserved IP" msgstr "IPv4 保留地址" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:39 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:51 msgid "File for Reserved IP6" msgstr "IPv6 保留地址" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:103 -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:29 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:33 msgid "File:" msgstr "文件:" @@ -282,39 +345,39 @@ msgstr "分段最大长度" msgid "General Config" msgstr "全局配置" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:339 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:457 msgid "GeoData Loader" msgstr "GeoData 加载器" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:335 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:453 msgid "GeoIP Format" msgstr "GeoIP 格式" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:352 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:470 msgid "GeoIP(ASN) Url" msgstr "GeoIP(ASN) 下载地址" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:349 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:467 msgid "GeoIP(DAT) Url" msgstr "GeoIP(DAT) 下载地址" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:346 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:464 msgid "GeoIP(MMDB) Url" msgstr "GeoIP(MMDB) 下载地址" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:343 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:461 msgid "GeoSite Url" msgstr "GeoSite 下载地址" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:355 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:473 msgid "GeoX Auto Update" msgstr "定时更新GeoX文件" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:333 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:451 msgid "GeoX Config" msgstr "GeoX 配置" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:358 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:476 msgid "GeoX Update Interval" msgstr "GeoX 文件更新间隔" @@ -397,10 +460,11 @@ msgid "Match Process" msgstr "匹配进程" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:279 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:435 msgid "Matcher" msgstr "匹配" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:341 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:459 msgid "Memory Conservative Loader" msgstr "为内存受限设备优化的加载器" @@ -413,7 +477,7 @@ msgstr "混合端口" msgid "Mixin Config" msgstr "混入配置" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:364 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:482 msgid "Mixin File Content" msgstr "混入文件内容" @@ -426,6 +490,10 @@ msgstr "混入选项" msgid "Mode" msgstr "模式" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:354 +msgid "Name" +msgstr "名称" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:263 #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:282 msgid "Nameserver" @@ -436,6 +504,15 @@ msgstr "DNS 服务器" msgid "Nikki" msgstr "" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:445 +msgid "No Resolve" +msgstr "不解析" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:368 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:438 +msgid "Node" +msgstr "节点" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:15 msgid "Not Running" msgstr "未在运行" @@ -457,7 +534,7 @@ msgid "Overwrite DNS Hijack" msgstr "覆盖 DNS 劫持" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:295 -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:330 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:332 msgid "Overwrite Destination" msgstr "将嗅探结果作为连接目标" @@ -493,11 +570,11 @@ msgstr "覆盖按协议嗅探" msgid "Password" msgstr "密码" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:366 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:484 msgid "Please go to the editor tab to edit the file for mixin" msgstr "请前往编辑器标签编辑用于混入的文件" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:327 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:329 msgid "Port" msgstr "端口" @@ -505,16 +582,20 @@ msgstr "端口" msgid "Prefer" msgstr "优先" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:431 +msgid "Process Name" +msgstr "进程名" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/profile.js:18 #: applications/luci-app-nikki/root/usr/share/luci/menu.d/luci-app-nikki.json:21 msgid "Profile" msgstr "配置文件" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:37 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:49 msgid "Profile for Startup" msgstr "用于启动的配置文件" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:321 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:323 msgid "Protocol" msgstr "协议" @@ -523,6 +604,10 @@ msgstr "协议" msgid "Proxy Config" msgstr "代理配置" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:45 +msgid "Proxy Provider:" +msgstr "代理提供者:" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/proxy.js:35 msgid "Redirect Mode" msgstr "Redirect 模式" @@ -551,10 +636,22 @@ msgstr "重启服务" msgid "Router Proxy" msgstr "路由器代理" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:335 +msgid "Rule Config" +msgstr "规则配置" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:39 msgid "Rule Mode" msgstr "规则模式" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:41 +msgid "Rule Provider:" +msgstr "规则提供者:" + +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:424 +msgid "Rule Set" +msgstr "规则集" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:15 msgid "Running" msgstr "运行中" @@ -576,8 +673,8 @@ msgstr "定时重启" msgid "Scroll To Bottom" msgstr "滚动到底部" -#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:100 -#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:118 +#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:113 +#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:131 msgid "Service is not running." msgstr "服务未在运行。" @@ -601,7 +698,7 @@ msgstr "嗅探器配置" msgid "Stack" msgstr "栈" -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:340 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:458 msgid "Standard Loader" msgstr "标准加载器" @@ -626,7 +723,7 @@ msgid "Subscription Url" msgstr "订阅链接" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/app.js:107 -#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:33 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/editor.js:37 msgid "Subscription:" msgstr "订阅:" @@ -681,6 +778,8 @@ msgid "Transparent Proxy with Mihomo on OpenWrt." msgstr "在 OpenWrt 上使用 Mihomo 进行透明代理。" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:256 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:357 +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:421 msgid "Type" msgstr "类型" @@ -700,8 +799,8 @@ msgstr "UI 下载地址" msgid "Unify Delay" msgstr "统一延迟" -#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:80 -#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:84 +#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:93 +#: applications/luci-app-nikki/htdocs/luci-static/resources/tools/nikki.js:97 msgid "Unknown" msgstr "未知" @@ -717,10 +816,18 @@ msgstr "更新时间" msgid "Update Dashboard" msgstr "更新面板" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:400 +msgid "Update Interval" +msgstr "更新间隔" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/profile.js:20 msgid "Upload Profile" msgstr "上传配置文件" +#: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:363 +msgid "Url" +msgstr "下载地址" + #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:220 msgid "Use Hosts" msgstr "使用 Hosts" @@ -740,3 +847,18 @@ msgstr "用户代理(UA)" #: applications/luci-app-nikki/htdocs/luci-static/resources/view/nikki/mixin.js:128 msgid "Username" msgstr "用户名" + +#~ msgid "File" +#~ msgstr "文件" + +#~ msgid "Proxy Provider" +#~ msgstr "代理提供者" + +#~ msgid "Rule Provider" +#~ msgstr "规则提供者" + +#~ msgid ": " +#~ msgstr ":" + +#~ msgid "Custom" +#~ msgstr "自定义" diff --git a/luci-app-nikki/root/usr/share/rpcd/acl.d/luci-app-nikki.json b/luci-app-nikki/root/usr/share/rpcd/acl.d/luci-app-nikki.json index e9a23a7f0..9c6dda901 100644 --- a/luci-app-nikki/root/usr/share/rpcd/acl.d/luci-app-nikki.json +++ b/luci-app-nikki/root/usr/share/rpcd/acl.d/luci-app-nikki.json @@ -15,6 +15,8 @@ "/etc/nikki/subscriptions/*.yml": ["read"], "/etc/nikki/mixin.yaml": ["read"], "/etc/nikki/run/config.yaml": ["read"], + "/etc/nikki/run/providers/rule/*": ["read"], + "/etc/nikki/run/providers/proxy/*": ["read"], "/etc/nikki/nftables/reserved_ip.nft": ["read"], "/etc/nikki/nftables/reserved_ip6.nft": ["read"], "/var/log/nikki/*.log": ["read"], @@ -30,6 +32,8 @@ "/etc/nikki/subscriptions/*.yml": ["write"], "/etc/nikki/mixin.yaml": ["write"], "/etc/nikki/run/config.yaml": ["write"], + "/etc/nikki/run/providers/rule/*": ["write"], + "/etc/nikki/run/providers/proxy/*": ["write"], "/etc/nikki/nftables/reserved_ip.nft": ["write"], "/etc/nikki/nftables/reserved_ip6.nft": ["write"] }