2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 17:17:13 +08:00

feat: 网站默认设置

This commit is contained in:
2026-01-09 18:04:13 +08:00
parent f48c975de3
commit 3168e6efe3
8 changed files with 166 additions and 122 deletions

View File

@@ -14,8 +14,7 @@ export default {
// 获取默认配置
defaultConfig: (): any => http.Get('/website/default_config'),
// 保存默认配置
saveDefaultConfig: (index: string, stop: string): any =>
http.Post('/website/default_config', { index, stop }),
saveDefaultConfig: (data: any): any => http.Post('/website/default_config', data),
// 网站配置
config: (id: number): any => http.Get('/website/' + id),
// 保存网站配置

View File

@@ -323,6 +323,26 @@ const hasArg = (args: string[], arg: string) => {
</n-form-item>
</n-form>
<n-form v-if="setting.ssl">
<n-form-item :label="$gettext('TLS Version')">
<n-select
v-model:value="setting.ssl_protocols"
:options="[
{ label: 'TLS 1.0', value: 'TLSv1.0' },
{ label: 'TLS 1.1', value: 'TLSv1.1' },
{ label: 'TLS 1.2', value: 'TLSv1.2' },
{ label: 'TLS 1.3', value: 'TLSv1.3' }
]"
multiple
/>
</n-form-item>
<n-form-item :label="$gettext('Cipher Suites')">
<n-input
type="textarea"
v-model:value="setting.ssl_ciphers"
:placeholder="$gettext('Enter the cipher suite, leave blank to reset to default')"
rows="4"
/>
</n-form-item>
<n-form-item :label="$gettext('Certificate')">
<n-input
v-model:value="setting.ssl_cert"
@@ -355,25 +375,7 @@ const hasArg = (args: string[], arg: string) => {
/>
</n-form-item>
</n-form>
<common-editor v-if="setting" v-model:content="setting.rewrite" height="60vh" />
</n-flex>
</n-tab-pane>
<n-tab-pane name="config" :tab="$gettext('Configuration')">
<n-flex vertical>
<n-alert type="info" w-full>
{{
$gettext(
'If you modify the original text, other modifications will not take effect after clicking save!'
)
}}
</n-alert>
<n-alert type="warning" w-full>
{{
$gettext(
'If you do not understand the configuration rules, please do not modify them arbitrarily, otherwise it may cause the website to be inaccessible or panel function abnormalities! If you have already encountered a problem, try resetting the configuration!'
)
}}
</n-alert>
<common-editor v-if="setting" v-model:value="setting.rewrite" height="60vh" />
</n-flex>
</n-tab-pane>
<n-tab-pane name="log" :tab="$gettext('Access Log')">

View File

@@ -6,51 +6,45 @@ const { $gettext } = useGettext()
const currentTab = ref('default-page')
const defaultPageModel = ref({
index: '',
not_found: '',
stop: ''
const { data: model } = useRequest(website.defaultConfig, {
initialData: {
index: '',
stop: '',
not_found: '',
tls_versions: ['TLSv1.2', 'TLSv1.3'],
cipher_suites: ''
}
})
const defaultSettingModel = ref({
tls_version: ['TLSv1.2', 'TLSv1.3'],
cipher_suites: ''
})
watch(
() => model.value.tls_versions,
(newVal) => {
if (!newVal.includes('TLSv1.1') && !newVal.includes('TLSv1.0')) {
// 不包含 TLSv1.0 和 TLSv1.1
model.value.cipher_suites =
'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305'
} else {
// 包含 TLSv1.0 或 TLSv1.1
model.value.cipher_suites =
'@SECLEVEL=0:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA'
}
}
)
const getDefaultPage = async () => {
defaultPageModel.value = await website.defaultConfig()
}
const handleSaveDefaultPage = () => {
useRequest(
website.saveDefaultConfig(defaultPageModel.value.index, defaultPageModel.value.stop)
).onSuccess(() => {
const handleSave = () => {
useRequest(website.saveDefaultConfig(model.value)).onSuccess(() => {
window.$message.success($gettext('Modified successfully'))
})
}
onMounted(() => {
getDefaultPage()
})
</script>
<template>
<n-tabs v-model:value="currentTab" type="line" placement="left" animated>
<n-tab-pane name="default-page" :tab="$gettext('Default Page')">
<n-flex vertical>
<common-editor v-model:value="defaultPageModel.index" height="60vh" />
<common-editor v-model:value="model.index" height="60vh" />
<n-flex>
<n-button type="primary">
{{ $gettext('Save Changes') }}
</n-button>
</n-flex>
</n-flex>
</n-tab-pane>
<n-tab-pane name="404-page" :tab="$gettext('404 Page')">
<n-flex>
<common-editor v-model:value="defaultPageModel.not_found" height="60vh" />
<n-flex>
<n-button type="primary">
<n-button type="primary" @click="handleSave">
{{ $gettext('Save Changes') }}
</n-button>
</n-flex>
@@ -58,9 +52,19 @@ onMounted(() => {
</n-tab-pane>
<n-tab-pane name="stop-page" :tab="$gettext('Stop Page')">
<n-flex>
<common-editor v-model:value="defaultPageModel.stop" height="60vh" />
<common-editor v-model:value="model.stop" height="60vh" />
<n-flex>
<n-button type="primary">
<n-button type="primary" @click="handleSave">
{{ $gettext('Save Changes') }}
</n-button>
</n-flex>
</n-flex>
</n-tab-pane>
<n-tab-pane name="404-page" :tab="$gettext('404 Page')">
<n-flex>
<common-editor v-model:value="model.not_found" height="60vh" />
<n-flex>
<n-button type="primary" @click="handleSave">
{{ $gettext('Save Changes') }}
</n-button>
</n-flex>
@@ -70,33 +74,49 @@ onMounted(() => {
<n-alert type="info">待开发</n-alert>
</n-tab-pane>
<n-tab-pane name="default-setting" :tab="$gettext('Default Settings')">
<n-form>
<n-form-item :label="$gettext('Default TLS Version')">
<n-select
v-model:value="defaultSettingModel.tls_version"
:options="[
{ label: 'TLS 1.0', value: 'TLSv1.0' },
{ label: 'TLS 1.1', value: 'TLSv1.1' },
{ label: 'TLS 1.2', value: 'TLSv1.2' },
{ label: 'TLS 1.3', value: 'TLSv1.3' }
]"
multiple
/>
</n-form-item>
<n-form-item :label="$gettext('Default Cipher Suites')">
<n-input
type="textarea"
v-model:value="defaultSettingModel.cipher_suites"
:placeholder="
$gettext('Enter the default cipher suite, leave blank to reset to default')
"
rows="4"
/>
</n-form-item>
<n-button type="primary">
{{ $gettext('Save Changes') }}
</n-button>
</n-form>
<n-flex vertical>
<n-alert type="info">
{{
$gettext(
'Modifying the default TLS version and cipher suites will affect all newly created websites. Existing websites will not be affected.'
)
}}
</n-alert>
<n-alert type="warning">
{{
$gettext(
'Please adjust the settings carefully, improper configuration may lead to website inaccessible.'
)
}}
</n-alert>
<n-form>
<n-form-item :label="$gettext('Default TLS Version')">
<n-select
v-model:value="model.tls_versions"
:options="[
{ label: 'TLS 1.0', value: 'TLSv1.0' },
{ label: 'TLS 1.1', value: 'TLSv1.1' },
{ label: 'TLS 1.2', value: 'TLSv1.2' },
{ label: 'TLS 1.3', value: 'TLSv1.3' }
]"
multiple
/>
</n-form-item>
<n-form-item :label="$gettext('Default Cipher Suites')">
<n-input
type="textarea"
v-model:value="model.cipher_suites"
:placeholder="
$gettext('Enter the default cipher suite, leave blank to reset to default')
"
rows="4"
/>
</n-form-item>
<n-button type="primary" @click="handleSave">
{{ $gettext('Save Changes') }}
</n-button>
</n-form>
</n-flex>
</n-tab-pane>
</n-tabs>
</template>