Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/web/html
diff options
context:
space:
mode:
authorMHSanaei <ho3ein.sanaei@gmail.com>2024-03-12 19:14:51 +0300
committerMHSanaei <ho3ein.sanaei@gmail.com>2024-03-12 19:14:51 +0300
commit8b5fe0b018af70c5302966f1d3d4d9a1cdd82dad (patch)
tree0beea2e09b894f4ca8c63bb5d09308d7bb4b048a /web/html
parentfc23af5db651b7a86252298862509635ace161b3 (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.html121
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 [];