Jelajahi Sumber

chore: update translations

0xJacky 2 tahun lalu
induk
melakukan
85dbbcc54b

+ 1 - 1
frontend/package.json

@@ -1,7 +1,7 @@
 {
     "name": "nginx-ui-frontend-next",
     "private": true,
-    "version": "1.7.5",
+    "version": "1.7.6",
     "type": "commonjs",
     "scripts": {
         "dev": "vite",

+ 61 - 31
frontend/src/language/en/app.po

@@ -17,8 +17,8 @@ msgstr "About"
 msgid "Access Logs"
 msgstr ""
 
-#: src/views/cert/Cert.vue:78 src/views/config/config.ts:36
-#: src/views/domain/DomainList.vue:47 src/views/user/User.vue:43
+#: src/views/cert/Cert.vue:74 src/views/config/config.ts:36
+#: src/views/domain/DomainList.vue:48 src/views/user/User.vue:43
 msgid "Action"
 msgstr "Action"
 
@@ -85,11 +85,11 @@ msgstr ""
 msgid "Auto"
 msgstr ""
 
-#: src/views/cert/Cert.vue:41 src/views/domain/cert/ChangeCert.vue:35
+#: src/views/cert/Cert.vue:37 src/views/domain/cert/ChangeCert.vue:35
 msgid "Auto Cert"
 msgstr ""
 
-#: src/views/cert/Cert.vue:8
+#: src/views/cert/Cert.vue:9
 msgid "Auto cert is enabled, please do not modify this certification."
 msgstr ""
 
@@ -97,6 +97,10 @@ msgstr ""
 msgid "Auto Refresh"
 msgstr ""
 
+#: src/views/cert/Cert.vue:27
+msgid "Auto-Cert Log"
+msgstr ""
+
 #: src/views/domain/cert/IssueCert.vue:71
 msgid "Auto-renewal disabled for %{name}"
 msgstr "Auto-renewal disabled for %{name}"
@@ -152,7 +156,7 @@ msgstr "Certificate has expired"
 msgid "Certificate is valid"
 msgstr "Certificate is valid"
 
-#: src/views/cert/Cert.vue:12 src/views/domain/cert/Cert.vue:35
+#: src/views/cert/Cert.vue:34 src/views/domain/cert/Cert.vue:35
 msgid "Certificate Status"
 msgstr "Certificate Status"
 
@@ -176,10 +180,15 @@ msgstr ""
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
 #: src/views/domain/ngx_conf/LocationEditor.vue:35
 #: src/views/domain/ngx_conf/LocationEditor.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:181
 msgid "Comments"
 msgstr "Comments"
 
+#: src/views/cert/Cert.vue:32
+#, fuzzy
+msgid "Config Name"
+msgstr "Configuration Name"
+
 #: src/views/domain/ngx_conf/ConfigTemplate.vue:61
 #, fuzzy
 msgid "Config Templates"
@@ -258,7 +267,13 @@ msgstr "Dashboard"
 msgid "Database (Optional, default: database)"
 msgstr "Database (Optional, default: database)"
 
-#: src/components/StdDataDisplay/StdTable.vue:528
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:32
+#: src/components/StdDataDisplay/StdTable.vue:37
+#: src/components/StdDataDisplay/StdTable.vue:50
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataDisplay/StdTable.vue:57
 #: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:20
 #: src/views/domain/DomainList.vue:21 src/views/domain/DomainList.vue:28
 #: src/views/domain/DomainList.vue:32
@@ -269,7 +284,7 @@ msgstr ""
 msgid "Delete ID: %{id}"
 msgstr ""
 
-#: src/views/domain/DomainList.vue:81
+#: src/views/domain/DomainList.vue:82
 msgid "Delete site: %{site_name}"
 msgstr ""
 
@@ -304,15 +319,15 @@ msgstr "Directives"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "Disable auto-renewal failed for %{name}"
 
-#: src/views/cert/Cert.vue:51 src/views/domain/cert/ChangeCert.vue:45
+#: src/views/cert/Cert.vue:47 src/views/domain/cert/ChangeCert.vue:45
 #: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainEdit.vue:9
-#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:35
 #: src/views/domain/DomainList.vue:7 src/views/domain/DomainList.vue:8
 #: src/views/domain/DomainList.vue:9
 msgid "Disabled"
 msgstr "Disabled"
 
-#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:69
+#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:70
 msgid "Disabled successfully"
 msgstr "Disabled successfully"
 
@@ -320,14 +335,14 @@ msgstr "Disabled successfully"
 msgid "Disk IO"
 msgstr "Disk IO"
 
-#: src/views/cert/Cert.vue:32
-msgid "Domain"
-msgstr ""
-
 #: src/views/domain/DomainAdd.vue:58
 msgid "Domain Config Created Successfully"
 msgstr "Domain Config Created Successfully"
 
+#: src/views/cert/Cert.vue:21
+msgid "Domains list is empty, try to reopen auto-cert for %{config}"
+msgstr ""
+
 #: src/language/constants.ts:26
 msgid "Download latest release error"
 msgstr ""
@@ -338,9 +353,15 @@ msgstr ""
 
 #: src/views/domain/DomainList.vue:14 src/views/domain/DomainList.vue:15
 #: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:23
+#: src/views/domain/SiteDuplicate.vue:2
 msgid "Duplicate"
 msgstr ""
 
+#: src/views/domain/SiteDuplicate.vue:43
+#, fuzzy
+msgid "Duplicated successfully"
+msgstr "Saved successfully"
+
 #: src/views/domain/DomainEdit.vue:4 src/views/domain/DomainEdit.vue:5
 msgid "Edit %{n}"
 msgstr "Edit %{n}"
@@ -369,16 +390,16 @@ msgstr "Enable failed"
 msgid "Enable TLS"
 msgstr "Enable TLS"
 
-#: src/views/cert/Cert.vue:48 src/views/domain/cert/ChangeCert.vue:42
+#: src/views/cert/Cert.vue:44 src/views/domain/cert/ChangeCert.vue:42
 #: src/views/domain/DomainEdit.vue:43 src/views/domain/DomainEdit.vue:6
 #: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainList.vue:10
 #: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
-#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
+#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:32
 msgid "Enabled"
 msgstr "Enabled"
 
 #: src/views/domain/DomainAdd.vue:47 src/views/domain/DomainEdit.vue:137
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/DomainList.vue:60
 msgid "Enabled successfully"
 msgstr "Enabled successfully"
 
@@ -410,11 +431,11 @@ msgstr "Expiration Date: %{date}"
 msgid "Export"
 msgstr ""
 
-#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:73
+#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:74
 msgid "Failed to disable %{msg}"
 msgstr "Failed to disable %{msg}"
 
-#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:63
+#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:64
 msgid "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
@@ -609,7 +630,7 @@ msgstr "Single Directive"
 
 #: src/views/cert/Cert.vue:16 src/views/config/config.ts:9
 #: src/views/domain/cert/ChangeCert.vue:19 src/views/domain/DomainEdit.vue:46
-#: src/views/domain/DomainList.vue:15
+#: src/views/domain/DomainList.vue:16 src/views/domain/SiteDuplicate.vue:5
 msgid "Name"
 msgstr "Name"
 
@@ -736,6 +757,12 @@ msgstr ""
 msgid "Performing core upgrade"
 msgstr ""
 
+#: src/views/domain/SiteDuplicate.vue:28
+msgid ""
+"Please input name, this will be used as the filename of the new "
+"configuration!"
+msgstr ""
+
 #: src/views/other/Install.vue:36
 msgid "Please input your E-mail!"
 msgstr "Please input your E-mail!"
@@ -885,9 +912,8 @@ msgstr "Send"
 #: src/components/StdDataDisplay/StdTable.vue:168
 #: src/components/StdDataDisplay/StdTable.vue:343
 #: src/components/StdDataDisplay/StdTable.vue:463
-#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainEdit.vue:87
-#: src/views/domain/DomainList.vue:83 src/views/other/Install.vue:71
-#: src/views/preference/Preference.vue:41
+#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainList.vue:84
+#: src/views/other/Install.vue:71 src/views/preference/Preference.vue:41
 msgid "Server error"
 msgstr "Server error"
 
@@ -917,27 +943,27 @@ msgstr "Sites List"
 msgid "Sites List"
 msgstr "Sites List"
 
-#: src/views/cert/Cert.vue:65
+#: src/views/cert/Cert.vue:61
 #, fuzzy
 msgid "SSL Certificate Key Path"
 msgstr "Certificate Status"
 
-#: src/views/cert/Cert.vue:58
+#: src/views/cert/Cert.vue:54
 #, fuzzy
 msgid "SSL Certificate Path"
 msgstr "Certificate Status"
 
-#: src/views/cert/Cert.vue:19
+#: src/views/cert/Cert.vue:41
 #, fuzzy
 msgid "SSL Certification Content"
 msgstr "Certificate Status"
 
-#: src/views/cert/Cert.vue:22
+#: src/views/cert/Cert.vue:44
 #, fuzzy
 msgid "SSL Certification Key Content"
 msgstr "Certificate Status"
 
-#: src/views/domain/DomainList.vue:24
+#: src/views/domain/DomainList.vue:25
 msgid "Status"
 msgstr "Status"
 
@@ -1003,12 +1029,16 @@ msgstr ""
 msgid "Theme"
 msgstr ""
 
+#: src/views/cert/Cert.vue:15
+msgid "This auto-cert item is invalid, please remove it."
+msgstr ""
+
 #: src/views/config/config.ts:14
 msgid "Type"
 msgstr ""
 
-#: src/views/cert/Cert.vue:72 src/views/config/config.ts:29
-#: src/views/domain/DomainList.vue:41 src/views/user/User.vue:37
+#: src/views/cert/Cert.vue:68 src/views/config/config.ts:29
+#: src/views/domain/DomainList.vue:42 src/views/user/User.vue:37
 msgid "Updated at"
 msgstr "Updated at"
 

+ 57 - 30
frontend/src/language/messages.pot

@@ -11,9 +11,9 @@ msgstr ""
 msgid "Access Logs"
 msgstr ""
 
-#: src/views/cert/Cert.vue:78
+#: src/views/cert/Cert.vue:74
 #: src/views/config/config.ts:36
-#: src/views/domain/DomainList.vue:47
+#: src/views/domain/DomainList.vue:48
 #: src/views/user/User.vue:43
 msgid "Action"
 msgstr ""
@@ -83,12 +83,12 @@ msgstr ""
 msgid "Auto"
 msgstr ""
 
-#: src/views/cert/Cert.vue:41
+#: src/views/cert/Cert.vue:37
 #: src/views/domain/cert/ChangeCert.vue:35
 msgid "Auto Cert"
 msgstr ""
 
-#: src/views/cert/Cert.vue:8
+#: src/views/cert/Cert.vue:9
 msgid "Auto cert is enabled, please do not modify this certification."
 msgstr ""
 
@@ -96,6 +96,10 @@ msgstr ""
 msgid "Auto Refresh"
 msgstr ""
 
+#: src/views/cert/Cert.vue:27
+msgid "Auto-Cert Log"
+msgstr ""
+
 #: src/views/domain/cert/IssueCert.vue:71
 msgid "Auto-renewal disabled for %{name}"
 msgstr ""
@@ -153,7 +157,7 @@ msgstr ""
 msgid "Certificate is valid"
 msgstr ""
 
-#: src/views/cert/Cert.vue:12
+#: src/views/cert/Cert.vue:34
 #: src/views/domain/cert/Cert.vue:35
 msgid "Certificate Status"
 msgstr ""
@@ -179,10 +183,14 @@ msgstr ""
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
 #: src/views/domain/ngx_conf/LocationEditor.vue:35
 #: src/views/domain/ngx_conf/LocationEditor.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:181
 msgid "Comments"
 msgstr ""
 
+#: src/views/cert/Cert.vue:32
+msgid "Config Name"
+msgstr ""
+
 #: src/views/domain/ngx_conf/ConfigTemplate.vue:61
 msgid "Config Templates"
 msgstr ""
@@ -263,7 +271,13 @@ msgstr ""
 msgid "Database (Optional, default: database)"
 msgstr ""
 
-#: src/components/StdDataDisplay/StdTable.vue:528
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:32
+#: src/components/StdDataDisplay/StdTable.vue:37
+#: src/components/StdDataDisplay/StdTable.vue:50
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataDisplay/StdTable.vue:57
 #: src/views/domain/DomainList.vue:19
 #: src/views/domain/DomainList.vue:20
 #: src/views/domain/DomainList.vue:21
@@ -276,7 +290,7 @@ msgstr ""
 msgid "Delete ID: %{id}"
 msgstr ""
 
-#: src/views/domain/DomainList.vue:81
+#: src/views/domain/DomainList.vue:82
 msgid "Delete site: %{site_name}"
 msgstr ""
 
@@ -312,12 +326,12 @@ msgstr ""
 msgid "Disable auto-renewal failed for %{name}"
 msgstr ""
 
-#: src/views/cert/Cert.vue:51
+#: src/views/cert/Cert.vue:47
 #: src/views/domain/cert/ChangeCert.vue:45
 #: src/views/domain/DomainEdit.vue:10
 #: src/views/domain/DomainEdit.vue:9
 #: src/views/domain/DomainList.vue:16
-#: src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:35
 #: src/views/domain/DomainList.vue:7
 #: src/views/domain/DomainList.vue:8
 #: src/views/domain/DomainList.vue:9
@@ -325,7 +339,7 @@ msgid "Disabled"
 msgstr ""
 
 #: src/views/domain/DomainEdit.vue:146
-#: src/views/domain/DomainList.vue:69
+#: src/views/domain/DomainList.vue:70
 msgid "Disabled successfully"
 msgstr ""
 
@@ -333,14 +347,14 @@ msgstr ""
 msgid "Disk IO"
 msgstr ""
 
-#: src/views/cert/Cert.vue:32
-msgid "Domain"
-msgstr ""
-
 #: src/views/domain/DomainAdd.vue:58
 msgid "Domain Config Created Successfully"
 msgstr ""
 
+#: src/views/cert/Cert.vue:21
+msgid "Domains list is empty, try to reopen auto-cert for %{config}"
+msgstr ""
+
 #: src/language/constants.ts:26
 msgid "Download latest release error"
 msgstr ""
@@ -353,9 +367,14 @@ msgstr ""
 #: src/views/domain/DomainList.vue:15
 #: src/views/domain/DomainList.vue:16
 #: src/views/domain/DomainList.vue:23
+#: src/views/domain/SiteDuplicate.vue:2
 msgid "Duplicate"
 msgstr ""
 
+#: src/views/domain/SiteDuplicate.vue:43
+msgid "Duplicated successfully"
+msgstr ""
+
 #: src/views/domain/DomainEdit.vue:4
 #: src/views/domain/DomainEdit.vue:5
 msgid "Edit %{n}"
@@ -386,7 +405,7 @@ msgstr ""
 msgid "Enable TLS"
 msgstr ""
 
-#: src/views/cert/Cert.vue:48
+#: src/views/cert/Cert.vue:44
 #: src/views/domain/cert/ChangeCert.vue:42
 #: src/views/domain/DomainEdit.vue:43
 #: src/views/domain/DomainEdit.vue:6
@@ -395,13 +414,13 @@ msgstr ""
 #: src/views/domain/DomainList.vue:11
 #: src/views/domain/DomainList.vue:12
 #: src/views/domain/DomainList.vue:19
-#: src/views/domain/DomainList.vue:31
+#: src/views/domain/DomainList.vue:32
 msgid "Enabled"
 msgstr ""
 
 #: src/views/domain/DomainAdd.vue:47
 #: src/views/domain/DomainEdit.vue:137
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/DomainList.vue:60
 msgid "Enabled successfully"
 msgstr ""
 
@@ -437,12 +456,12 @@ msgid "Export"
 msgstr ""
 
 #: src/views/domain/DomainEdit.vue:149
-#: src/views/domain/DomainList.vue:73
+#: src/views/domain/DomainList.vue:74
 msgid "Failed to disable %{msg}"
 msgstr ""
 
 #: src/views/domain/DomainEdit.vue:140
-#: src/views/domain/DomainList.vue:63
+#: src/views/domain/DomainList.vue:64
 msgid "Failed to enable %{msg}"
 msgstr ""
 
@@ -636,7 +655,8 @@ msgstr ""
 #: src/views/config/config.ts:9
 #: src/views/domain/cert/ChangeCert.vue:19
 #: src/views/domain/DomainEdit.vue:46
-#: src/views/domain/DomainList.vue:15
+#: src/views/domain/DomainList.vue:16
+#: src/views/domain/SiteDuplicate.vue:5
 msgid "Name"
 msgstr ""
 
@@ -765,6 +785,10 @@ msgstr ""
 msgid "Performing core upgrade"
 msgstr ""
 
+#: src/views/domain/SiteDuplicate.vue:28
+msgid "Please input name, this will be used as the filename of the new configuration!"
+msgstr ""
+
 #: src/views/other/Install.vue:36
 msgid "Please input your E-mail!"
 msgstr ""
@@ -924,8 +948,7 @@ msgstr ""
 #: src/components/StdDataDisplay/StdTable.vue:343
 #: src/components/StdDataDisplay/StdTable.vue:463
 #: src/views/config/ConfigEdit.vue:32
-#: src/views/domain/DomainEdit.vue:87
-#: src/views/domain/DomainList.vue:83
+#: src/views/domain/DomainList.vue:84
 #: src/views/other/Install.vue:71
 #: src/views/preference/Preference.vue:41
 msgid "Server error"
@@ -957,23 +980,23 @@ msgstr ""
 msgid "Sites List"
 msgstr ""
 
-#: src/views/cert/Cert.vue:65
+#: src/views/cert/Cert.vue:61
 msgid "SSL Certificate Key Path"
 msgstr ""
 
-#: src/views/cert/Cert.vue:58
+#: src/views/cert/Cert.vue:54
 msgid "SSL Certificate Path"
 msgstr ""
 
-#: src/views/cert/Cert.vue:19
+#: src/views/cert/Cert.vue:41
 msgid "SSL Certification Content"
 msgstr ""
 
-#: src/views/cert/Cert.vue:22
+#: src/views/cert/Cert.vue:44
 msgid "SSL Certification Key Content"
 msgstr ""
 
-#: src/views/domain/DomainList.vue:24
+#: src/views/domain/DomainList.vue:25
 msgid "Status"
 msgstr ""
 
@@ -1030,13 +1053,17 @@ msgstr ""
 msgid "Theme"
 msgstr ""
 
+#: src/views/cert/Cert.vue:15
+msgid "This auto-cert item is invalid, please remove it."
+msgstr ""
+
 #: src/views/config/config.ts:14
 msgid "Type"
 msgstr ""
 
-#: src/views/cert/Cert.vue:72
+#: src/views/cert/Cert.vue:68
 #: src/views/config/config.ts:29
-#: src/views/domain/DomainList.vue:41
+#: src/views/domain/DomainList.vue:42
 #: src/views/user/User.vue:37
 msgid "Updated at"
 msgstr ""

File diff ditekan karena terlalu besar
+ 0 - 0
frontend/src/language/translations.json


TEMPAT SAMPAH
frontend/src/language/zh_CN/app.mo


+ 62 - 31
frontend/src/language/zh_CN/app.po

@@ -20,8 +20,8 @@ msgstr "关于"
 msgid "Access Logs"
 msgstr "访问日志"
 
-#: src/views/cert/Cert.vue:78 src/views/config/config.ts:36
-#: src/views/domain/DomainList.vue:47 src/views/user/User.vue:43
+#: src/views/cert/Cert.vue:74 src/views/config/config.ts:36
+#: src/views/domain/DomainList.vue:48 src/views/user/User.vue:43
 msgid "Action"
 msgstr "操作"
 
@@ -86,11 +86,11 @@ msgstr "作者"
 msgid "Auto"
 msgstr "自动"
 
-#: src/views/cert/Cert.vue:41 src/views/domain/cert/ChangeCert.vue:35
+#: src/views/cert/Cert.vue:37 src/views/domain/cert/ChangeCert.vue:35
 msgid "Auto Cert"
 msgstr "自动更新"
 
-#: src/views/cert/Cert.vue:8
+#: src/views/cert/Cert.vue:9
 msgid "Auto cert is enabled, please do not modify this certification."
 msgstr "自动更新已启用,请勿修改此证书配置。"
 
@@ -98,6 +98,10 @@ msgstr "自动更新已启用,请勿修改此证书配置。"
 msgid "Auto Refresh"
 msgstr "自动刷新"
 
+#: src/views/cert/Cert.vue:27
+msgid "Auto-Cert Log"
+msgstr "证书自动续期日志"
+
 #: src/views/domain/cert/IssueCert.vue:71
 msgid "Auto-renewal disabled for %{name}"
 msgstr "成功关闭 %{name} 自动续签"
@@ -151,7 +155,7 @@ msgstr "此证书已过期"
 msgid "Certificate is valid"
 msgstr "此证书有效"
 
-#: src/views/cert/Cert.vue:12 src/views/domain/cert/Cert.vue:35
+#: src/views/cert/Cert.vue:34 src/views/domain/cert/Cert.vue:35
 msgid "Certificate Status"
 msgstr "证书状态"
 
@@ -173,10 +177,14 @@ msgstr "重新检查"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
 #: src/views/domain/ngx_conf/LocationEditor.vue:35
 #: src/views/domain/ngx_conf/LocationEditor.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:181
 msgid "Comments"
 msgstr "注释"
 
+#: src/views/cert/Cert.vue:32
+msgid "Config Name"
+msgstr "配置文件名称"
+
 #: src/views/domain/ngx_conf/ConfigTemplate.vue:61
 msgid "Config Templates"
 msgstr "配置"
@@ -254,7 +262,13 @@ msgstr "仪表盘"
 msgid "Database (Optional, default: database)"
 msgstr "数据库 (可选,默认: database)"
 
-#: src/components/StdDataDisplay/StdTable.vue:528
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:32
+#: src/components/StdDataDisplay/StdTable.vue:37
+#: src/components/StdDataDisplay/StdTable.vue:50
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataDisplay/StdTable.vue:57
 #: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:20
 #: src/views/domain/DomainList.vue:21 src/views/domain/DomainList.vue:28
 #: src/views/domain/DomainList.vue:32
@@ -265,7 +279,7 @@ msgstr "删除"
 msgid "Delete ID: %{id}"
 msgstr "删除 ID: %{id}"
 
-#: src/views/domain/DomainList.vue:81
+#: src/views/domain/DomainList.vue:82
 msgid "Delete site: %{site_name}"
 msgstr "删除站点: %{site_name}"
 
@@ -300,15 +314,15 @@ msgstr "指令"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "关闭 %{name} 自动续签失败"
 
-#: src/views/cert/Cert.vue:51 src/views/domain/cert/ChangeCert.vue:45
+#: src/views/cert/Cert.vue:47 src/views/domain/cert/ChangeCert.vue:45
 #: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainEdit.vue:9
-#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:35
 #: src/views/domain/DomainList.vue:7 src/views/domain/DomainList.vue:8
 #: src/views/domain/DomainList.vue:9
 msgid "Disabled"
 msgstr "禁用"
 
-#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:69
+#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:70
 msgid "Disabled successfully"
 msgstr "禁用成功"
 
@@ -316,14 +330,14 @@ msgstr "禁用成功"
 msgid "Disk IO"
 msgstr "磁盘 IO"
 
-#: src/views/cert/Cert.vue:32
-msgid "Domain"
-msgstr "域名"
-
 #: src/views/domain/DomainAdd.vue:58
 msgid "Domain Config Created Successfully"
 msgstr "域名配置文件创建成功"
 
+#: src/views/cert/Cert.vue:21
+msgid "Domains list is empty, try to reopen auto-cert for %{config}"
+msgstr "域名列表为空,请尝试为%{config}重新打开证书自动续期。"
+
 #: src/language/constants.ts:26
 msgid "Download latest release error"
 msgstr "下载最新版本错误"
@@ -334,9 +348,14 @@ msgstr "下载最新版本"
 
 #: src/views/domain/DomainList.vue:14 src/views/domain/DomainList.vue:15
 #: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:23
+#: src/views/domain/SiteDuplicate.vue:2
 msgid "Duplicate"
 msgstr "复制"
 
+#: src/views/domain/SiteDuplicate.vue:43
+msgid "Duplicated successfully"
+msgstr "复制成功"
+
 #: src/views/domain/DomainEdit.vue:4 src/views/domain/DomainEdit.vue:5
 msgid "Edit %{n}"
 msgstr "编辑 %{n}"
@@ -365,16 +384,16 @@ msgstr "启用失败"
 msgid "Enable TLS"
 msgstr "启用 TLS"
 
-#: src/views/cert/Cert.vue:48 src/views/domain/cert/ChangeCert.vue:42
+#: src/views/cert/Cert.vue:44 src/views/domain/cert/ChangeCert.vue:42
 #: src/views/domain/DomainEdit.vue:43 src/views/domain/DomainEdit.vue:6
 #: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainList.vue:10
 #: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
-#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
+#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:32
 msgid "Enabled"
 msgstr "启用"
 
 #: src/views/domain/DomainAdd.vue:47 src/views/domain/DomainEdit.vue:137
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/DomainList.vue:60
 msgid "Enabled successfully"
 msgstr "启用成功"
 
@@ -406,11 +425,11 @@ msgstr "过期时间: %{date}"
 msgid "Export"
 msgstr "导出"
 
-#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:73
+#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:74
 msgid "Failed to disable %{msg}"
 msgstr "禁用失败 %{msg}"
 
-#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:63
+#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:64
 msgid "Failed to enable %{msg}"
 msgstr "启用失败 %{msg}"
 
@@ -598,7 +617,7 @@ msgstr "单行指令"
 
 #: src/views/cert/Cert.vue:16 src/views/config/config.ts:9
 #: src/views/domain/cert/ChangeCert.vue:19 src/views/domain/DomainEdit.vue:46
-#: src/views/domain/DomainList.vue:15
+#: src/views/domain/DomainList.vue:16 src/views/domain/SiteDuplicate.vue:5
 msgid "Name"
 msgstr "名称"
 
@@ -721,6 +740,12 @@ msgstr "执行核心升级错误"
 msgid "Performing core upgrade"
 msgstr "正在进行核心升级"
 
+#: src/views/domain/SiteDuplicate.vue:28
+msgid ""
+"Please input name, this will be used as the filename of the new "
+"configuration!"
+msgstr "请输入名称,这将被用作新配置的文件名。"
+
 #: src/views/other/Install.vue:36
 msgid "Please input your E-mail!"
 msgstr "请输入您的邮箱!"
@@ -865,9 +890,8 @@ msgstr "上传"
 #: src/components/StdDataDisplay/StdTable.vue:168
 #: src/components/StdDataDisplay/StdTable.vue:343
 #: src/components/StdDataDisplay/StdTable.vue:463
-#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainEdit.vue:87
-#: src/views/domain/DomainList.vue:83 src/views/other/Install.vue:71
-#: src/views/preference/Preference.vue:41
+#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainList.vue:84
+#: src/views/other/Install.vue:71 src/views/preference/Preference.vue:41
 msgid "Server error"
 msgstr "服务器错误"
 
@@ -896,23 +920,23 @@ msgstr "站点列表"
 msgid "Sites List"
 msgstr "站点列表"
 
-#: src/views/cert/Cert.vue:65
+#: src/views/cert/Cert.vue:61
 msgid "SSL Certificate Key Path"
 msgstr "SSL证书密钥路径"
 
-#: src/views/cert/Cert.vue:58
+#: src/views/cert/Cert.vue:54
 msgid "SSL Certificate Path"
 msgstr "SSL证书路径"
 
-#: src/views/cert/Cert.vue:19
+#: src/views/cert/Cert.vue:41
 msgid "SSL Certification Content"
 msgstr "SSL证书内容"
 
-#: src/views/cert/Cert.vue:22
+#: src/views/cert/Cert.vue:44
 msgid "SSL Certification Key Content"
 msgstr "SSL证书密钥内容"
 
-#: src/views/domain/DomainList.vue:24
+#: src/views/domain/DomainList.vue:25
 msgid "Status"
 msgstr "状态"
 
@@ -973,12 +997,16 @@ msgstr "用户名或密码错误"
 msgid "Theme"
 msgstr "主题"
 
+#: src/views/cert/Cert.vue:15
+msgid "This auto-cert item is invalid, please remove it."
+msgstr "这个证书自动续期项目是无效的,请删除。"
+
 #: src/views/config/config.ts:14
 msgid "Type"
 msgstr "类型"
 
-#: src/views/cert/Cert.vue:72 src/views/config/config.ts:29
-#: src/views/domain/DomainList.vue:41 src/views/user/User.vue:37
+#: src/views/cert/Cert.vue:68 src/views/config/config.ts:29
+#: src/views/domain/DomainList.vue:42 src/views/user/User.vue:37
 msgid "Updated at"
 msgstr "修改时间"
 
@@ -1061,6 +1089,9 @@ msgctxt "Project"
 msgid "License"
 msgstr "开源许可"
 
+#~ msgid "Domain"
+#~ msgstr "域名"
+
 #~ msgid "Do you want to reload Nginx?"
 #~ msgstr "你需要重载 Nginx 吗?"
 

TEMPAT SAMPAH
frontend/src/language/zh_TW/app.mo


+ 62 - 31
frontend/src/language/zh_TW/app.po

@@ -21,8 +21,8 @@ msgstr "關於"
 msgid "Access Logs"
 msgstr "訪問日誌"
 
-#: src/views/cert/Cert.vue:78 src/views/config/config.ts:36
-#: src/views/domain/DomainList.vue:47 src/views/user/User.vue:43
+#: src/views/cert/Cert.vue:74 src/views/config/config.ts:36
+#: src/views/domain/DomainList.vue:48 src/views/user/User.vue:43
 msgid "Action"
 msgstr "操作"
 
@@ -87,11 +87,11 @@ msgstr "作者"
 msgid "Auto"
 msgstr "自動"
 
-#: src/views/cert/Cert.vue:41 src/views/domain/cert/ChangeCert.vue:35
+#: src/views/cert/Cert.vue:37 src/views/domain/cert/ChangeCert.vue:35
 msgid "Auto Cert"
 msgstr "自動更新"
 
-#: src/views/cert/Cert.vue:8
+#: src/views/cert/Cert.vue:9
 msgid "Auto cert is enabled, please do not modify this certification."
 msgstr "自動證書已啟用,請不要修改此證書。"
 
@@ -99,6 +99,10 @@ msgstr "自動證書已啟用,請不要修改此證書。"
 msgid "Auto Refresh"
 msgstr "自動刷新"
 
+#: src/views/cert/Cert.vue:27
+msgid "Auto-Cert Log"
+msgstr "自動證書日誌"
+
 #: src/views/domain/cert/IssueCert.vue:71
 msgid "Auto-renewal disabled for %{name}"
 msgstr "已關閉 %{name} 自動續簽"
@@ -152,7 +156,7 @@ msgstr "此憑證已過期"
 msgid "Certificate is valid"
 msgstr "此憑證有效"
 
-#: src/views/cert/Cert.vue:12 src/views/domain/cert/Cert.vue:35
+#: src/views/cert/Cert.vue:34 src/views/domain/cert/Cert.vue:35
 msgid "Certificate Status"
 msgstr "憑證狀態"
 
@@ -174,10 +178,14 @@ msgstr "再次檢查"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:34
 #: src/views/domain/ngx_conf/LocationEditor.vue:35
 #: src/views/domain/ngx_conf/LocationEditor.vue:52
-#: src/views/domain/ngx_conf/NgxConfigEditor.vue:180
+#: src/views/domain/ngx_conf/NgxConfigEditor.vue:181
 msgid "Comments"
 msgstr "註釋"
 
+#: src/views/cert/Cert.vue:32
+msgid "Config Name"
+msgstr "配置名稱"
+
 #: src/views/domain/ngx_conf/ConfigTemplate.vue:61
 msgid "Config Templates"
 msgstr "配置模板"
@@ -255,7 +263,13 @@ msgstr "儀表盤"
 msgid "Database (Optional, default: database)"
 msgstr "資料庫 (可選,預設: database)"
 
-#: src/components/StdDataDisplay/StdTable.vue:528
+#: src/components/StdDataDisplay/StdTable.vue:31
+#: src/components/StdDataDisplay/StdTable.vue:32
+#: src/components/StdDataDisplay/StdTable.vue:37
+#: src/components/StdDataDisplay/StdTable.vue:50
+#: src/components/StdDataDisplay/StdTable.vue:52
+#: src/components/StdDataDisplay/StdTable.vue:53
+#: src/components/StdDataDisplay/StdTable.vue:57
 #: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:20
 #: src/views/domain/DomainList.vue:21 src/views/domain/DomainList.vue:28
 #: src/views/domain/DomainList.vue:32
@@ -266,7 +280,7 @@ msgstr "刪除"
 msgid "Delete ID: %{id}"
 msgstr "刪除 ID: %{id}"
 
-#: src/views/domain/DomainList.vue:81
+#: src/views/domain/DomainList.vue:82
 msgid "Delete site: %{site_name}"
 msgstr "刪除站點:%{site_name}"
 
@@ -301,15 +315,15 @@ msgstr "指令"
 msgid "Disable auto-renewal failed for %{name}"
 msgstr "關閉 %{name} 自動續簽失敗"
 
-#: src/views/cert/Cert.vue:51 src/views/domain/cert/ChangeCert.vue:45
+#: src/views/cert/Cert.vue:47 src/views/domain/cert/ChangeCert.vue:45
 #: src/views/domain/DomainEdit.vue:10 src/views/domain/DomainEdit.vue:9
-#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:34
+#: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:35
 #: src/views/domain/DomainList.vue:7 src/views/domain/DomainList.vue:8
 #: src/views/domain/DomainList.vue:9
 msgid "Disabled"
 msgstr "禁用"
 
-#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:69
+#: src/views/domain/DomainEdit.vue:146 src/views/domain/DomainList.vue:70
 msgid "Disabled successfully"
 msgstr "禁用成功"
 
@@ -317,14 +331,14 @@ msgstr "禁用成功"
 msgid "Disk IO"
 msgstr "磁碟 IO"
 
-#: src/views/cert/Cert.vue:32
-msgid "Domain"
-msgstr "網域"
-
 #: src/views/domain/DomainAdd.vue:58
 msgid "Domain Config Created Successfully"
 msgstr "域名配置文件創建成功"
 
+#: src/views/cert/Cert.vue:21
+msgid "Domains list is empty, try to reopen auto-cert for %{config}"
+msgstr "域列表為空,請嘗試重新打開 %{config} 的自動證書"
+
 #: src/language/constants.ts:26
 msgid "Download latest release error"
 msgstr "下載最新版本錯誤"
@@ -335,9 +349,14 @@ msgstr "正在下載最新版本"
 
 #: src/views/domain/DomainList.vue:14 src/views/domain/DomainList.vue:15
 #: src/views/domain/DomainList.vue:16 src/views/domain/DomainList.vue:23
+#: src/views/domain/SiteDuplicate.vue:2
 msgid "Duplicate"
 msgstr "複製"
 
+#: src/views/domain/SiteDuplicate.vue:43
+msgid "Duplicated successfully"
+msgstr "複製成功"
+
 #: src/views/domain/DomainEdit.vue:4 src/views/domain/DomainEdit.vue:5
 msgid "Edit %{n}"
 msgstr "編輯 %{n}"
@@ -366,16 +385,16 @@ msgstr "啟用失敗"
 msgid "Enable TLS"
 msgstr "啟用 TLS"
 
-#: src/views/cert/Cert.vue:48 src/views/domain/cert/ChangeCert.vue:42
+#: src/views/cert/Cert.vue:44 src/views/domain/cert/ChangeCert.vue:42
 #: src/views/domain/DomainEdit.vue:43 src/views/domain/DomainEdit.vue:6
 #: src/views/domain/DomainEdit.vue:7 src/views/domain/DomainList.vue:10
 #: src/views/domain/DomainList.vue:11 src/views/domain/DomainList.vue:12
-#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:31
+#: src/views/domain/DomainList.vue:19 src/views/domain/DomainList.vue:32
 msgid "Enabled"
 msgstr "啟用"
 
 #: src/views/domain/DomainAdd.vue:47 src/views/domain/DomainEdit.vue:137
-#: src/views/domain/DomainList.vue:59
+#: src/views/domain/DomainList.vue:60
 msgid "Enabled successfully"
 msgstr "啟用成功"
 
@@ -407,11 +426,11 @@ msgstr "過期時間: %{date}"
 msgid "Export"
 msgstr "導出"
 
-#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:73
+#: src/views/domain/DomainEdit.vue:149 src/views/domain/DomainList.vue:74
 msgid "Failed to disable %{msg}"
 msgstr "禁用失敗 %{msg}"
 
-#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:63
+#: src/views/domain/DomainEdit.vue:140 src/views/domain/DomainList.vue:64
 msgid "Failed to enable %{msg}"
 msgstr "啟用失敗 %{msg}"
 
@@ -599,7 +618,7 @@ msgstr "多行指令"
 
 #: src/views/cert/Cert.vue:16 src/views/config/config.ts:9
 #: src/views/domain/cert/ChangeCert.vue:19 src/views/domain/DomainEdit.vue:46
-#: src/views/domain/DomainList.vue:15
+#: src/views/domain/DomainList.vue:16 src/views/domain/SiteDuplicate.vue:5
 msgid "Name"
 msgstr "名稱"
 
@@ -722,6 +741,12 @@ msgstr "執行核心升級錯誤"
 msgid "Performing core upgrade"
 msgstr "正在執行核心升級"
 
+#: src/views/domain/SiteDuplicate.vue:28
+msgid ""
+"Please input name, this will be used as the filename of the new "
+"configuration!"
+msgstr "請輸入名稱,這將作為新配置的文件名!"
+
 #: src/views/other/Install.vue:36
 msgid "Please input your E-mail!"
 msgstr "請輸入您的郵箱!"
@@ -866,9 +891,8 @@ msgstr "上傳"
 #: src/components/StdDataDisplay/StdTable.vue:168
 #: src/components/StdDataDisplay/StdTable.vue:343
 #: src/components/StdDataDisplay/StdTable.vue:463
-#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainEdit.vue:87
-#: src/views/domain/DomainList.vue:83 src/views/other/Install.vue:71
-#: src/views/preference/Preference.vue:41
+#: src/views/config/ConfigEdit.vue:32 src/views/domain/DomainList.vue:84
+#: src/views/other/Install.vue:71 src/views/preference/Preference.vue:41
 msgid "Server error"
 msgstr "伺服器錯誤"
 
@@ -897,23 +921,23 @@ msgstr "網站日誌"
 msgid "Sites List"
 msgstr "站點列表"
 
-#: src/views/cert/Cert.vue:65
+#: src/views/cert/Cert.vue:61
 msgid "SSL Certificate Key Path"
 msgstr "SSL 證書密鑰路徑"
 
-#: src/views/cert/Cert.vue:58
+#: src/views/cert/Cert.vue:54
 msgid "SSL Certificate Path"
 msgstr "SSL證書路徑"
 
-#: src/views/cert/Cert.vue:19
+#: src/views/cert/Cert.vue:41
 msgid "SSL Certification Content"
 msgstr "SSL認證內容"
 
-#: src/views/cert/Cert.vue:22
+#: src/views/cert/Cert.vue:44
 msgid "SSL Certification Key Content"
 msgstr "SSL 證書密鑰內容"
 
-#: src/views/domain/DomainList.vue:24
+#: src/views/domain/DomainList.vue:25
 msgid "Status"
 msgstr "狀態"
 
@@ -975,12 +999,16 @@ msgstr "用戶名或密碼不正確"
 msgid "Theme"
 msgstr "外觀樣式"
 
+#: src/views/cert/Cert.vue:15
+msgid "This auto-cert item is invalid, please remove it."
+msgstr "此自動證書項無效,請將其刪除。"
+
 #: src/views/config/config.ts:14
 msgid "Type"
 msgstr "類型"
 
-#: src/views/cert/Cert.vue:72 src/views/config/config.ts:29
-#: src/views/domain/DomainList.vue:41 src/views/user/User.vue:37
+#: src/views/cert/Cert.vue:68 src/views/config/config.ts:29
+#: src/views/domain/DomainList.vue:42 src/views/user/User.vue:37
 msgid "Updated at"
 msgstr "修改時間"
 
@@ -1063,6 +1091,9 @@ msgctxt "Project"
 msgid "License"
 msgstr "開源軟體授權條款"
 
+#~ msgid "Domain"
+#~ msgstr "網域"
+
 #~ msgid "Do you want to reload Nginx?"
 #~ msgstr "你想重載 Nginx 嗎?"
 

+ 1 - 1
frontend/src/version.json

@@ -1 +1 @@
-{"version":"1.7.5","build_id":81,"total_build":151}
+{"version":"1.7.6","build_id":82,"total_build":152}

+ 1 - 1
frontend/version.json

@@ -1 +1 @@
-{"version":"1.7.5","build_id":81,"total_build":151}
+{"version":"1.7.6","build_id":82,"total_build":152}

+ 139 - 139
server/pkg/cert/cert.go

@@ -1,157 +1,157 @@
 package cert
 
 import (
-    "crypto"
-    "crypto/ecdsa"
-    "crypto/elliptic"
-    "crypto/rand"
-    "crypto/tls"
-    "github.com/0xJacky/Nginx-UI/server/pkg/nginx"
-    "github.com/0xJacky/Nginx-UI/server/settings"
-    "github.com/go-acme/lego/v4/certcrypto"
-    "github.com/go-acme/lego/v4/certificate"
-    "github.com/go-acme/lego/v4/challenge/http01"
-    "github.com/go-acme/lego/v4/lego"
-    "github.com/go-acme/lego/v4/registration"
-    "github.com/pkg/errors"
-    "log"
-    "net/http"
-    "os"
-    "path/filepath"
-    "strings"
+	"crypto"
+	"crypto/ecdsa"
+	"crypto/elliptic"
+	"crypto/rand"
+	"crypto/tls"
+	"github.com/0xJacky/Nginx-UI/server/pkg/nginx"
+	"github.com/0xJacky/Nginx-UI/server/settings"
+	"github.com/go-acme/lego/v4/certcrypto"
+	"github.com/go-acme/lego/v4/certificate"
+	"github.com/go-acme/lego/v4/challenge/http01"
+	"github.com/go-acme/lego/v4/lego"
+	"github.com/go-acme/lego/v4/registration"
+	"github.com/pkg/errors"
+	"log"
+	"net/http"
+	"os"
+	"path/filepath"
+	"strings"
 )
 
 // MyUser You'll need a user or account type that implements acme.User
 type MyUser struct {
-    Email        string
-    Registration *registration.Resource
-    key          crypto.PrivateKey
+	Email        string
+	Registration *registration.Resource
+	key          crypto.PrivateKey
 }
 
 func (u *MyUser) GetEmail() string {
-    return u.Email
+	return u.Email
 }
 func (u *MyUser) GetRegistration() *registration.Resource {
-    return u.Registration
+	return u.Registration
 }
 func (u *MyUser) GetPrivateKey() crypto.PrivateKey {
-    return u.key
+	return u.key
 }
 
 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 {
-        errChan <- errors.Wrap(err, "issue cert generate key error")
-        return
-    }
-
-    logChan <- "Preparing lego configurations"
-    myUser := MyUser{
-        Email: settings.ServerSettings.Email,
-        key:   privateKey,
-    }
-
-    config := lego.NewConfig(&myUser)
-
-    if settings.ServerSettings.Demo {
-        config.CADirURL = "https://acme-staging-v02.api.letsencrypt.org/directory"
-    }
-
-    if settings.ServerSettings.CADir != "" {
-        config.CADirURL = settings.ServerSettings.CADir
-        if config.HTTPClient != nil {
-            config.HTTPClient.Transport = &http.Transport{
-                TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
-            }
-        }
-    }
-
-    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 {
-        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 {
-        errChan <- errors.Wrap(err, "fail to challenge")
-        return
-    }
-
-    // New users will need to register
-    logChan <- "Registering user"
-    reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
-    if err != nil {
-        errChan <- errors.Wrap(err, "fail to register")
-        return
-    }
-    myUser.Registration = reg
-
-    request := certificate.ObtainRequest{
-        Domains: domain,
-        Bundle:  true,
-    }
-
-    logChan <- "Obtaining certificate"
-    certificates, err := client.Certificate.Obtain(request)
-    if err != nil {
-        errChan <- errors.Wrap(err, "fail to obtain")
-        return
-    }
-    name := strings.Join(domain, "_")
-    saveDir := nginx.GetConfPath("ssl/" + name)
-    if _, err = os.Stat(saveDir); os.IsNotExist(err) {
-        err = os.MkdirAll(saveDir, 0755)
-        if err != nil {
-            errChan <- errors.Wrap(err, "fail to mkdir")
-            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 {
-        errChan <- errors.Wrap(err, "error issue cert write fullchain.cer")
-        return
-    }
-
-    logChan <- "Writing certificate private key to disk"
-    err = os.WriteFile(filepath.Join(saveDir, "private.key"),
-        certificates.PrivateKey, 0644)
-
-    if err != nil {
-        errChan <- errors.Wrap(err, "fail to write key")
-        return
-    }
-
-    close(errChan)
-    logChan <- "Reloading nginx"
-
-    nginx.Reload()
-
-    logChan <- "Finished"
-
-    close(logChan)
+	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 {
+		errChan <- errors.Wrap(err, "issue cert generate key error")
+		return
+	}
+
+	logChan <- "Preparing lego configurations"
+	myUser := MyUser{
+		Email: settings.ServerSettings.Email,
+		key:   privateKey,
+	}
+
+	config := lego.NewConfig(&myUser)
+
+	if settings.ServerSettings.Demo {
+		config.CADirURL = "https://acme-staging-v02.api.letsencrypt.org/directory"
+	}
+
+	if settings.ServerSettings.CADir != "" {
+		config.CADirURL = settings.ServerSettings.CADir
+		if config.HTTPClient != nil {
+			config.HTTPClient.Transport = &http.Transport{
+				TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
+			}
+		}
+	}
+
+	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 {
+		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 {
+		errChan <- errors.Wrap(err, "fail to challenge")
+		return
+	}
+
+	// New users will need to register
+	logChan <- "Registering user"
+	reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
+	if err != nil {
+		errChan <- errors.Wrap(err, "fail to register")
+		return
+	}
+	myUser.Registration = reg
+
+	request := certificate.ObtainRequest{
+		Domains: domain,
+		Bundle:  true,
+	}
+
+	logChan <- "Obtaining certificate"
+	certificates, err := client.Certificate.Obtain(request)
+	if err != nil {
+		errChan <- errors.Wrap(err, "fail to obtain")
+		return
+	}
+	name := strings.Join(domain, "_")
+	saveDir := nginx.GetConfPath("ssl/" + name)
+	if _, err = os.Stat(saveDir); os.IsNotExist(err) {
+		err = os.MkdirAll(saveDir, 0755)
+		if err != nil {
+			errChan <- errors.Wrap(err, "fail to mkdir")
+			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 {
+		errChan <- errors.Wrap(err, "error issue cert write fullchain.cer")
+		return
+	}
+
+	logChan <- "Writing certificate private key to disk"
+	err = os.WriteFile(filepath.Join(saveDir, "private.key"),
+		certificates.PrivateKey, 0644)
+
+	if err != nil {
+		errChan <- errors.Wrap(err, "fail to write key")
+		return
+	}
+
+	close(errChan)
+	logChan <- "Reloading nginx"
+
+	nginx.Reload()
+
+	logChan <- "Finished"
+
+	close(logChan)
 }

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini