mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 10:25:52 +02:00
Refactored issue certificate
This commit is contained in:
parent
267f0ed654
commit
5178d1e808
13 changed files with 472 additions and 199 deletions
1
frontend/components.d.ts
vendored
1
frontend/components.d.ts
vendored
|
@ -32,6 +32,7 @@ declare module '@vue/runtime-core' {
|
|||
AModal: typeof import('ant-design-vue/es')['Modal']
|
||||
APagination: typeof import('ant-design-vue/es')['Pagination']
|
||||
APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
|
||||
AProgress: typeof import('ant-design-vue/es')['Progress']
|
||||
AreaChart: typeof import('./src/components/Chart/AreaChart.vue')['default']
|
||||
AResult: typeof import('ant-design-vue/es')['Result']
|
||||
ARow: typeof import('ant-design-vue/es')['Row']
|
||||
|
|
|
@ -3,3 +3,7 @@
|
|||
.directive-editor-extra {
|
||||
background-color: rgba(0, 0, 0, 0.84) !important;
|
||||
}
|
||||
|
||||
.issue-cert-log-container {
|
||||
background-color: rgba(0, 0, 0, 0.84) !important;
|
||||
}
|
||||
|
|
|
@ -7,4 +7,15 @@ export const msg = [
|
|||
$gettext('Prohibit changing root password in demo'),
|
||||
$gettext('Prohibit deleting the default user'),
|
||||
$gettext('Failed to get certificate information'),
|
||||
|
||||
$gettext('Generating private key for registering account'),
|
||||
$gettext('Preparing lego configurations'),
|
||||
$gettext('Creating client facilitates communication with the CA server'),
|
||||
$gettext('Using HTTP01 challenge provider'),
|
||||
$gettext('Registering user'),
|
||||
$gettext('Obtaining certificate'),
|
||||
$gettext('Writing certificate to disk'),
|
||||
$gettext('Writing certificate private key to disk'),
|
||||
$gettext('Reloading nginx'),
|
||||
$gettext('Finished')
|
||||
]
|
||||
|
|
|
@ -60,7 +60,7 @@ msgstr "Auto-renewal disabled for %{name}"
|
|||
msgid "Auto-renewal enabled for %{name}"
|
||||
msgstr "Auto-renewal enabled for %{name}"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:178
|
||||
msgid "Back"
|
||||
msgstr "Back"
|
||||
|
||||
|
@ -86,22 +86,22 @@ msgstr "Build with"
|
|||
msgid "Cancel"
|
||||
msgstr "Cancel"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:40
|
||||
#: src/views/domain/cert/CertInfo.vue:24
|
||||
msgid "Certificate has expired"
|
||||
msgstr "Certificate has expired"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:44
|
||||
#: src/views/domain/cert/CertInfo.vue:28
|
||||
msgid "Certificate is valid"
|
||||
msgstr "Certificate is valid"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:30
|
||||
#: src/views/domain/cert/CertInfo.vue:14
|
||||
msgid "Certificate Status"
|
||||
msgstr "Certificate Status"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:21
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:7
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:154
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:155
|
||||
msgid "Comments"
|
||||
msgstr "Comments"
|
||||
|
||||
|
@ -138,6 +138,10 @@ msgstr "Create Another"
|
|||
msgid "Created at"
|
||||
msgstr "Created at"
|
||||
|
||||
#: src/language/constants.ts:13
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:26
|
||||
msgid "Dashboard"
|
||||
msgstr "Dashboard"
|
||||
|
@ -180,7 +184,7 @@ msgstr "Disable auto-renewal failed for %{name}"
|
|||
msgid "Disabled"
|
||||
msgstr "Disabled"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:101 src/views/domain/DomainList.vue:64
|
||||
#: src/views/domain/DomainEdit.vue:112 src/views/domain/DomainList.vue:64
|
||||
msgid "Disabled successfully"
|
||||
msgstr "Disabled successfully"
|
||||
|
||||
|
@ -226,7 +230,7 @@ msgstr "Enable TLS"
|
|||
msgid "Enabled"
|
||||
msgstr "Enabled"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:92
|
||||
#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:103
|
||||
#: src/views/domain/DomainList.vue:54
|
||||
msgid "Enabled successfully"
|
||||
msgstr "Enabled successfully"
|
||||
|
@ -235,15 +239,15 @@ msgstr "Enabled successfully"
|
|||
msgid "Encrypt website with Let's Encrypt"
|
||||
msgstr "Encrypt website with Let's Encrypt"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:33
|
||||
#: src/views/domain/cert/CertInfo.vue:17
|
||||
msgid "Expiration Date: %{date}"
|
||||
msgstr "Expiration Date: %{date}"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:104 src/views/domain/DomainList.vue:68
|
||||
#: src/views/domain/DomainEdit.vue:115 src/views/domain/DomainList.vue:68
|
||||
msgid "Failed to disable %{msg}"
|
||||
msgstr "Failed to disable %{msg}"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:95 src/views/domain/DomainList.vue:58
|
||||
#: src/views/domain/DomainEdit.vue:106 src/views/domain/DomainList.vue:58
|
||||
msgid "Failed to enable %{msg}"
|
||||
msgstr "Failed to enable %{msg}"
|
||||
|
||||
|
@ -255,10 +259,14 @@ msgstr ""
|
|||
msgid "File Not Found"
|
||||
msgstr "File Not Found"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:7
|
||||
#: src/language/constants.ts:20 src/views/domain/DomainAdd.vue:7
|
||||
msgid "Finished"
|
||||
msgstr "Finished"
|
||||
|
||||
#: src/language/constants.ts:11
|
||||
msgid "Generating private key for registering account"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/IssueCert.vue:85
|
||||
msgid "Getting the certificate, please wait..."
|
||||
msgstr "Getting the certificate, please wait..."
|
||||
|
@ -276,7 +284,7 @@ msgstr "Install"
|
|||
msgid "Install successfully"
|
||||
msgstr "Enabled successfully"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:31
|
||||
#: src/views/domain/cert/CertInfo.vue:15
|
||||
msgid "Intermediate Certification Authorities: %{issuer}"
|
||||
msgstr "Intermediate Certification Authorities: %{issuer}"
|
||||
|
||||
|
@ -384,7 +392,7 @@ msgstr "No"
|
|||
msgid "Not Found"
|
||||
msgstr "Not Found"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:35
|
||||
#: src/views/domain/cert/CertInfo.vue:19
|
||||
msgid "Not Valid Before: %{date}"
|
||||
msgstr "Not Valid Before: %{date}"
|
||||
|
||||
|
@ -396,6 +404,10 @@ msgstr ""
|
|||
"Note: The server_name in the current configuration must be the domain name "
|
||||
"you need to get the certificate."
|
||||
|
||||
#: src/language/constants.ts:16
|
||||
msgid "Obtaining certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDataDisplay/StdCurd.vue:27
|
||||
#: src/components/StdDataDisplay/StdTable.vue:40
|
||||
#: src/views/domain/DomainList.vue:26
|
||||
|
@ -435,6 +447,11 @@ msgstr "Please input your password!"
|
|||
msgid "Please input your username!"
|
||||
msgstr "Please input your username!"
|
||||
|
||||
#: src/language/constants.ts:12
|
||||
#, fuzzy
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "Configurations"
|
||||
|
||||
#: src/language/constants.ts:7
|
||||
msgid "Prohibit changing root password in demo"
|
||||
msgstr ""
|
||||
|
@ -455,11 +472,19 @@ msgstr "Reads"
|
|||
msgid "Receive"
|
||||
msgstr "Receive"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Registering user"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:19
|
||||
msgid "Reloading nginx"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDataDisplay/StdTable.vue:187
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:169
|
||||
#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:181
|
||||
msgid "Save"
|
||||
msgstr "Save"
|
||||
|
||||
|
@ -479,7 +504,7 @@ msgid "Save Successfully"
|
|||
msgstr "Saved successfully"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
|
||||
#: src/views/domain/DomainEdit.vue:80
|
||||
#: src/views/domain/DomainEdit.vue:91
|
||||
msgid "Saved successfully"
|
||||
msgstr "Saved successfully"
|
||||
|
||||
|
@ -488,10 +513,9 @@ msgid "Send"
|
|||
msgstr "Send"
|
||||
|
||||
#: src/components/StdDataDisplay/StdTable.vue:112
|
||||
#: src/components/StdDataDisplay/StdTable.vue:94
|
||||
#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:44
|
||||
#: src/views/domain/DomainEdit.vue:56 src/views/domain/DomainEdit.vue:65
|
||||
#: src/views/domain/DomainEdit.vue:83 src/views/domain/DomainList.vue:78
|
||||
#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:56
|
||||
#: src/views/domain/DomainEdit.vue:68 src/views/domain/DomainEdit.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:94 src/views/domain/DomainList.vue:78
|
||||
#: src/views/other/Install.vue:71
|
||||
msgid "Server error"
|
||||
msgstr "Server error"
|
||||
|
@ -529,7 +553,7 @@ msgstr "Status"
|
|||
msgid "Storage"
|
||||
msgstr "Storage"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:32
|
||||
#: src/views/domain/cert/CertInfo.vue:16
|
||||
msgid "Subject Name: %{name}"
|
||||
msgstr "Subject Name: %{name}"
|
||||
|
||||
|
@ -579,6 +603,10 @@ msgstr "Username"
|
|||
msgid "Username (*)"
|
||||
msgstr "Username (*)"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Using HTTP01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/IssueCert.vue:12 src/views/domain/DomainAdd.vue:24
|
||||
msgid "Warning"
|
||||
msgstr "Warning"
|
||||
|
@ -588,6 +616,14 @@ msgstr "Warning"
|
|||
msgid "Writes"
|
||||
msgstr "Writes"
|
||||
|
||||
#: src/language/constants.ts:18
|
||||
msgid "Writing certificate private key to disk"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:17
|
||||
msgid "Writing certificate to disk"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:16
|
||||
msgid "Yes"
|
||||
msgstr "Yes"
|
||||
|
|
|
@ -54,7 +54,7 @@ msgstr ""
|
|||
msgid "Auto-renewal enabled for %{name}"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:178
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
|
@ -79,22 +79,22 @@ msgstr ""
|
|||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:40
|
||||
#: src/views/domain/cert/CertInfo.vue:24
|
||||
msgid "Certificate has expired"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:44
|
||||
#: src/views/domain/cert/CertInfo.vue:28
|
||||
msgid "Certificate is valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:30
|
||||
#: src/views/domain/cert/CertInfo.vue:14
|
||||
msgid "Certificate Status"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:21
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:7
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:154
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:155
|
||||
msgid "Comments"
|
||||
msgstr ""
|
||||
|
||||
|
@ -131,6 +131,10 @@ msgstr ""
|
|||
msgid "Created at"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:13
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:26
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
@ -175,7 +179,7 @@ msgstr ""
|
|||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:101
|
||||
#: src/views/domain/DomainEdit.vue:112
|
||||
#: src/views/domain/DomainList.vue:64
|
||||
msgid "Disabled successfully"
|
||||
msgstr ""
|
||||
|
@ -226,7 +230,7 @@ msgid "Enabled"
|
|||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46
|
||||
#: src/views/domain/DomainEdit.vue:92
|
||||
#: src/views/domain/DomainEdit.vue:103
|
||||
#: src/views/domain/DomainList.vue:54
|
||||
msgid "Enabled successfully"
|
||||
msgstr ""
|
||||
|
@ -235,16 +239,16 @@ msgstr ""
|
|||
msgid "Encrypt website with Let's Encrypt"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:33
|
||||
#: src/views/domain/cert/CertInfo.vue:17
|
||||
msgid "Expiration Date: %{date}"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:104
|
||||
#: src/views/domain/DomainEdit.vue:115
|
||||
#: src/views/domain/DomainList.vue:68
|
||||
msgid "Failed to disable %{msg}"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:95
|
||||
#: src/views/domain/DomainEdit.vue:106
|
||||
#: src/views/domain/DomainList.vue:58
|
||||
msgid "Failed to enable %{msg}"
|
||||
msgstr ""
|
||||
|
@ -258,10 +262,15 @@ msgstr ""
|
|||
msgid "File Not Found"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:20
|
||||
#: src/views/domain/DomainAdd.vue:7
|
||||
msgid "Finished"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:11
|
||||
msgid "Generating private key for registering account"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/IssueCert.vue:85
|
||||
msgid "Getting the certificate, please wait..."
|
||||
msgstr ""
|
||||
|
@ -279,7 +288,7 @@ msgstr ""
|
|||
msgid "Install successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:31
|
||||
#: src/views/domain/cert/CertInfo.vue:15
|
||||
msgid "Intermediate Certification Authorities: %{issuer}"
|
||||
msgstr ""
|
||||
|
||||
|
@ -387,7 +396,7 @@ msgstr ""
|
|||
msgid "Not Found"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:35
|
||||
#: src/views/domain/cert/CertInfo.vue:19
|
||||
msgid "Not Valid Before: %{date}"
|
||||
msgstr ""
|
||||
|
||||
|
@ -395,6 +404,10 @@ msgstr ""
|
|||
msgid "Note: The server_name in the current configuration must be the domain name you need to get the certificate."
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:16
|
||||
msgid "Obtaining certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDataDisplay/StdCurd.vue:27
|
||||
#: src/components/StdDataDisplay/StdTable.vue:40
|
||||
#: src/views/domain/DomainList.vue:26
|
||||
|
@ -437,6 +450,10 @@ msgstr ""
|
|||
msgid "Please input your username!"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:12
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:7
|
||||
msgid "Prohibit changing root password in demo"
|
||||
msgstr ""
|
||||
|
@ -458,12 +475,20 @@ msgstr ""
|
|||
msgid "Receive"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Registering user"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:19
|
||||
msgid "Reloading nginx"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDataDisplay/StdTable.vue:187
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:52
|
||||
#: src/views/domain/DomainEdit.vue:169
|
||||
#: src/views/domain/DomainEdit.vue:181
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
|
@ -484,7 +509,7 @@ msgstr ""
|
|||
|
||||
#: src/views/config/ConfigEdit.vue:34
|
||||
#: src/views/domain/DomainAdd.vue:43
|
||||
#: src/views/domain/DomainEdit.vue:80
|
||||
#: src/views/domain/DomainEdit.vue:91
|
||||
msgid "Saved successfully"
|
||||
msgstr ""
|
||||
|
||||
|
@ -494,12 +519,11 @@ msgid "Send"
|
|||
msgstr ""
|
||||
|
||||
#: src/components/StdDataDisplay/StdTable.vue:112
|
||||
#: src/components/StdDataDisplay/StdTable.vue:94
|
||||
#: src/views/config/ConfigEdit.vue:22
|
||||
#: src/views/domain/DomainEdit.vue:44
|
||||
#: src/views/domain/DomainEdit.vue:56
|
||||
#: src/views/domain/DomainEdit.vue:65
|
||||
#: src/views/domain/DomainEdit.vue:83
|
||||
#: src/views/domain/DomainEdit.vue:68
|
||||
#: src/views/domain/DomainEdit.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:94
|
||||
#: src/views/domain/DomainList.vue:78
|
||||
#: src/views/other/Install.vue:71
|
||||
msgid "Server error"
|
||||
|
@ -539,7 +563,7 @@ msgstr ""
|
|||
msgid "Storage"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:32
|
||||
#: src/views/domain/cert/CertInfo.vue:16
|
||||
msgid "Subject Name: %{name}"
|
||||
msgstr ""
|
||||
|
||||
|
@ -587,6 +611,10 @@ msgstr ""
|
|||
msgid "Username (*)"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Using HTTP01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/IssueCert.vue:12
|
||||
#: src/views/domain/DomainAdd.vue:24
|
||||
msgid "Warning"
|
||||
|
@ -598,6 +626,14 @@ msgstr ""
|
|||
msgid "Writes"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:18
|
||||
msgid "Writing certificate private key to disk"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:17
|
||||
msgid "Writing certificate to disk"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:16
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
|
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -62,7 +62,7 @@ msgstr "成功关闭 %{name} 自动续签"
|
|||
msgid "Auto-renewal enabled for %{name}"
|
||||
msgstr "成功启用 %{name} 自动续签"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:178
|
||||
msgid "Back"
|
||||
msgstr "返回"
|
||||
|
||||
|
@ -87,22 +87,22 @@ msgstr "构建基于"
|
|||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:40
|
||||
#: src/views/domain/cert/CertInfo.vue:24
|
||||
msgid "Certificate has expired"
|
||||
msgstr "此证书已过期"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:44
|
||||
#: src/views/domain/cert/CertInfo.vue:28
|
||||
msgid "Certificate is valid"
|
||||
msgstr "此证书有效"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:30
|
||||
#: src/views/domain/cert/CertInfo.vue:14
|
||||
msgid "Certificate Status"
|
||||
msgstr "证书状态"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:21
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:7
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:154
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:155
|
||||
msgid "Comments"
|
||||
msgstr "注释"
|
||||
|
||||
|
@ -139,6 +139,10 @@ msgstr "再创建一个"
|
|||
msgid "Created at"
|
||||
msgstr "创建时间"
|
||||
|
||||
#: src/language/constants.ts:13
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr "正在创建客户端用于与 CA 服务器通信"
|
||||
|
||||
#: src/routes/index.ts:26
|
||||
msgid "Dashboard"
|
||||
msgstr "仪表盘"
|
||||
|
@ -181,7 +185,7 @@ msgstr "关闭 %{name} 自动续签失败"
|
|||
msgid "Disabled"
|
||||
msgstr "禁用"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:101 src/views/domain/DomainList.vue:64
|
||||
#: src/views/domain/DomainEdit.vue:112 src/views/domain/DomainList.vue:64
|
||||
msgid "Disabled successfully"
|
||||
msgstr "禁用成功"
|
||||
|
||||
|
@ -227,7 +231,7 @@ msgstr "启用 TLS"
|
|||
msgid "Enabled"
|
||||
msgstr "启用"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:92
|
||||
#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:103
|
||||
#: src/views/domain/DomainList.vue:54
|
||||
msgid "Enabled successfully"
|
||||
msgstr "启用成功"
|
||||
|
@ -236,15 +240,15 @@ msgstr "启用成功"
|
|||
msgid "Encrypt website with Let's Encrypt"
|
||||
msgstr "用 Let's Encrypt 对网站进行加密"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:33
|
||||
#: src/views/domain/cert/CertInfo.vue:17
|
||||
msgid "Expiration Date: %{date}"
|
||||
msgstr "过期时间: %{date}"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:104 src/views/domain/DomainList.vue:68
|
||||
#: src/views/domain/DomainEdit.vue:115 src/views/domain/DomainList.vue:68
|
||||
msgid "Failed to disable %{msg}"
|
||||
msgstr "禁用失败 %{msg}"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:95 src/views/domain/DomainList.vue:58
|
||||
#: src/views/domain/DomainEdit.vue:106 src/views/domain/DomainList.vue:58
|
||||
msgid "Failed to enable %{msg}"
|
||||
msgstr "启用失败 %{msg}"
|
||||
|
||||
|
@ -256,10 +260,14 @@ msgstr "获取证书信息失败"
|
|||
msgid "File Not Found"
|
||||
msgstr "未找到文件"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:7
|
||||
#: src/language/constants.ts:20 src/views/domain/DomainAdd.vue:7
|
||||
msgid "Finished"
|
||||
msgstr "完成"
|
||||
|
||||
#: src/language/constants.ts:11
|
||||
msgid "Generating private key for registering account"
|
||||
msgstr "正在生成私钥用于注册账户"
|
||||
|
||||
#: src/views/domain/cert/IssueCert.vue:85
|
||||
msgid "Getting the certificate, please wait..."
|
||||
msgstr "正在获取证书,请稍等..."
|
||||
|
@ -276,7 +284,7 @@ msgstr "安装"
|
|||
msgid "Install successfully"
|
||||
msgstr "安装成功"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:31
|
||||
#: src/views/domain/cert/CertInfo.vue:15
|
||||
msgid "Intermediate Certification Authorities: %{issuer}"
|
||||
msgstr "中级证书颁发机构: %{issuer}"
|
||||
|
||||
|
@ -383,7 +391,7 @@ msgstr "取消"
|
|||
msgid "Not Found"
|
||||
msgstr "找不到页面"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:35
|
||||
#: src/views/domain/cert/CertInfo.vue:19
|
||||
msgid "Not Valid Before: %{date}"
|
||||
msgstr "此前无效: %{date}"
|
||||
|
||||
|
@ -393,6 +401,10 @@ msgid ""
|
|||
"you need to get the certificate."
|
||||
msgstr "注意:当前配置中的 server_name 必须为需要申请证书的域名。"
|
||||
|
||||
#: src/language/constants.ts:16
|
||||
msgid "Obtaining certificate"
|
||||
msgstr "正在获取证书"
|
||||
|
||||
#: src/components/StdDataDisplay/StdCurd.vue:27
|
||||
#: src/components/StdDataDisplay/StdTable.vue:40
|
||||
#: src/views/domain/DomainList.vue:26
|
||||
|
@ -432,6 +444,10 @@ msgstr "请输入您的密码!"
|
|||
msgid "Please input your username!"
|
||||
msgstr "请输入您的用户名!"
|
||||
|
||||
#: src/language/constants.ts:12
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "正在准备 Lego 的配置"
|
||||
|
||||
#: src/language/constants.ts:7
|
||||
msgid "Prohibit changing root password in demo"
|
||||
msgstr "禁止在演示模式下修改 root 账户的密码"
|
||||
|
@ -452,11 +468,19 @@ msgstr "读"
|
|||
msgid "Receive"
|
||||
msgstr "下载"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Registering user"
|
||||
msgstr "正在注册用户"
|
||||
|
||||
#: src/language/constants.ts:19
|
||||
msgid "Reloading nginx"
|
||||
msgstr "正在重载 Nginx"
|
||||
|
||||
#: src/components/StdDataDisplay/StdTable.vue:187
|
||||
msgid "Reset"
|
||||
msgstr "重置"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:169
|
||||
#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:181
|
||||
msgid "Save"
|
||||
msgstr "保存"
|
||||
|
||||
|
@ -475,7 +499,7 @@ msgid "Save Successfully"
|
|||
msgstr "保存成功"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
|
||||
#: src/views/domain/DomainEdit.vue:80
|
||||
#: src/views/domain/DomainEdit.vue:91
|
||||
msgid "Saved successfully"
|
||||
msgstr "保存成功"
|
||||
|
||||
|
@ -484,10 +508,9 @@ msgid "Send"
|
|||
msgstr "上传"
|
||||
|
||||
#: src/components/StdDataDisplay/StdTable.vue:112
|
||||
#: src/components/StdDataDisplay/StdTable.vue:94
|
||||
#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:44
|
||||
#: src/views/domain/DomainEdit.vue:56 src/views/domain/DomainEdit.vue:65
|
||||
#: src/views/domain/DomainEdit.vue:83 src/views/domain/DomainList.vue:78
|
||||
#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:56
|
||||
#: src/views/domain/DomainEdit.vue:68 src/views/domain/DomainEdit.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:94 src/views/domain/DomainList.vue:78
|
||||
#: src/views/other/Install.vue:71
|
||||
msgid "Server error"
|
||||
msgstr "服务器错误"
|
||||
|
@ -525,7 +548,7 @@ msgstr "状态"
|
|||
msgid "Storage"
|
||||
msgstr "存储"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:32
|
||||
#: src/views/domain/cert/CertInfo.vue:16
|
||||
msgid "Subject Name: %{name}"
|
||||
msgstr "主体名称: %{name}"
|
||||
|
||||
|
@ -573,6 +596,10 @@ msgstr "用户名"
|
|||
msgid "Username (*)"
|
||||
msgstr "用户名 (*)"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Using HTTP01 challenge provider"
|
||||
msgstr "使用 HTTP01 challenge provider"
|
||||
|
||||
#: src/views/domain/cert/IssueCert.vue:12 src/views/domain/DomainAdd.vue:24
|
||||
msgid "Warning"
|
||||
msgstr "警告"
|
||||
|
@ -582,6 +609,14 @@ msgstr "警告"
|
|||
msgid "Writes"
|
||||
msgstr "写"
|
||||
|
||||
#: src/language/constants.ts:18
|
||||
msgid "Writing certificate private key to disk"
|
||||
msgstr "正在将证书私钥写入磁盘"
|
||||
|
||||
#: src/language/constants.ts:17
|
||||
msgid "Writing certificate to disk"
|
||||
msgstr "正在将证书写入磁盘"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:16
|
||||
msgid "Yes"
|
||||
msgstr "是的"
|
||||
|
|
|
@ -64,7 +64,7 @@ msgstr "已關閉 %{name} 自動續簽"
|
|||
msgid "Auto-renewal enabled for %{name}"
|
||||
msgstr "已啟用 %{name} 自動續簽"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:166
|
||||
#: src/views/domain/DomainEdit.vue:178
|
||||
msgid "Back"
|
||||
msgstr "返回"
|
||||
|
||||
|
@ -90,22 +90,22 @@ msgstr "構建基於"
|
|||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:40
|
||||
#: src/views/domain/cert/CertInfo.vue:24
|
||||
msgid "Certificate has expired"
|
||||
msgstr "此憑證已過期"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:44
|
||||
#: src/views/domain/cert/CertInfo.vue:28
|
||||
msgid "Certificate is valid"
|
||||
msgstr "此憑證有效"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:30
|
||||
#: src/views/domain/cert/CertInfo.vue:14
|
||||
msgid "Certificate Status"
|
||||
msgstr "憑證狀態"
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:29
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:21
|
||||
#: src/views/domain/ngx_conf/LocationEditor.vue:7
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:154
|
||||
#: src/views/domain/ngx_conf/NgxConfigEditor.vue:155
|
||||
msgid "Comments"
|
||||
msgstr "註釋"
|
||||
|
||||
|
@ -142,6 +142,10 @@ msgstr "再創建一個"
|
|||
msgid "Created at"
|
||||
msgstr "建立時間"
|
||||
|
||||
#: src/language/constants.ts:13
|
||||
msgid "Creating client facilitates communication with the CA server"
|
||||
msgstr ""
|
||||
|
||||
#: src/routes/index.ts:26
|
||||
msgid "Dashboard"
|
||||
msgstr "儀表盤"
|
||||
|
@ -185,7 +189,7 @@ msgstr "關閉 %{name} 自動續簽失敗"
|
|||
msgid "Disabled"
|
||||
msgstr "禁用"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:101 src/views/domain/DomainList.vue:64
|
||||
#: src/views/domain/DomainEdit.vue:112 src/views/domain/DomainList.vue:64
|
||||
msgid "Disabled successfully"
|
||||
msgstr "禁用成功"
|
||||
|
||||
|
@ -231,7 +235,7 @@ msgstr "啟用 TLS"
|
|||
msgid "Enabled"
|
||||
msgstr "啟用"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:92
|
||||
#: src/views/domain/DomainAdd.vue:46 src/views/domain/DomainEdit.vue:103
|
||||
#: src/views/domain/DomainList.vue:54
|
||||
msgid "Enabled successfully"
|
||||
msgstr "啟用成功"
|
||||
|
@ -240,15 +244,15 @@ msgstr "啟用成功"
|
|||
msgid "Encrypt website with Let's Encrypt"
|
||||
msgstr "用 Let's Encrypt 對網站進行加密"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:33
|
||||
#: src/views/domain/cert/CertInfo.vue:17
|
||||
msgid "Expiration Date: %{date}"
|
||||
msgstr "過期時間: %{date}"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:104 src/views/domain/DomainList.vue:68
|
||||
#: src/views/domain/DomainEdit.vue:115 src/views/domain/DomainList.vue:68
|
||||
msgid "Failed to disable %{msg}"
|
||||
msgstr "禁用失敗 %{msg}"
|
||||
|
||||
#: src/views/domain/DomainEdit.vue:95 src/views/domain/DomainList.vue:58
|
||||
#: src/views/domain/DomainEdit.vue:106 src/views/domain/DomainList.vue:58
|
||||
msgid "Failed to enable %{msg}"
|
||||
msgstr "啟用失敗 %{msg}"
|
||||
|
||||
|
@ -260,10 +264,14 @@ msgstr ""
|
|||
msgid "File Not Found"
|
||||
msgstr "未找到檔案"
|
||||
|
||||
#: src/views/domain/DomainAdd.vue:7
|
||||
#: src/language/constants.ts:20 src/views/domain/DomainAdd.vue:7
|
||||
msgid "Finished"
|
||||
msgstr "完成"
|
||||
|
||||
#: src/language/constants.ts:11
|
||||
msgid "Generating private key for registering account"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/IssueCert.vue:85
|
||||
msgid "Getting the certificate, please wait..."
|
||||
msgstr "正在獲取憑證,請稍等..."
|
||||
|
@ -281,7 +289,7 @@ msgstr "安裝"
|
|||
msgid "Install successfully"
|
||||
msgstr "啟用成功"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:31
|
||||
#: src/views/domain/cert/CertInfo.vue:15
|
||||
msgid "Intermediate Certification Authorities: %{issuer}"
|
||||
msgstr "中級憑證頒發機構: %{issuer}"
|
||||
|
||||
|
@ -390,7 +398,7 @@ msgstr "取消"
|
|||
msgid "Not Found"
|
||||
msgstr "找不到頁面"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:35
|
||||
#: src/views/domain/cert/CertInfo.vue:19
|
||||
msgid "Not Valid Before: %{date}"
|
||||
msgstr "此前無效: %{date}"
|
||||
|
||||
|
@ -401,6 +409,10 @@ msgid ""
|
|||
"you need to get the certificate."
|
||||
msgstr "注意:當前配置中的 server_name 必須為需要申請憑證的域名。"
|
||||
|
||||
#: src/language/constants.ts:16
|
||||
msgid "Obtaining certificate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDataDisplay/StdCurd.vue:27
|
||||
#: src/components/StdDataDisplay/StdTable.vue:40
|
||||
#: src/views/domain/DomainList.vue:26
|
||||
|
@ -440,6 +452,11 @@ msgstr "請輸入您的密碼!"
|
|||
msgid "Please input your username!"
|
||||
msgstr "請輸入您的使用者名稱!"
|
||||
|
||||
#: src/language/constants.ts:12
|
||||
#, fuzzy
|
||||
msgid "Preparing lego configurations"
|
||||
msgstr "配置"
|
||||
|
||||
#: src/language/constants.ts:7
|
||||
msgid "Prohibit changing root password in demo"
|
||||
msgstr ""
|
||||
|
@ -460,11 +477,19 @@ msgstr "讀"
|
|||
msgid "Receive"
|
||||
msgstr "下載"
|
||||
|
||||
#: src/language/constants.ts:15
|
||||
msgid "Registering user"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:19
|
||||
msgid "Reloading nginx"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/StdDataDisplay/StdTable.vue:187
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:169
|
||||
#: src/views/config/ConfigEdit.vue:52 src/views/domain/DomainEdit.vue:181
|
||||
msgid "Save"
|
||||
msgstr "儲存"
|
||||
|
||||
|
@ -484,7 +509,7 @@ msgid "Save Successfully"
|
|||
msgstr "儲存成功"
|
||||
|
||||
#: src/views/config/ConfigEdit.vue:34 src/views/domain/DomainAdd.vue:43
|
||||
#: src/views/domain/DomainEdit.vue:80
|
||||
#: src/views/domain/DomainEdit.vue:91
|
||||
msgid "Saved successfully"
|
||||
msgstr "儲存成功"
|
||||
|
||||
|
@ -493,10 +518,9 @@ msgid "Send"
|
|||
msgstr "上傳"
|
||||
|
||||
#: src/components/StdDataDisplay/StdTable.vue:112
|
||||
#: src/components/StdDataDisplay/StdTable.vue:94
|
||||
#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:44
|
||||
#: src/views/domain/DomainEdit.vue:56 src/views/domain/DomainEdit.vue:65
|
||||
#: src/views/domain/DomainEdit.vue:83 src/views/domain/DomainList.vue:78
|
||||
#: src/views/config/ConfigEdit.vue:22 src/views/domain/DomainEdit.vue:56
|
||||
#: src/views/domain/DomainEdit.vue:68 src/views/domain/DomainEdit.vue:77
|
||||
#: src/views/domain/DomainEdit.vue:94 src/views/domain/DomainList.vue:78
|
||||
#: src/views/other/Install.vue:71
|
||||
msgid "Server error"
|
||||
msgstr "伺服器錯誤"
|
||||
|
@ -534,7 +558,7 @@ msgstr "狀態"
|
|||
msgid "Storage"
|
||||
msgstr "儲存"
|
||||
|
||||
#: src/views/domain/cert/CertInfo.vue:32
|
||||
#: src/views/domain/cert/CertInfo.vue:16
|
||||
msgid "Subject Name: %{name}"
|
||||
msgstr "主體名稱: %{name}"
|
||||
|
||||
|
@ -585,6 +609,10 @@ msgstr "使用者名稱"
|
|||
msgid "Username (*)"
|
||||
msgstr "使用者名稱 (*)"
|
||||
|
||||
#: src/language/constants.ts:14
|
||||
msgid "Using HTTP01 challenge provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/cert/IssueCert.vue:12 src/views/domain/DomainAdd.vue:24
|
||||
msgid "Warning"
|
||||
msgstr "警告"
|
||||
|
@ -594,6 +622,14 @@ msgstr "警告"
|
|||
msgid "Writes"
|
||||
msgstr "寫"
|
||||
|
||||
#: src/language/constants.ts:18
|
||||
msgid "Writing certificate private key to disk"
|
||||
msgstr ""
|
||||
|
||||
#: src/language/constants.ts:17
|
||||
msgid "Writing certificate to disk"
|
||||
msgstr ""
|
||||
|
||||
#: src/views/domain/ngx_conf/directive/DirectiveEditor.vue:16
|
||||
msgid "Yes"
|
||||
msgstr "是的"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<script setup lang="ts">
|
||||
import {useGettext} from 'vue3-gettext'
|
||||
import {computed, nextTick, ref, watch} from 'vue'
|
||||
import {computed, h, nextTick, onMounted, ref, VNode, watch} from 'vue'
|
||||
import {message} from 'ant-design-vue'
|
||||
import domain from '@/api/domain'
|
||||
import websocket from '@/lib/websocket'
|
||||
|
@ -12,6 +12,7 @@ const props = defineProps(['directivesMap', 'current_server_directives', 'enable
|
|||
const emit = defineEmits(['changeEnabled', 'callback', 'update:enabled'])
|
||||
|
||||
const issuing_cert = ref(false)
|
||||
const modalVisible = ref(false)
|
||||
|
||||
function onchange(r: boolean) {
|
||||
emit('changeEnabled', r)
|
||||
|
@ -81,8 +82,25 @@ function change_auto_cert(r: boolean) {
|
|||
}
|
||||
}
|
||||
|
||||
const logContainer = ref(null)
|
||||
|
||||
function log(msg: string) {
|
||||
const para = document.createElement('p')
|
||||
para.appendChild(document.createTextNode($gettext(msg)));
|
||||
|
||||
(logContainer.value as any as Node).appendChild(para);
|
||||
|
||||
(logContainer.value as any as Element).scroll({top: 320, left: 0, behavior: 'smooth'})
|
||||
}
|
||||
|
||||
const issue_cert = async (server_name: string, callback: Function) => {
|
||||
message.info($gettext('Getting the certificate, please wait...'), 15)
|
||||
progressStatus.value = 'active'
|
||||
modalClosable.value = false
|
||||
modalVisible.value = true
|
||||
progressPercent.value = 0;
|
||||
(logContainer.value as any as Element).innerHTML = ''
|
||||
|
||||
log($gettext('Getting the certificate, please wait...'))
|
||||
|
||||
const ws = websocket('/api/cert/issue/' + server_name, false)
|
||||
|
||||
|
@ -92,23 +110,25 @@ const issue_cert = async (server_name: string, callback: Function) => {
|
|||
|
||||
ws.onmessage = m => {
|
||||
const r = JSON.parse(m.data)
|
||||
log(r.message)
|
||||
|
||||
switch (r.status) {
|
||||
case 'success':
|
||||
message.success(r.message, 10)
|
||||
break
|
||||
case 'info':
|
||||
message.info(r.message, 10)
|
||||
progressPercent.value += 5
|
||||
break
|
||||
case 'error':
|
||||
message.error(r.message, 10)
|
||||
default:
|
||||
modalClosable.value = true
|
||||
issuing_cert.value = false
|
||||
|
||||
if (r.status === 'success' && r.ssl_certificate !== undefined && r.ssl_certificate_key !== undefined) {
|
||||
progressStatus.value = 'success'
|
||||
progressPercent.value = 100
|
||||
callback(r.ssl_certificate, r.ssl_certificate_key)
|
||||
} else {
|
||||
progressStatus.value = 'exception'
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
if (r.status === 'success' && r.ssl_certificate !== undefined && r.ssl_certificate_key !== undefined) {
|
||||
callback(r.ssl_certificate, r.ssl_certificate_key)
|
||||
}
|
||||
|
||||
issuing_cert.value = false
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -143,9 +163,34 @@ watch(no_server_name, () => {
|
|||
emit('update:enabled', false)
|
||||
onchange(false)
|
||||
})
|
||||
|
||||
const progressStrokeColor = {
|
||||
from: '#108ee9',
|
||||
to: '#87d068',
|
||||
}
|
||||
|
||||
const progressPercent = ref(0)
|
||||
|
||||
const progressStatus = ref('active')
|
||||
|
||||
const modalClosable = ref(false)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<a-modal
|
||||
:title="$gettext('Obtaining certificate')"
|
||||
v-model:visible="modalVisible"
|
||||
:footer="null" :closable="modalClosable" force-render>
|
||||
<a-progress
|
||||
:stroke-color="progressStrokeColor"
|
||||
:percent="progressPercent"
|
||||
:status="progressStatus"
|
||||
/>
|
||||
|
||||
<div class="issue-cert-log-container" ref="logContainer">
|
||||
</div>
|
||||
|
||||
</a-modal>
|
||||
<div>
|
||||
<a-form-item :label="$gettext('Encrypt website with Let\'s Encrypt')">
|
||||
<a-switch
|
||||
|
@ -185,6 +230,22 @@ watch(no_server_name, () => {
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="less">
|
||||
.issue-cert-log-container {
|
||||
height: 320px;
|
||||
overflow: scroll;
|
||||
background-color: #f3f3f3;
|
||||
border-radius: 4px;
|
||||
margin-top: 15px;
|
||||
padding: 10px;
|
||||
|
||||
p {
|
||||
font-size: 12px;
|
||||
line-height: 1.3;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.switch-wrapper {
|
||||
position: relative;
|
||||
|
|
|
@ -8,9 +8,43 @@ import (
|
|||
"github.com/gorilla/websocket"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
)
|
||||
|
||||
const (
|
||||
Success = "success"
|
||||
Info = "info"
|
||||
Error = "error"
|
||||
)
|
||||
|
||||
type IssueCertResponse struct {
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message"`
|
||||
SSLCertificate string `json:"ssl_certificate,omitempty"`
|
||||
SSLCertificateKey string `json:"ssl_certificate_key,omitempty"`
|
||||
}
|
||||
|
||||
func handleIssueCertLogChan(conn *websocket.Conn, logChan chan string) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Println("api.handleIssueCertLogChan recover", err)
|
||||
}
|
||||
}()
|
||||
|
||||
for logString := range logChan {
|
||||
|
||||
err := conn.WriteJSON(IssueCertResponse{
|
||||
Status: Info,
|
||||
Message: logString,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Println("Error handleIssueCertLogChan", err)
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func IssueCert(c *gin.Context) {
|
||||
domain := c.Param("domain")
|
||||
|
||||
|
@ -36,97 +70,71 @@ func IssueCert(c *gin.Context) {
|
|||
|
||||
// read
|
||||
mt, message, err := ws.ReadMessage()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
if mt == websocket.TextMessage && string(message) == "go" {
|
||||
|
||||
err = cert.IssueCert(domain)
|
||||
|
||||
if err != nil {
|
||||
|
||||
log.Println(err)
|
||||
|
||||
err = ws.WriteJSON(gin.H{
|
||||
"status": "error",
|
||||
"message": err.Error(),
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
sslCertificatePath := nginx.GetNginxConfPath("ssl/" + domain + "/fullchain.cer")
|
||||
_, err = os.Stat(sslCertificatePath)
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("[found]", "fullchain.cer")
|
||||
|
||||
err = ws.WriteJSON(gin.H{
|
||||
"status": "success",
|
||||
"message": "[found] fullchain.cer",
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
sslCertificateKeyPath := nginx.GetNginxConfPath("ssl/" + domain + "/" + domain + ".key")
|
||||
_, err = os.Stat(sslCertificateKeyPath)
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("[found]", "cert key")
|
||||
err = ws.WriteJSON(gin.H{
|
||||
"status": "success",
|
||||
"message": "[found] Certificate Key",
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
certModel, err := model.FirstCert(domain)
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
err = certModel.Updates(&model.Cert{
|
||||
SSLCertificatePath: sslCertificatePath,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
err = ws.WriteJSON(gin.H{
|
||||
"status": "success",
|
||||
"message": "Issued certificate successfully",
|
||||
"ssl_certificate": sslCertificatePath,
|
||||
"ssl_certificate_key": sslCertificateKeyPath,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
if mt != websocket.TextMessage || string(message) != "go" {
|
||||
return
|
||||
}
|
||||
|
||||
logChan := make(chan string, 1)
|
||||
errChan := make(chan error, 1)
|
||||
|
||||
go cert.IssueCert(domain, logChan, errChan)
|
||||
|
||||
go handleIssueCertLogChan(ws, logChan)
|
||||
|
||||
// block, unless errChan closed
|
||||
for err = range errChan {
|
||||
log.Println("Error cert.IssueCert", err)
|
||||
|
||||
err = ws.WriteJSON(IssueCertResponse{
|
||||
Status: Error,
|
||||
Message: err.Error(),
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
close(logChan)
|
||||
|
||||
sslCertificatePath := nginx.GetNginxConfPath("ssl/" + domain + "/fullchain.cer")
|
||||
sslCertificateKeyPath := nginx.GetNginxConfPath("ssl/" + domain + "/" + domain + ".key")
|
||||
|
||||
certModel, err := model.FirstCert(domain)
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
err = certModel.Updates(&model.Cert{
|
||||
SSLCertificatePath: sslCertificatePath,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
err = ws.WriteJSON(IssueCertResponse{
|
||||
Status: Success,
|
||||
Message: "Issued certificate successfully",
|
||||
SSLCertificate: sslCertificatePath,
|
||||
SSLCertificateKey: sslCertificateKeyPath,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,6 +6,18 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
func handleIssueCertLogChan(logChan chan string) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Println("[Auto Cert] handleIssueCertLogChan", err)
|
||||
}
|
||||
}()
|
||||
|
||||
for logString := range logChan {
|
||||
log.Println("[Auto Cert] Info", logString)
|
||||
}
|
||||
}
|
||||
|
||||
func AutoCert() {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
|
@ -24,7 +36,7 @@ func AutoCert() {
|
|||
continue
|
||||
}
|
||||
|
||||
if certModel.SSLCertificatePath != "" {
|
||||
if certModel.SSLCertificatePath == "" {
|
||||
log.Println("[AutoCert] Error ssl_certificate_path is empty, " +
|
||||
"try to reopen auto-cert for this domain:" + domain)
|
||||
continue
|
||||
|
@ -41,9 +53,18 @@ func AutoCert() {
|
|||
continue
|
||||
}
|
||||
// after 1 mo, reissue certificate
|
||||
err = IssueCert(domain)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
logChan := make(chan string, 1)
|
||||
errChan := make(chan error, 1)
|
||||
|
||||
go IssueCert(domain, logChan, errChan)
|
||||
|
||||
go handleIssueCertLogChan(logChan)
|
||||
|
||||
// block, unless errChan closed
|
||||
for err = range errChan {
|
||||
log.Println("Error cert.IssueCert", err)
|
||||
}
|
||||
|
||||
close(logChan)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,13 +35,22 @@ func (u *MyUser) GetPrivateKey() crypto.PrivateKey {
|
|||
return u.key
|
||||
}
|
||||
|
||||
func IssueCert(domain string) error {
|
||||
func IssueCert(domain string, logChan chan string, errChan chan error) {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Println("Issue Cert recover", err)
|
||||
}
|
||||
}()
|
||||
|
||||
// Create a user. New accounts need an email and private key to start.
|
||||
logChan <- "Generating private key for registering account"
|
||||
privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "issue cert generate key error")
|
||||
errChan <- errors.Wrap(err, "issue cert generate key error")
|
||||
return
|
||||
}
|
||||
|
||||
logChan <- "Preparing lego configurations"
|
||||
myUser := MyUser{
|
||||
Email: settings.ServerSettings.Email,
|
||||
key: privateKey,
|
||||
|
@ -55,26 +64,32 @@ func IssueCert(domain string) error {
|
|||
|
||||
config.Certificate.KeyType = certcrypto.RSA2048
|
||||
|
||||
logChan <- "Creating client facilitates communication with the CA server"
|
||||
// A client facilitates communication with the CA server.
|
||||
client, err := lego.NewClient(config)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "issue cert new client error")
|
||||
errChan <- errors.Wrap(err, "issue cert new client error")
|
||||
return
|
||||
}
|
||||
|
||||
logChan <- "Using HTTP01 challenge provider"
|
||||
err = client.Challenge.SetHTTP01Provider(
|
||||
http01.NewProviderServer("",
|
||||
settings.ServerSettings.HTTPChallengePort,
|
||||
),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "issue cert challenge fail")
|
||||
errChan <- errors.Wrap(err, "issue cert challenge fail")
|
||||
return
|
||||
}
|
||||
|
||||
// New users will need to register
|
||||
logChan <- "Registering user"
|
||||
reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return errors.Wrap(err, "issue cert register fail")
|
||||
errChan <- errors.Wrap(err, "issue cert register fail")
|
||||
return
|
||||
}
|
||||
myUser.Registration = reg
|
||||
|
||||
|
@ -82,37 +97,46 @@ func IssueCert(domain string) error {
|
|||
Domains: []string{domain},
|
||||
Bundle: true,
|
||||
}
|
||||
|
||||
logChan <- "Obtaining certificate"
|
||||
certificates, err := client.Certificate.Obtain(request)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "issue cert fail to obtain")
|
||||
errChan <- errors.Wrap(err, "issue cert fail to obtain")
|
||||
return
|
||||
}
|
||||
saveDir := nginx.GetNginxConfPath("ssl/" + domain)
|
||||
if _, err = os.Stat(saveDir); os.IsNotExist(err) {
|
||||
err = os.Mkdir(saveDir, 0755)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "issue cert fail to create")
|
||||
errChan <- errors.Wrap(err, "issue cert fail to create")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Each certificate comes back with the cert bytes, the bytes of the client's
|
||||
// private key, and a certificate URL. SAVE THESE TO DISK.
|
||||
logChan <- "Writing certificate to disk"
|
||||
err = os.WriteFile(filepath.Join(saveDir, "fullchain.cer"),
|
||||
certificates.Certificate, 0644)
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return errors.Wrap(err, "issue cert write fullchain.cer fail")
|
||||
errChan <- errors.Wrap(err, "error issue cert write fullchain.cer")
|
||||
return
|
||||
}
|
||||
|
||||
logChan <- "Writing certificate private key to disk"
|
||||
err = os.WriteFile(filepath.Join(saveDir, domain+".key"),
|
||||
certificates.PrivateKey, 0644)
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return errors.Wrap(err, "issue cert write key fail")
|
||||
errChan <- errors.Wrap(err, "error issue cert write key")
|
||||
return
|
||||
}
|
||||
|
||||
close(errChan)
|
||||
logChan <- "Reloading nginx"
|
||||
|
||||
nginx.ReloadNginx()
|
||||
|
||||
return nil
|
||||
logChan <- "Finished"
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue