diff options
| author | Alireza Ahmadi <alireza7@gmail.com> | 2023-12-08 20:45:21 +0300 |
|---|---|---|
| committer | Alireza Ahmadi <alireza7@gmail.com> | 2023-12-08 20:45:21 +0300 |
| commit | 5fbf8f0d535b131ad6de22a0d1dda0f2167d5ee0 (patch) | |
| tree | c2da678a5d851fe5349644468427c5ba45e24d3d /web/html/xui | |
| parent | bcc897640e68f7a731d39bee04c8930d7d7196c6 (diff) | |
Expand multiDomain to externalProxy #1300
Diffstat (limited to 'web/html/xui')
| -rw-r--r-- | web/html/xui/client_modal.html | 13 | ||||
| -rw-r--r-- | web/html/xui/form/inbound.html | 1 | ||||
| -rw-r--r-- | web/html/xui/form/stream/external_proxy.html | 32 | ||||
| -rw-r--r-- | web/html/xui/form/tls_settings.html | 30 | ||||
| -rw-r--r-- | web/html/xui/inbound_info_modal.html | 25 | ||||
| -rw-r--r-- | web/html/xui/inbound_modal.html | 28 | ||||
| -rw-r--r-- | web/html/xui/inbounds.html | 46 |
7 files changed, 67 insertions, 108 deletions
diff --git a/web/html/xui/client_modal.html b/web/html/xui/client_modal.html index 265a2cac..1bc48a6a 100644 --- a/web/html/xui/client_modal.html +++ b/web/html/xui/client_modal.html @@ -38,7 +38,7 @@ this.isEdit = isEdit; this.dbInbound = new DBInbound(dbInbound); this.inbound = dbInbound.toInbound(); - this.clients = this.getClients(this.inbound.protocol, this.inbound.settings); + this.clients = this.inbound.clients; this.index = index === null ? this.clients.length : index; this.delayedStart = false; if (isEdit) { @@ -51,16 +51,7 @@ } this.clientStats = this.dbInbound.clientStats.find(row => row.email === this.clients[this.index].email); this.confirm = confirm; - }, - getClients(protocol, clientSettings) { - switch (protocol) { - case Protocols.VMESS: return clientSettings.vmesses; - case Protocols.VLESS: return clientSettings.vlesses; - case Protocols.TROJAN: return clientSettings.trojans; - case Protocols.SHADOWSOCKS: return clientSettings.shadowsockses; - default: return null; - } - }, + }, getClientId(protocol, client) { switch (protocol) { case Protocols.TROJAN: return client.password; diff --git a/web/html/xui/form/inbound.html b/web/html/xui/form/inbound.html index 40a96d1e..b46ce951 100644 --- a/web/html/xui/form/inbound.html +++ b/web/html/xui/form/inbound.html @@ -96,6 +96,7 @@ <!-- stream settings --> <template v-if="inbound.canEnableStream()"> {{template "form/streamSettings"}} + {{template "form/externalProxy" }} </template> <!-- tls settings --> diff --git a/web/html/xui/form/stream/external_proxy.html b/web/html/xui/form/stream/external_proxy.html new file mode 100644 index 00000000..bb80070c --- /dev/null +++ b/web/html/xui/form/stream/external_proxy.html @@ -0,0 +1,32 @@ +{{define "form/externalProxy"}} +<a-form layout="inline"> + <a-divider style="margin:0;"></a-divider> + <a-form-item label="External Proxy"> + <a-switch v-model="externalProxy"></a-switch> + <a-button v-if="externalProxy" type="primary" style="margin-left: 10px" size="small" @click="inbound.stream.externalProxy.push({forceTls: 'same', dest: '', port: 443, remark: ''})">+</a-button> + </a-form-item> + <table width="100%" class="ant-table-tbody" v-if="externalProxy" style="margin-bottom:5px"> + <tr style="line-height: 40px;"> + <td width="100%"> + <a-input-group style="margin: 0 5px;" compact v-for="(row, index) in inbound.stream.externalProxy"> + <template> + <a-tooltip title="Force TLS"> + <a-select v-model="row.forceTls" style="width:20%; margin: 0px" :dropdown-class-name="themeSwitcher.currentTheme"> + <a-select-option value="same">{{ i18n "pages.inbounds.same" }}</a-select-option> + <a-select-option value="none">{{ i18n "none" }}</a-select-option> + <a-select-option value="tls">TLS</a-select-option> + </a-select> + </a-tooltip> + </template> + <a-input style="width: 35%" v-model.trim="row.dest" placeholder='{{ i18n "host" }}'></a-input> + <a-tooltip title='{{ i18n "pages.inbounds.port" }}'> + <a-input-number style="width: 15%;" v-model.number="row.port" min="1" max="65531"></a-input-number> + </a-tooltip> + <a-input style="width: 20%" v-model.trim="row.remark" placeholder='{{ i18n "remark" }}'></a-input> + <a-button style="width: 10%; margin: 0px" @click="inbound.stream.externalProxy.splice(index, 1)">-</a-button> + </a-input-group> + </td> + </tr> + </table> +</a-form> +{{end}} diff --git a/web/html/xui/form/tls_settings.html b/web/html/xui/form/tls_settings.html index eb201862..a77bec40 100644 --- a/web/html/xui/form/tls_settings.html +++ b/web/html/xui/form/tls_settings.html @@ -24,26 +24,6 @@ <!-- tls settings --> <a-form v-if="inbound.tls" layout="inline"> - <a-form-item label='Multi Domain'> - <a-switch v-model="multiDomain"></a-switch> - </a-form-item> - <a-form-item v-if="multiDomain"> - <a-row> - <span>Domains:</span> - <a-button v-if="multiDomain" type="primary" size="small" @click="inbound.stream.tls.settings.domains.push({remark: '', domain: ''})" style="margin-left: 10px">+</a-button> - </a-row> - <a-input-group v-for="(row, index) in inbound.stream.tls.settings.domains"> - <a-input style="width: 40%" v-model.trim="row.remark" addon-before='{{ i18n "remark" }}'></a-input> - <a-input style="width: 60%" v-model.trim="row.domain" addon-before='{{ i18n "host" }}'> - <template slot="addonAfter"> - <a-button type="primary" size="small" style="margin-left: 10px" @click="inbound.stream.tls.settings.domains.splice(index, 1)">-</a-button> - </template> - </a-input> - </a-input-group> - </a-form-item> - <a-form-item v-else label='{{ i18n "domainName" }}'> - <a-input v-model.trim="inbound.stream.tls.server" style="width: 250px"></a-input> - </a-form-item> <a-form-item label="CipherSuites"> <a-select v-model="inbound.stream.tls.cipherSuites" style="width: 300px" :dropdown-class-name="themeSwitcher.currentTheme"> <a-select-option value="">auto</a-select-option> @@ -61,7 +41,7 @@ </a-input-group> </a-form-item> <a-form-item label="SNI" placeholder="Server Name Indication"> - <a-input v-model.trim="inbound.stream.tls.settings.serverName" style="width: 250px"></a-input> + <a-input v-model.trim="inbound.stream.tls.server" style="width: 250px"></a-input> </a-form-item> <a-form-item label="uTLS"> <a-select v-model="inbound.stream.tls.settings.fingerprint" @@ -122,11 +102,8 @@ <!-- xtls settings --> <a-form v-else-if="inbound.xtls" layout="inline"> - <a-form-item label='{{ i18n "domainName" }}'> - <a-input v-model.trim="inbound.stream.xtls.server"></a-input> - </a-form-item> <a-form-item label="SNI" placeholder="Server Name Indication"> - <a-input v-model.trim="inbound.stream.xtls.settings.serverName" style="width: 250px"></a-input> + <a-input v-model.trim="inbound.stream.xtls.server" style="width: 250px"></a-input> </a-form-item> <a-form-item label="Alpn"> <a-checkbox-group v-model="inbound.stream.xtls.alpn" style="width:200px"> @@ -180,9 +157,6 @@ <a-select-option v-for="key in UTLS_FINGERPRINT" :value="key">[[ key ]]</a-select-option> </a-select> </a-form-item> - <a-form-item label='{{ i18n "domainName" }}'> - <a-input v-model.trim="inbound.stream.reality.settings.serverName" style="width: 250px"></a-input> - </a-form-item> <a-form-item label="Dest"> <a-input v-model.trim="inbound.stream.reality.dest" style="width: 300px"></a-input> </a-form-item> diff --git a/web/html/xui/inbound_info_modal.html b/web/html/xui/inbound_info_modal.html index 554d10a3..1390bbcd 100644 --- a/web/html/xui/inbound_info_modal.html +++ b/web/html/xui/inbound_info_modal.html @@ -265,27 +265,10 @@ this.index = index; this.inbound = dbInbound.toInbound(); this.dbInbound = new DBInbound(dbInbound); - this.settings = JSON.parse(this.inbound.settings); - this.clientSettings = this.settings.clients ? Object.values(this.settings.clients)[index] : null; - this.isExpired = this.inbound.isExpiry(index); - this.clientStats = this.settings.clients ? this.dbInbound.clientStats.find(row => row.email === this.clientSettings.email) : []; - remark = [this.dbInbound.remark, ( this.clientSettings ? this.clientSettings.email : '')].filter(Boolean).join('-'); - address = this.dbInbound.address; - this.links = []; - if (this.inbound.tls && !ObjectUtil.isArrEmpty(this.inbound.stream.tls.settings.domains)) { - this.inbound.stream.tls.settings.domains.forEach((domain) => { - remarkText = [remark, domain.remark].filter(Boolean).join('-'); - this.links.push({ - remark: remarkText, - link: this.inbound.genLink(domain.domain, remarkText, index) - }); - }); - } else { - this.links.push({ - remark: remark, - link: this.inbound.genLink(address, remark, index) - }); - } + this.clientSettings = this.inbound.clients ? this.inbound.clients[index] : null; + this.isExpired = this.inbound.clients ? this.inbound.isExpiry(index): this.dbInbound.isExpiry; + this.clientStats = this.inbound.clients ? this.dbInbound.clientStats.find(row => row.email === this.clientSettings.email) : []; + this.links = this.inbound.genAllLinks(this.dbInbound.remark, this.clientSettings); if (this.clientSettings) { if (this.clientSettings.subId) { this.subLink = this.genSubLink(this.clientSettings.subId); diff --git a/web/html/xui/inbound_modal.html b/web/html/xui/inbound_modal.html index df42225c..4ef8f2d6 100644 --- a/web/html/xui/inbound_modal.html +++ b/web/html/xui/inbound_modal.html @@ -43,15 +43,6 @@ loading(loading) { inModal.confirmLoading = loading; }, - getClients(protocol, clientSettings) { - switch (protocol) { - case Protocols.VMESS: return clientSettings.vmesses; - case Protocols.VLESS: return clientSettings.vlesses; - case Protocols.TROJAN: return clientSettings.trojans; - case Protocols.SHADOWSOCKS: return clientSettings.shadowsockses; - default: return null; - } - }, }; new Vue({ @@ -70,7 +61,7 @@ return inModal.isEdit; }, get client() { - return inModal.getClients(this.inbound.protocol, this.inbound.settings)[0]; + return inModal.inbound.clients[0]; }, get delayedExpireDays() { return this.client && this.client.expiryTime < 0 ? this.client.expiryTime / -86400000 : 0; @@ -78,16 +69,19 @@ set delayedExpireDays(days) { this.client.expiryTime = -86400000 * days; }, - get multiDomain() { - return this.inbound.stream.tls.settings.domains.length > 0; + get externalProxy() { + return this.inbound.stream.externalProxy.length > 0; }, - set multiDomain(value) { + set externalProxy(value) { if (value) { - inModal.inbound.stream.tls.server = ""; - inModal.inbound.stream.tls.settings.domains = [{ remark: "", domain: window.location.hostname }]; + inModal.inbound.stream.externalProxy = [{ + forceTls: "same", + dest: window.location.hostname, + port: inModal.inbound.port, + remark: "" + }]; } else { - inModal.inbound.stream.tls.server = ""; - inModal.inbound.stream.tls.settings.domains = []; + inModal.inbound.stream.externalProxy = []; } } }, diff --git a/web/html/xui/inbounds.html b/web/html/xui/inbounds.html index e73e5f5d..13808ac9 100644 --- a/web/html/xui/inbounds.html +++ b/web/html/xui/inbounds.html @@ -618,7 +618,7 @@ }, getClientCounts(dbInbound, inbound) { let clientCount = 0, active = [], deactive = [], depleted = [], expiring = [], online = []; - clients = this.getClients(dbInbound.protocol, inbound.settings); + clients = inbound.clients; clientStats = dbInbound.clientStats now = new Date().getTime() if (clients) { @@ -968,15 +968,6 @@ this.submit(`/panel/inbound/${dbInboundId}/delClient/${clientId}`); } }, - getClients(protocol, clientSettings) { - switch (protocol) { - case Protocols.VMESS: return clientSettings.vmesses; - case Protocols.VLESS: return clientSettings.vlesses; - case Protocols.TROJAN: return clientSettings.trojans; - case Protocols.SHADOWSOCKS: return clientSettings.shadowsockses; - default: return null; - } - }, getClientId(protocol, client) { switch (protocol) { case Protocols.TROJAN: return client.password; @@ -996,8 +987,9 @@ newDbInbound.listen = rootInbound.listen; newDbInbound.port = rootInbound.port; newInbound = newDbInbound.toInbound(); - newInbound.stream.security = 'tls'; + newInbound.stream.security = rootInbound.stream.security; newInbound.stream.tls = rootInbound.stream.tls; + newInbound.stream.externalProxy = rootInbound.stream.externalProxy; newDbInbound.streamSettings = newInbound.stream.toString(); } } @@ -1005,17 +997,17 @@ }, showQrcode(dbInboundId, client) { dbInbound = this.dbInbounds.find(row => row.id === dbInboundId); - inbound = dbInbound.toInbound(); - clients = this.getClients(dbInbound.protocol, inbound.settings); - index = this.findIndexOfClient(dbInbound.protocol, clients, client); newDbInbound = this.checkFallback(dbInbound); - qrModal.show('{{ i18n "qrCode"}}', newDbInbound, index); + qrModal.show('{{ i18n "qrCode"}}', newDbInbound, client); }, showInfo(dbInboundId, client) { dbInbound = this.dbInbounds.find(row => row.id === dbInboundId); - inbound = dbInbound.toInbound(); - clients = this.getClients(dbInbound.protocol, inbound.settings); - index = this.findIndexOfClient(dbInbound.protocol, clients, client); + index=0; + if (dbInbound.isMultiUser()){ + inbound = dbInbound.toInbound(); + clients = inbound.clients; + index = this.findIndexOfClient(dbInbound.protocol, clients, client); + } newDbInbound = this.checkFallback(dbInbound); infoModal.show(newDbInbound, index); }, @@ -1027,7 +1019,7 @@ this.loading() dbInbound = this.dbInbounds.find(row => row.id === dbInboundId); inbound = dbInbound.toInbound(); - clients = this.getClients(dbInbound.protocol, inbound.settings); + clients = inbound.clients; index = this.findIndexOfClient(dbInbound.protocol, clients, client); clients[index].enable = !clients[index].enable; clientId = this.getClientId(dbInbound.protocol, clients[index]); @@ -1041,15 +1033,7 @@ } }, getInboundClients(dbInbound) { - if (dbInbound.protocol == Protocols.VLESS) { - return dbInbound.toInbound().settings.vlesses; - } else if (dbInbound.protocol == Protocols.VMESS) { - return dbInbound.toInbound().settings.vmesses; - } else if (dbInbound.protocol == Protocols.TROJAN) { - return dbInbound.toInbound().settings.trojans; - } else if (dbInbound.protocol == Protocols.SHADOWSOCKS) { - return dbInbound.toInbound().settings.shadowsockses; - } + return dbInbound.toInbound().clients; }, resetClientTraffic(client, dbInboundId, confirmation = true) { if (confirmation){ @@ -1179,11 +1163,11 @@ txtModal.show('{{ i18n "pages.inbounds.export"}}', newDbInbound.genInboundLinks, newDbInbound.remark); }, exportAllLinks() { - let copyText = ''; + let copyText = []; for (const dbInbound of this.dbInbounds) { - copyText += dbInbound.genInboundLinks; + copyText.push(dbInbound.genInboundLinks); } - txtModal.show('{{ i18n "pages.inbounds.export"}}', copyText, 'All-Inbounds'); + txtModal.show('{{ i18n "pages.inbounds.export"}}', copyText.join('\r\n'), 'All-Inbounds'); }, async startDataRefreshLoop() { while (this.isRefreshEnabled) { |
