diff options
| author | MHSanaei <ho3ein.sanaei@gmail.com> | 2024-03-12 19:14:51 +0300 |
|---|---|---|
| committer | MHSanaei <ho3ein.sanaei@gmail.com> | 2024-03-12 19:14:51 +0300 |
| commit | 8b5fe0b018af70c5302966f1d3d4d9a1cdd82dad (patch) | |
| tree | 0beea2e09b894f4ca8c63bb5d09308d7bb4b048a /web/html | |
| parent | fc23af5db651b7a86252298862509635ace161b3 (diff) | |
[subJson] add mux and direct
Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
Diffstat (limited to 'web/html')
| -rw-r--r-- | web/html/xui/settings.html | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html index 3096970f..f9f2aba7 100644 --- a/web/html/xui/settings.html +++ b/web/html/xui/settings.html @@ -295,6 +295,8 @@ <setting-list-item type="text" title='{{ i18n "pages.settings.subPath"}}' desc='{{ i18n "pages.settings.subPathDesc"}}' v-model="allSetting.subJsonPath"></setting-list-item> <setting-list-item type="text" title='{{ i18n "pages.settings.subURI"}}' desc='{{ i18n "pages.settings.subURIDesc"}}' v-model="allSetting.subJsonURI" placeholder="(http|https)://domain[:port]/path/"></setting-list-item> <setting-list-item type="switch" title='{{ i18n "pages.settings.fragment"}}' desc='{{ i18n "pages.settings.fragmentDesc"}}' v-model="fragment"></setting-list-item> + <setting-list-item type="switch" title='Mux' v-model="enableMux"></setting-list-item> + <setting-list-item type="switch" title='{{ i18n "pages.xray.directCountryConfigs"}}' desc='{{ i18n "pages.xray.directCountryConfigsDesc"}}' v-model="enableDirect"></setting-list-item> </a-list> <a-collapse v-if="fragment"> <a-collapse-panel header='{{ i18n "pages.settings.fragment"}}'> @@ -318,6 +320,36 @@ <setting-list-item type="text" title='Length' v-model="fragmentLength" placeholder="100-200"></setting-list-item> <setting-list-item type="text" title='Interval' v-model="fragmentInterval" placeholder="10-20"></setting-list-item> </a-collapse-panel> + <a-collapse-panel header='Mux' v-if="enableMux"> + <setting-list-item type="number" title='Concurrency' v-model="muxConcurrency" :min="-1" :max="1024"></setting-list-item> + <setting-list-item type="number" title='xudp Concurrency' v-model="muxXudpConcurrency" :min="-1" :max="1024"></setting-list-item> + <a-list-item style="padding: 20px"> + <a-row> + <a-col :lg="24" :xl="12"> + <a-list-item-meta title='xudp UDP 443'/> + </a-col> + <a-col :lg="24" :xl="12"> + <a-select + v-model="muxXudpProxyUDP443" + style="width: 100%" + :dropdown-class-name="themeSwitcher.currentTheme"> + <a-select-option :value="p" :label="p" v-for="p in ['reject', 'allow', 'skip']"> + [[ p ]] + </a-select-option> + </a-select> + </a-col> + </a-row> + </a-list-item> + </a-collapse-panel> + <a-collapse-panel header='{{ i18n "pages.xray.directCountryConfigs"}}' v-if="enableDirect"> + <a-list-item style="padding: 20px"> + <a-checkbox-group + v-model="directCountries" + name="Countries" + :options="countryOptions" + /> + </a-list-item> + </a-collapse-panel> </a-collapse> </a-tab-pane> </a-tabs> @@ -367,6 +399,40 @@ } } }, + defaultMux: { + enabled: true, + concurrency: 8, + xudpConcurrency: 16, + xudpProxyUDP443: "reject" + }, + defaultRules: [ + { + type: "field", + outboundTag: "direct", + domain: [ + "geosite:category-ir", + "geosite:cn" + ], + "enabled": true + }, + { + type: "field", + outboundTag: "direct", + ip: [ + "geoip:private", + "geoip:ir", + "geoip:cn" + ], + enabled: true + }, + ], + countryOptions: [ + { label: 'Private IP/Domain', value: 'private' }, + { label: '🇮🇷 Iran', value: 'ir' }, + { label: '🇨🇳 China', value: 'cn' }, + { label: '🇷🇺 Russia', value: 'ru' }, + { label: '🇻🇳 Vietnam', value: 'vn' }, + ], get remarkModel() { rm = this.allSetting.remarkModel; return rm.length>1 ? rm.substring(1).split('') : []; @@ -530,6 +596,61 @@ } } }, + enableMux: { + get: function() { return this.allSetting?.subJsonMux != ""; }, + set: function (v) { + this.allSetting.subJsonMux = v ? JSON.stringify(this.defaultMux) : ""; + } + }, + muxConcurrency: { + get: function() { return this.enableMux ? JSON.parse(this.allSetting.subJsonMux).concurrency : -1; }, + set: function(v) { + newMux = JSON.parse(this.allSetting.subJsonMux); + newMux.concurrency = v; + this.allSetting.subJsonMux = JSON.stringify(newMux); + } + }, + muxXudpConcurrency: { + get: function() { return this.enableMux ? JSON.parse(this.allSetting.subJsonMux).xudpConcurrency : -1; }, + set: function(v) { + newMux = JSON.parse(this.allSetting.subJsonMux); + newMux.xudpConcurrency = v; + this.allSetting.subJsonMux = JSON.stringify(newMux); + } + }, + muxXudpProxyUDP443: { + get: function() { return this.enableMux ? JSON.parse(this.allSetting.subJsonMux).xudpProxyUDP443 : "reject"; }, + set: function(v) { + newMux = JSON.parse(this.allSetting.subJsonMux); + newMux.xudpProxyUDP443 = v; + this.allSetting.subJsonMux = JSON.stringify(newMux); + } + }, + enableDirect: { + get: function() { return this.allSetting?.subJsonRules != ""; }, + set: function (v) { + this.allSetting.subJsonRules = v ? JSON.stringify(this.defaultRules) : ""; + } + }, + directCountries: { + get: function() { + if (!this.enableDirect) return []; + rules = JSON.parse(this.allSetting.subJsonRules); + return Array.isArray(rules) ? rules[1].ip.map(d => d.replace("geoip:","")) : []; + }, + set: function (v) { + rules = JSON.parse(this.allSetting.subJsonRules); + if (!Array.isArray(rules)) return; + rules[0].domain = []; + rules[1].ip = []; + v.forEach(d => { + category = ["cn","private"].includes(d) ? "" : "category-"; + rules[0].domain.push("geosite:"+category+d); + rules[1].ip.push("geoip:"+d); + }); + this.allSetting.subJsonRules = JSON.stringify(rules); + } + }, confAlerts: { get: function() { if (!this.allSetting) return []; |
