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
diff options
context:
space:
mode:
authorMHSanaei <ho3ein.sanaei@gmail.com>2024-02-21 13:47:52 +0300
committerMHSanaei <ho3ein.sanaei@gmail.com>2024-02-21 13:47:52 +0300
commit03b7a3479394f54a2e793f23f35e0f2b8a4b4a6a (patch)
tree72e4bd1e7201f90bc118b8ee0f2bc86d4718bb97 /web/html/xui/settings.html
parentf3eb4f055db80372298d60c073870a5af1431785 (diff)
[sub] json + fragment
Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
Diffstat (limited to 'web/html/xui/settings.html')
-rw-r--r--web/html/xui/settings.html96
1 files changed, 86 insertions, 10 deletions
diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html
index a7c72f73..c6edc506 100644
--- a/web/html/xui/settings.html
+++ b/web/html/xui/settings.html
@@ -83,7 +83,17 @@
show-icon closable
>
</a-alert>
- </transition>
+ <a-alert type="error" v-if="confAlerts.length>0" style="margin-bottom: 10px"
+ message='{{ i18n "secAlertTitle" }}'
+ color="red"
+ show-icon closable
+ >
+ <template slot="description">
+ {{ i18n "secAlertConf" }}
+ <li v-for="a in confAlerts">- [[ a ]]</li>
+ </template>
+ </a-alert>
+ </transition>
<a-space direction="vertical">
<a-card hoverable style="margin-bottom: .5rem; overflow-x: hidden;">
<a-row style="display: flex; flex-wrap: wrap; align-items: center;">
@@ -93,9 +103,7 @@
<a-button type="danger" :disabled="!saveBtnDisable" @click="restartPanel">{{ i18n "pages.settings.restartPanel" }}</a-button>
</a-space>
</a-col>
- <a-col :xs="24" :sm="14">
- <template>
- <div>
+ <a-col :xs="24" :sm="16">
<template>
<div>
<a-back-top :target="() => document.getElementById('content-layout')" visibility-height="200">
@@ -104,8 +112,6 @@
message='{{ i18n "pages.settings.infoDesc" }}'
show-icon
>
- </div>
- </template>
</div>
</template>
</a-col>
@@ -173,7 +179,6 @@
<a-col :lg="24" :xl="12">
<a-list-item-meta title="Language" />
</a-col>
-
<a-col :lg="24" :xl="12">
<template>
<a-select
@@ -243,7 +248,6 @@
<a-button type="primary" :loading="this.changeSecret" @click="updateSecret">{{ i18n "confirm" }}</a-button>
</a-form>
</a-tab-pane>
-
<a-tab-pane key="3" tab='{{ i18n "pages.settings.TGBotSettings"}}'>
<a-list item-layout="horizontal">
<setting-list-item type="switch" title='{{ i18n "pages.settings.telegramBotEnable" }}' desc='{{ i18n "pages.settings.telegramBotEnableDesc" }}' v-model="allSetting.tgBotEnable"></setting-list-item>
@@ -266,8 +270,7 @@
ref="selectBotLang"
v-model="allSetting.tgLang"
:dropdown-class-name="themeSwitcher.currentTheme"
- style="width: 100%"
- >
+ style="width: 100%">
<a-select-option :value="l.value" :label="l.value" v-for="l in supportLangs">
<span role="img" :aria-label="l.name" v-text="l.icon"></span>
&nbsp;&nbsp;<span v-text="l.name"></span>
@@ -294,6 +297,17 @@
<setting-list-item type="number" title='{{ i18n "pages.settings.subUpdates"}}' desc='{{ i18n "pages.settings.subUpdatesDesc"}}' v-model="allSetting.subUpdates"></setting-list-item>
</a-list>
</a-tab-pane>
+ <a-tab-pane key="5" tab='{{ i18n "pages.settings.subSettings" }} Json' v-if="allSetting.subEnable">
+ <a-list item-layout="horizontal">
+ <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>
+ <template v-if="fragment">
+ <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>
+ </template>
+ </a-list>
+ </a-tab-pane>
</a-tabs>
</a-space>
</a-spin>
@@ -324,6 +338,24 @@
remarkSeparators: [' ','-','_','@',':','~','|',',','.','/'],
datepickerList: [{name:'Gregorian (Standard)', value: 'gregorian'}, {name:'Jalalian (شمسی)', value: 'jalalian'}],
remarkSample: '',
+ defaultFragment: {
+ tag: "fragment",
+ protocol: "freedom",
+ settings: {
+ domainStrategy: "AsIs",
+ fragment: {
+ packets: "tlshello",
+ length: "100-200",
+ interval: "10-20"
+ }
+ },
+ streamSettings: {
+ sockopt: {
+ tcpKeepAliveIdle: 100,
+ TcpNoDelay: true
+ }
+ }
+ },
get remarkModel() {
rm = this.allSetting.remarkModel;
return rm.length>1 ? rm.substring(1).split('') : [];
@@ -452,6 +484,50 @@
}
},
},
+ computed: {
+ fragment: {
+ get: function() { return this.allSetting?.subJsonFragment != ""; },
+ set: function (v) {
+ this.allSetting.subJsonFragment = v ? JSON.stringify(this.defaultFragment) : "";
+ }
+ },
+ fragmentLength: {
+ get: function() { return this.fragment ? JSON.parse(this.allSetting.subJsonFragment).settings.fragment.length : ""; },
+ set: function(v) {
+ if (v != ""){
+ newFragment = JSON.parse(this.allSetting.subJsonFragment);
+ newFragment.settings.fragment.length = v;
+ this.allSetting.subJsonFragment = JSON.stringify(newFragment);
+ }
+ }
+ },
+ fragmentInterval: {
+ get: function() { return this.fragment ? JSON.parse(this.allSetting.subJsonFragment).settings.fragment.interval : ""; },
+ set: function(v) {
+ if (v != ""){
+ newFragment = JSON.parse(this.allSetting.subJsonFragment);
+ newFragment.settings.fragment.interval = v;
+ this.allSetting.subJsonFragment = JSON.stringify(newFragment);
+ }
+ }
+ },
+ confAlerts: {
+ get: function() {
+ if (!this.allSetting) return [];
+ var alerts = []
+ if (this.allSetting.port == 54321) alerts.push('{{ i18n "pages.settings.panelPort"}}');
+ panelPath = window.location.pathname.split('/').length<4
+ if (panelPath && this.allSetting.webBasePath == '/') alerts.push('{{ i18n "pages.settings.panelSettings"}} {{ i18n "pages.settings.panelUrlPath"}}');
+ if (this.allSetting.subEnable) {
+ subPath = this.allSetting.subURI.length >0 ? new URL(this.allSetting.subURI).pathname : this.allSetting.subPath;
+ if (subPath == '/sub/') alerts.push('{{ i18n "pages.settings.subSettings"}} {{ i18n "pages.settings.subPath"}}');
+ subJsonPath = this.allSetting.subJsonURI.length >0 ? new URL(this.allSetting.subJsonURI).pathname : this.allSetting.subJsonPath;
+ if (subJsonPath == '/json/') alerts.push('JSON {{ i18n "pages.settings.subPath"}}');
+ }
+ return alerts
+ }
+ }
+ },
async mounted() {
if (window.location.protocol !== "https:") {
this.showAlert = true;