diff options
| author | MHSanaei <ho3ein.sanaei@gmail.com> | 2023-12-13 18:57:36 +0300 |
|---|---|---|
| committer | MHSanaei <ho3ein.sanaei@gmail.com> | 2023-12-13 19:03:11 +0300 |
| commit | 8d18c8e98f1b6531d1997feb6933419d71401968 (patch) | |
| tree | 1283d10c68f3a9b9b2cbeeec95fb34a84e9689e3 /web/html/xui/form/tls_settings.html | |
| parent | 82e2241bdd9552f57d24c8de4fce6c5320efba4c (diff) | |
[gui] redesign forms
Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
Diffstat (limited to 'web/html/xui/form/tls_settings.html')
| -rw-r--r-- | web/html/xui/form/tls_settings.html | 564 |
1 files changed, 182 insertions, 382 deletions
diff --git a/web/html/xui/form/tls_settings.html b/web/html/xui/form/tls_settings.html index f06abe03..e668805e 100644 --- a/web/html/xui/form/tls_settings.html +++ b/web/html/xui/form/tls_settings.html @@ -1,394 +1,194 @@ {{define "form/tlsSettings"}} <!-- tls enable --> - -<a-form v-if="inbound.canEnableTls()" layout="inline"> +<a-form v-if="inbound.canEnableTls()" :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }"> <a-divider style="margin:0;"></a-divider> - <table width="100%" class="ant-table-tbody"> - <tr> - <td colspan="2"> - <a-form-item label='{{ i18n "security" }}'> - <a-radio-group v-model="inbound.stream.security" button-style="solid"> - <a-radio-button value="none">{{ i18n "none" }}</a-radio-button> - <a-tooltip> - <template slot="title"> - <span>{{ i18n "pages.inbounds.xtlsDesc" }}</span> - </template> - <a-radio-button v-if="inbound.canEnableXtls()" value="xtls">XTLS</a-radio-button> - </a-tooltip> - <a-tooltip> - <template slot="title"> - <span>{{ i18n "pages.inbounds.realityDesc" }}</span> - </template> - <a-radio-button v-if="inbound.canEnableReality()" value="reality">Reality</a-radio-button> - </a-tooltip> - <a-radio-button value="tls">TLS</a-radio-button> - </a-radio-group> - </a-form-item> - </td> - </tr> - - <!-- tls settings --> - <template v-if="inbound.stream.isTls"> - <tr> - <td>SNI</td> - <td> - <a-form-item placeholder="Server Name Indication"> - <a-input v-model.trim="inbound.stream.tls.sni" style="width: 250px"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td>CipherSuites</td> - <td> - <a-form-item> - <a-select v-model="inbound.stream.tls.cipherSuites" style="width: 250px" - :dropdown-class-name="themeSwitcher.currentTheme"> - <a-select-option value="">auto</a-select-option> - <a-select-option v-for="key,value in TLS_CIPHER_OPTION" - :value="key">[[ value]]</a-select-option> - </a-select> - </a-form-item> - </td> - </tr> - <tr> - <td>Min/Max Version</td> - <td> - <a-form-item> - <a-input-group compact> - <a-select style="width: 125px" v-model="inbound.stream.tls.minVersion" - :dropdown-class-name="themeSwitcher.currentTheme"> - <a-select-option v-for="key in TLS_VERSION_OPTION" - :value="key">[[ key ]]</a-select-option> - </a-select> - <a-select style="width: 125px" v-model="inbound.stream.tls.maxVersion" - :dropdown-class-name="themeSwitcher.currentTheme"> - <a-select-option v-for="key in TLS_VERSION_OPTION" - :value="key">[[ key ]]</a-select-option> - </a-select> - </a-input-group> - </a-form-item> - </td> - </tr> - <tr> - <td>uTLS</td> - <td> - <a-form-item> - <a-select v-model="inbound.stream.tls.settings.fingerprint" style="width: 250px" - :dropdown-class-name="themeSwitcher.currentTheme"> - <a-select-option value=''>None</a-select-option> - <a-select-option v-for="key in UTLS_FINGERPRINT" - :value="key">[[ key ]]</a-select-option> - </a-select> - </a-form-item> - </td> - </tr> - <tr> - <td>ALPN</td> - <td> - <a-form-item> - <a-select mode="multiple" style="width: 250px" - :dropdown-class-name="themeSwitcher.currentTheme" - v-model="inbound.stream.tls.alpn"> - <a-select-option v-for="alpn in ALPN_OPTION" - :value="alpn">[[ alpn ]]</a-select-option> - </a-select> - </a-form-item> - </td> - </tr> - <tr> - <td>Allow insecure</td> - <td> - <a-form-item> - <a-switch v-model="inbound.stream.tls.settings.allowInsecure"></a-switch> - </a-form-item> - </td> - </tr> - <tr> - <td>Reject Unknown SNI</td> - <td> - <a-form-item> - <a-switch v-model="inbound.stream.tls.rejectUnknownSni"></a-switch> - </a-form-item> - </td> - </tr> - <template v-for="cert,index in inbound.stream.tls.certs"> - <tr> - <td>{{ i18n "certificate" }}</td> - <td> - <a-form-item> - <a-radio-group v-model="cert.useFile" button-style="solid"> - <a-radio-button - :value="true">{{ i18n "pages.inbounds.certificatePath"}} - </a-radio-button> - <a-radio-button - :value="false">{{ i18n "pages.inbounds.certificateContent"}} - </a-radio-button> - </a-radio-group> - <a-button v-if="index === 0" type="primary" size="small" - @click="inbound.stream.tls.addCert()" style="margin-left: 10px">+</a-button> - <a-button v-if="inbound.stream.tls.certs.length>1" type="primary" size="small" - @click="inbound.stream.tls.removeCert(index)" style="margin-left: 10px">-</a-button> - </a-form-item> - </td> - </tr> - <template v-if="cert.useFile"> - <tr> - <td>{{ i18n "pages.inbounds.publicKeyPath" }}</td> - <td> - <a-form-item> - <a-input v-model.trim="cert.certFile" style="width:250px;"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td>{{ i18n "pages.inbounds.keyPath" }}</td> - <td> - <a-form-item> - <a-input v-model.trim="cert.keyFile" style="width:250px;"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td></td> - <td> - <a-button type="primary" icon="import" @click="setDefaultCertData(index)"> - {{ i18n "pages.inbounds.setDefaultCert" }} - </a-button> - </td> - </tr> + <a-form-item label='{{ i18n "security" }}'> + <a-radio-group v-model="inbound.stream.security" button-style="solid"> + <a-radio-button value="none">{{ i18n "none" }}</a-radio-button> + <a-tooltip> + <template slot="title"> + <span>{{ i18n "pages.inbounds.xtlsDesc" }}</span> </template> - <template v-else> - <tr> - <td>{{ i18n "pages.inbounds.publicKeyContent" }}</td> - <td> - <a-form-item> - <a-input type="textarea" :rows="3" style="width:250px;" v-model="cert.cert"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td>{{ i18n "pages.inbounds.keyContent" }}</td> - <td> - <a-form-item> - <a-input type="textarea" :rows="3" style="width:250px;" v-model="cert.key"></a-input> - </a-form-item> - </td> - </tr> + <a-radio-button v-if="inbound.canEnableXtls()" value="xtls">XTLS</a-radio-button> + </a-tooltip> + <a-tooltip> + <template slot="title"> + <span>{{ i18n "pages.inbounds.realityDesc" }}</span> </template> - <tr> - <td>ocspStapling</td> - <td> - <a-form-item> - <a-input-number v-model.number="cert.ocspStapling" :min="0"></a-input-number> - </a-form-item> - </td> - </tr> - </template> - </template> + <a-radio-button v-if="inbound.canEnableReality()" value="reality">Reality</a-radio-button> + </a-tooltip> + <a-radio-button value="tls">TLS</a-radio-button> + </a-radio-group> + </a-form-item> - <!-- xtls settings --> - <template v-else-if="inbound.xtls"> - <tr> - <td> - <span>SNI</span> - </td> - <td> - <a-form-item> - <a-input v-model.trim="inbound.stream.xtls.server" style="width: 250px"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td> - <span>Alpn</span> - </td> - <td> - <a-form-item> - <a-select mode="multiple" style="width: 250px" :dropdown-class-name="themeSwitcher.currentTheme" - v-model="inbound.stream.xtls.alpn"> - <a-select-option v-for="alpn in ALPN_OPTION" :value="alpn">[[ alpn ]]</a-select-option> - </a-select> - </a-form-item> - </td> - </tr> - <tr> - <td> - <span>Allow insecure</span> - </td> - <td> - <a-form-item> - <a-switch v-model="inbound.stream.xtls.settings.allowInsecure"></a-switch> - </a-form-item> - </td> - </tr> - <template v-for="cert,index in inbound.stream.xtls.certs"> - <tr> - <td>{{ i18n "certificate" }}</td> - <td> - <a-form-item> - <a-radio-group v-model="cert.useFile" button-style="solid"> - <a-radio-button :value="true">{{ i18n "pages.inbounds.certificatePath"}}</a-radio-button> - <a-radio-button :value="false">{{ i18n "pages.inbounds.certificateContent"}}</a-radio-button> - </a-radio-group> - <a-button v-if="index === 0" type="primary" size="small" - @click="inbound.stream.xtls.addCert()" style="margin-left: 10px">+</a-button> - <a-button v-if="inbound.stream.xtls.certs.length>1" type="primary" size="small" - @click="inbound.stream.xtls.removeCert(index)" style="margin-left: 10px">-</a-button> - </a-form-item> - </td> - </tr> - <template v-if="cert.useFile"> - <tr> - <td>{{ i18n "pages.inbounds.publicKeyPath" }}</td> - <td> - <a-form-item> - <a-input v-model.trim="cert.certFile" style="width:250px;"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td>{{ i18n "pages.inbounds.keyPath" }}</td> - <td> - <a-form-item> - <a-input v-model.trim="cert.keyFile" style="width:250px;"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td></td> - <td> - <a-button type="primary" icon="import" @click="setDefaultCertXtls(index)"> - {{ i18n "pages.inbounds.setDefaultCert" }} - </a-button> - </td> - </tr> - </template> - <template v-else> - <tr> - <td>{{ i18n "pages.inbounds.publicKeyContent" }}</td> - <td> - <a-form-item> - <a-input type="textarea" :rows="3" style="width:250px;" v-model="cert.cert"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td>{{ i18n "pages.inbounds.keyContent" }}</td> - <td> - <a-form-item> - <a-input type="textarea" :rows="3" style="width:250px;" v-model="cert.key"></a-input> - </a-form-item> - </td> - </tr> - </template> + <!-- tls settings --> + <template v-if="inbound.stream.isTls"> + <a-form-item label="SNI" placeholder="Server Name Indication"> + <a-input v-model.trim="inbound.stream.tls.sni"></a-input> + </a-form-item> + <a-form-item label="CipherSuites"> + <a-select v-model="inbound.stream.tls.cipherSuites" :dropdown-class-name="themeSwitcher.currentTheme"> + <a-select-option value="">auto</a-select-option> + <a-select-option v-for="key,value in TLS_CIPHER_OPTION" :value="key">[[ value ]]</a-select-option> + </a-select> + </a-form-item> + <a-form-item label="Min/Max Version"> + <a-input-group compact> + <a-select v-model="inbound.stream.tls.minVersion" :dropdown-class-name="themeSwitcher.currentTheme"> + <a-select-option v-for="key in TLS_VERSION_OPTION" :value="key">[[ key ]]</a-select-option> + </a-select> + <a-select v-model="inbound.stream.tls.maxVersion" :dropdown-class-name="themeSwitcher.currentTheme"> + <a-select-option v-for="key in TLS_VERSION_OPTION" :value="key">[[ key ]]</a-select-option> + </a-select> + </a-input-group> + </a-form-item> + <a-form-item label="uTLS"> + <a-select v-model="inbound.stream.tls.settings.fingerprint" + :dropdown-class-name="themeSwitcher.currentTheme"> + <a-select-option value=''>None</a-select-option> + <a-select-option v-for="key in UTLS_FINGERPRINT" :value="key">[[ key ]]</a-select-option> + </a-select> + </a-form-item> + <a-form-item label="ALPN"> + <a-select mode="multiple" :dropdown-class-name="themeSwitcher.currentTheme" + v-model="inbound.stream.tls.alpn"> + <a-select-option v-for="alpn in ALPN_OPTION" :value="alpn">[[ alpn ]]</a-select-option> + </a-select> + </a-form-item> + <a-form-item label="Allow insecure"> + <a-switch v-model="inbound.stream.tls.settings.allowInsecure"></a-switch> + </a-form-item> + <a-form-item label="Reject Unknown SNI"> + <a-switch v-model="inbound.stream.tls.rejectUnknownSni"></a-switch> + </a-form-item> + <template v-for="cert,index in inbound.stream.tls.certs"> + <a-form-item label='{{ i18n "certificate" }}'> + <a-radio-group v-model="cert.useFile" button-style="solid"> + <a-radio-button :value="true">{{ i18n "pages.inbounds.certificatePath" }}</a-radio-button> + <a-radio-button :value="false">{{ i18n "pages.inbounds.certificateContent" }}</a-radio-button> + </a-radio-group> + <a-button v-if="index === 0" type="primary" size="small" @click="inbound.stream.tls.addCert()" + style="margin-left: 10px">+</a-button> + <a-button v-if="inbound.stream.tls.certs.length>1" type="primary" size="small" + @click="inbound.stream.tls.removeCert(index)" style="margin-left: 10px">-</a-button> + </a-form-item> + <template v-if="cert.useFile"> + <a-form-item label='{{ i18n "pages.inbounds.publicKeyPath" }}'> + <a-input v-model.trim="cert.certFile" style="width:250px;"></a-input> + </a-form-item> + <a-form-item label='{{ i18n "pages.inbounds.keyPath" }}'> + <a-input v-model.trim="cert.keyFile" style="width:250px;"></a-input> + </a-form-item> + <a-form-item label=" "> + <a-button type="primary" icon="import" @click="setDefaultCertData(index)">{{ i18n + "pages.inbounds.setDefaultCert" }}</a-button> + </a-form-item> + </template> + <template v-else> + <a-form-item label='{{ i18n "pages.inbounds.publicKeyContent" }}'> + <a-input type="textarea" :rows="3" style="width:250px;" v-model="cert.cert"></a-input> + </a-form-item> + <a-form-item label='{{ i18n "pages.inbounds.keyContent" }}'> + <a-input type="textarea" :rows="3" style="width:250px;" v-model="cert.key"></a-input> + </a-form-item> </template> + <a-form-item label='ocspStapling'> + <a-input-number v-model.number="cert.ocspStapling" :min="0"></a-input-number> + </a-form-item> </template> + </template> - <!-- reality settings --> - <template v-else-if="inbound.reality"> - <tr> - <td> - <span>Show</span> - </td> - <td> - <a-form-item> - <a-switch v-model="inbound.stream.reality.show"></a-switch> - </a-form-item> - </td> - </tr> - <tr> - <td> - <span>xVer</span> - </td> - <td> - <a-form-item> - <a-input-number v-model="inbound.stream.reality.xver" :min="0" - style="width: 60px"></a-input-number> - </a-form-item> - </td> - </tr> - <tr> - <td> - <span>uTLS</span> - </td> - <td> - <a-form-item> - <a-select v-model="inbound.stream.reality.settings.fingerprint" style="width: 135px" - :dropdown-class-name="themeSwitcher.currentTheme"> - <a-select-option v-for="key in UTLS_FINGERPRINT" :value="key">[[ key ]]</a-select-option> - </a-select> - </a-form-item> - </td> - </tr> - <tr> - <td> - <span>Dest</span> - </td> - <td> - <a-form-item> - <a-input v-model.trim="inbound.stream.reality.dest" style="width: 250px"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td> - <span>Server Names</span> - </td> - <td> - <a-form-item> - <a-input v-model.trim="inbound.stream.reality.serverNames" style="width: 250px"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td> - <span>ShortIds</span> <a-icon @click="inbound.stream.reality.shortIds = RandomUtil.randomShortId()" - type="sync"> </a-icon> - </td> - <td> - <a-form-item> - - <a-input v-model.trim="inbound.stream.reality.shortIds" style="width: 150px;"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td> - <span>SpiderX</span> - </td> - <td> - <a-form-item> - <a-input v-model.trim="inbound.stream.reality.settings.spiderX" style="width: 150px;"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td> - <span>Private Key</span> - </td> - <td> - <a-form-item> - <a-input v-model.trim="inbound.stream.reality.privateKey" style="width: 250px"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td> - <span>Public Key</span> - </td> - <td> - <a-form-item> - <a-input v-model.trim="inbound.stream.reality.settings.publicKey" - style="width: 250px"></a-input> - </a-form-item> - </td> - </tr> - <tr> - <td colspan="2"> - <a-button type="primary" icon="import" @click="getNewX25519Cert">Get New Key</a-button> - </td> - </tr> + <!-- xtls settings --> + <template v-else-if="inbound.xtls"> + <a-form-item label="SNI" placeholder="Server Name Indication"> + <a-input v-model.trim="inbound.stream.xtls.sni"></a-input> + </a-form-item> + <a-form-item label="ALPN"> + <a-select mode="multiple" :dropdown-class-name="themeSwitcher.currentTheme" + v-model="inbound.stream.xtls.alpn"> + <a-select-option v-for="alpn in ALPN_OPTION" :value="alpn">[[ alpn ]]</a-select-option> + </a-select> + </a-form-item> + <a-form-item label="Allow insecure"> + <a-switch v-model="inbound.stream.xtls.settings.allowInsecure"></a-switch> + </a-form-item> + <template v-for="cert,index in inbound.stream.xtls.certs"> + <a-form-item label='{{ i18n "certificate" }}'> + <a-radio-group v-model="cert.useFile" button-style="solid"> + <a-radio-button :value="true">{{ i18n "pages.inbounds.certificatePath" }}</a-radio-button> + <a-radio-button :value="false">{{ i18n "pages.inbounds.certificateContent" }}</a-radio-button> + </a-radio-group> + <a-button v-if="index === 0" type="primary" size="small" @click="inbound.stream.xtls.addCert()" + style="margin-left: 10px">+</a-button> + <a-button v-if="inbound.stream.xtls.certs.length>1" type="primary" size="small" + @click="inbound.stream.xtls.removeCert(index)" style="margin-left: 10px">-</a-button> + </a-form-item> + <template v-if="cert.useFile"> + <a-form-item label='{{ i18n "pages.inbounds.publicKeyPath" }}'> + <a-input v-model.trim="cert.certFile" style="width:250px;"></a-input> + </a-form-item> + <a-form-item label='{{ i18n "pages.inbounds.keyPath" }}'> + <a-input v-model.trim="cert.keyFile" style="width:250px;"></a-input> + </a-form-item> + <a-form-item label=" "> + <a-button type="primary" icon="import" @click="setDefaultCertXtls(index)">{{ i18n + "pages.inbounds.setDefaultCert" }}</a-button> + </a-form-item> + </template> + <template v-else> + <a-form-item label='{{ i18n "pages.inbounds.publicKeyContent" }}'> + <a-input type="textarea" :rows="3" style="width:250px;" v-model="cert.cert"></a-input> + </a-form-item> + <a-form-item label='{{ i18n "pages.inbounds.keyContent" }}'> + <a-input type="textarea" :rows="3" style="width:250px;" v-model="cert.key"></a-input> + </a-form-item> + </template> </template> - </table> + </template> + <!-- reality settings --> + <template v-if="inbound.stream.isReality"> + <a-form-item label='Show'> + <a-switch v-model="inbound.stream.reality.show"></a-switch> + </a-form-item> + <a-form-item label='Xver'> + <a-input-number v-model.number="inbound.stream.reality.xver" :min="0"></a-input-number> + </a-form-item> + <a-form-item label='uTLS'> + <a-select v-model="inbound.stream.reality.settings.fingerprint" + :dropdown-class-name="themeSwitcher.currentTheme"> + <a-select-option v-for="key in UTLS_FINGERPRINT" :value="key">[[ key ]]</a-select-option> + </a-select> + </a-form-item> + <a-form-item label='Dest'> + <a-input v-model.trim="inbound.stream.reality.dest"></a-input> + </a-form-item> + <a-form-item label='Server Names'> + <a-input v-model.trim="inbound.stream.reality.serverNames"></a-input> + </a-form-item> + <a-form-item> + <template slot="label"> + <a-tooltip> + <template slot="title"> + <span>{{ i18n "pages.client.renew" }}</span> + </template> + Short Ids + <a-icon @click="inbound.stream.reality.shortIds = RandomUtil.randomShortId().join(',')" type="sync"> + </a-icon> + </template> + <a-input v-model.trim="inbound.stream.reality.shortIds" style="width:250px"></a-input> + </a-form-item> + <a-form-item label='SpiderX'> + <a-input v-model.trim="inbound.stream.reality.settings.spiderX" style="width:250px"></a-input> + </a-form-item> + <a-form-item label='Private Key'> + <a-input v-model.trim="inbound.stream.reality.privateKey"></a-input> + </a-form-item> + <a-form-item label='Public Key'> + <a-input v-model.trim="inbound.stream.reality.settings.publicKey"></a-input> + </a-form-item> + <a-form-item label=" "> + <a-button type="primary" icon="import" @click="getNewX25519Cert">Get new cert</a-button> + </a-form-item> + </template> </a-form> {{end}}
\ No newline at end of file |
