Browse Source

feat: add recursive nameservers settings for dns challenge #372

Jacky 1 year ago
parent
commit
7be4a70824

+ 22 - 4
api/api.go

@@ -4,9 +4,10 @@ import (
 	"errors"
 	"errors"
 	"github.com/0xJacky/Nginx-UI/internal/logger"
 	"github.com/0xJacky/Nginx-UI/internal/logger"
 	"github.com/gin-gonic/gin"
 	"github.com/gin-gonic/gin"
-	val "github.com/go-playground/validator/v10"
+	"github.com/go-playground/validator/v10"
 	"net/http"
 	"net/http"
 	"reflect"
 	"reflect"
+	"regexp"
 	"strings"
 	"strings"
 )
 )
 
 
@@ -27,7 +28,7 @@ func BindAndValid(c *gin.Context, target interface{}) bool {
 	if err != nil {
 	if err != nil {
 		logger.Error("bind err", err)
 		logger.Error("bind err", err)
 
 
-		var verrs val.ValidationErrors
+		var verrs validator.ValidationErrors
 		ok := errors.As(err, &verrs)
 		ok := errors.As(err, &verrs)
 
 
 		if !ok {
 		if !ok {
@@ -44,7 +45,7 @@ func BindAndValid(c *gin.Context, target interface{}) bool {
 			var path []string
 			var path []string
 
 
 			namespace := strings.Split(value.StructNamespace(), ".")
 			namespace := strings.Split(value.StructNamespace(), ".")
-			logger.Debug(t.Name(), namespace)
+			// logger.Debug(t.Name(), namespace)
 			if t.Name() != "" && len(namespace) > 1 {
 			if t.Name() != "" && len(namespace) > 1 {
 				namespace = namespace[1:]
 				namespace = namespace[1:]
 			}
 			}
@@ -67,13 +68,30 @@ func BindAndValid(c *gin.Context, target interface{}) bool {
 
 
 // findField recursively finds the field in a nested struct
 // findField recursively finds the field in a nested struct
 func getJsonPath(t reflect.Type, fields []string, path *[]string) {
 func getJsonPath(t reflect.Type, fields []string, path *[]string) {
-	f, ok := t.FieldByName(fields[0])
+	field := fields[0]
+	// used in case of array
+	var index string
+	if field[len(field)-1] == ']' {
+		re := regexp.MustCompile(`(\w+)\[(\d+)\]`)
+		matches := re.FindStringSubmatch(field)
+
+		if len(matches) > 2 {
+			field = matches[1]
+			index = matches[2]
+		}
+	}
+
+	f, ok := t.FieldByName(field)
 	if !ok {
 	if !ok {
 		return
 		return
 	}
 	}
 
 
 	*path = append(*path, f.Tag.Get("json"))
 	*path = append(*path, f.Tag.Get("json"))
 
 
+	if index != "" {
+		*path = append(*path, index)
+	}
+
 	if len(fields) > 1 {
 	if len(fields) > 1 {
 		subFields := fields[1:]
 		subFields := fields[1:]
 		getJsonPath(f.Type, subFields, path)
 		getJsonPath(f.Type, subFields, path)

+ 1 - 1
app/package.json

@@ -71,5 +71,5 @@
     "vite-svg-loader": "^5.1.0",
     "vite-svg-loader": "^5.1.0",
     "vue-tsc": "^1.8.27"
     "vue-tsc": "^1.8.27"
   },
   },
-  "packageManager": "pnpm@8.15.5+sha256.4b4efa12490e5055d59b9b9fc9438b7d581a6b7af3b5675eb5c5f447cee1a589"
+  "packageManager": "pnpm@9.0.6+sha256.0624e30eff866cdeb363b15061bdb7fd9425b17bc1bb42c22f5f4efdea21f6b3"
 }
 }

File diff suppressed because it is too large
+ 3035 - 199
app/pnpm-lock.yaml


+ 1 - 1
app/src/language/LINGUAS

@@ -1 +1 @@
-es fr_FR ko_KR ru_RU vi_VN zh_CN zh_TW
+en zh_CN zh_TW fr_FR es ru_RU vi_VN ko_KR

+ 41 - 23
app/src/language/en/app.po

@@ -18,7 +18,7 @@ msgid "Access Logs"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
-#: src/views/certificate/ACMEUserSelector.vue:72
+#: src/views/certificate/ACMEUserSelector.vue:79
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Username"
 msgstr "Username"
@@ -37,6 +37,7 @@ msgstr "Action"
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
+#: src/views/preference/BasicSettings.vue:73
 #: src/views/stream/StreamList.vue:121
 #: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr ""
 msgstr ""
@@ -123,6 +124,11 @@ msgstr "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
 
 
+#: src/views/preference/BasicSettings.vue:99
+#, fuzzy
+msgid "Are you sure you want to remove this item?"
+msgstr "Are you sure you want to remove this directive?"
+
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
@@ -175,7 +181,7 @@ msgstr "Base information"
 
 
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/domain/components/RightSettings.vue:75
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:93
+#: src/views/preference/Preference.vue:94
 #: src/views/stream/components/RightSettings.vue:74
 #: src/views/stream/components/RightSettings.vue:74
 #, fuzzy
 #, fuzzy
 msgid "Basic"
 msgid "Basic"
@@ -199,7 +205,7 @@ msgstr "Build with"
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:45
+#: src/views/preference/BasicSettings.vue:47
 msgid "CADir"
 msgid "CADir"
 msgstr ""
 msgstr ""
 
 
@@ -226,7 +232,7 @@ msgstr "Certificate has expired"
 msgid "Certificate is valid"
 msgid "Certificate is valid"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/views/preference/BasicSettings.vue:53
+#: src/views/preference/BasicSettings.vue:55
 #, fuzzy
 #, fuzzy
 msgid "Certificate Renewal Interval"
 msgid "Certificate Renewal Interval"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
@@ -377,7 +383,7 @@ msgstr "Dashboard"
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "Database (Optional, default: database)"
 msgstr "Database (Optional, default: database)"
 
 
-#: src/views/preference/BasicSettings.vue:58
+#: src/views/preference/BasicSettings.vue:60
 msgid "Days"
 msgid "Days"
 msgstr ""
 msgstr ""
 
 
@@ -763,7 +769,7 @@ msgstr ""
 msgid "Finished"
 msgid "Finished"
 msgstr "Finished"
 msgstr "Finished"
 
 
-#: src/views/preference/BasicSettings.vue:41
+#: src/views/preference/BasicSettings.vue:43
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr ""
 msgstr ""
 
 
@@ -803,7 +809,7 @@ msgstr "Base information"
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr "Getting the certificate, please wait..."
 msgstr "Getting the certificate, please wait..."
 
 
-#: src/views/preference/BasicSettings.vue:33
+#: src/views/preference/BasicSettings.vue:35
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr ""
 msgstr ""
 
 
@@ -811,15 +817,15 @@ msgstr ""
 msgid "Home"
 msgid "Home"
 msgstr "Home"
 msgstr "Home"
 
 
-#: src/views/preference/BasicSettings.vue:29
+#: src/views/preference/BasicSettings.vue:31
 msgid "HTTP Challenge Port"
 msgid "HTTP Challenge Port"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:11
+#: src/views/preference/BasicSettings.vue:13
 msgid "HTTP Host"
 msgid "HTTP Host"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:14
+#: src/views/preference/BasicSettings.vue:16
 msgid "HTTP Port"
 msgid "HTTP Port"
 msgstr ""
 msgstr ""
 
 
@@ -889,7 +895,7 @@ msgstr "Certificate Status"
 msgid "Issued certificate successfully"
 msgid "Issued certificate successfully"
 msgstr "Enabled successfully"
 msgstr "Enabled successfully"
 
 
-#: src/views/preference/BasicSettings.vue:20
+#: src/views/preference/BasicSettings.vue:22
 msgid "Jwt Secret"
 msgid "Jwt Secret"
 msgstr ""
 msgstr ""
 
 
@@ -967,7 +973,7 @@ msgstr "Login successful"
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr "Logout successful"
 msgstr "Logout successful"
 
 
-#: src/views/preference/Preference.vue:111
+#: src/views/preference/Preference.vue:112
 msgid "Logrotate"
 msgid "Logrotate"
 msgstr ""
 msgstr ""
 
 
@@ -1097,7 +1103,7 @@ msgstr ""
 msgid "Next"
 msgid "Next"
 msgstr "Next"
 msgstr "Next"
 
 
-#: src/views/preference/Preference.vue:99
+#: src/views/preference/Preference.vue:100
 msgid "Nginx"
 msgid "Nginx"
 msgstr ""
 msgstr ""
 
 
@@ -1140,11 +1146,12 @@ msgstr "Saved successfully"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/notification/Notification.vue:68
 #: src/views/notification/Notification.vue:68
+#: src/views/preference/BasicSettings.vue:101
 #: src/views/stream/StreamList.vue:165
 #: src/views/stream/StreamList.vue:165
 msgid "No"
 msgid "No"
 msgstr "No"
 msgstr "No"
 
 
-#: src/views/preference/BasicSettings.vue:23
+#: src/views/preference/BasicSettings.vue:25
 msgid "Node Secret"
 msgid "Node Secret"
 msgstr ""
 msgstr ""
 
 
@@ -1225,7 +1232,7 @@ msgstr ""
 msgid "Online"
 msgid "Online"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/Preference.vue:105
+#: src/views/preference/Preference.vue:106
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr ""
 msgstr ""
 
 
@@ -1319,7 +1326,7 @@ msgstr ""
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:239 src/views/preference/Preference.vue:88
+#: src/routes/index.ts:239 src/views/preference/Preference.vue:89
 msgid "Preference"
 msgid "Preference"
 msgstr ""
 msgstr ""
 
 
@@ -1363,6 +1370,10 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
+#: src/views/preference/BasicSettings.vue:68
+msgid "Recursive Nameservers"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:278
 #: src/components/ChatGPT/ChatGPT.vue:278
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr ""
 msgstr ""
@@ -1459,7 +1470,7 @@ msgstr ""
 msgid "Restarting"
 msgid "Restarting"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:17
+#: src/views/preference/BasicSettings.vue:19
 #, fuzzy
 #, fuzzy
 msgid "Run Mode"
 msgid "Run Mode"
 msgstr "Advance Mode"
 msgstr "Advance Mode"
@@ -1472,7 +1483,7 @@ msgstr ""
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:122 src/views/stream/StreamEdit.vue:254
+#: src/views/preference/Preference.vue:123 src/views/stream/StreamEdit.vue:254
 msgid "Save"
 msgid "Save"
 msgstr "Save"
 msgstr "Save"
 
 
@@ -1488,7 +1499,7 @@ msgstr "Save error %{msg}"
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/views/certificate/CertificateEditor.vue:45
 #: src/views/certificate/CertificateEditor.vue:45
-#: src/views/preference/Preference.vue:58
+#: src/views/preference/Preference.vue:59
 #, fuzzy
 #, fuzzy
 msgid "Save successfully"
 msgid "Save successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
@@ -1521,7 +1532,7 @@ msgstr "Send"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
-#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:62
+#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:63
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/system/Upgrade.vue:42
 #: src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgid "Server error"
@@ -1540,6 +1551,12 @@ msgstr "server_name not found in directives"
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr "server_name parameter is required"
 msgstr "server_name parameter is required"
 
 
+#: src/views/preference/BasicSettings.vue:64
+msgid ""
+"Set the recursive nameservers to override the systems nameservers for the "
+"step of DNS challenge."
+msgstr ""
+
 #: src/language/constants.ts:11
 #: src/language/constants.ts:11
 msgid "Setting DNS01 challenge provider"
 msgid "Setting DNS01 challenge provider"
 msgstr ""
 msgstr ""
@@ -1645,7 +1662,7 @@ msgstr ""
 msgid "Terminal"
 msgid "Terminal"
 msgstr "Terminal"
 msgstr "Terminal"
 
 
-#: src/views/preference/BasicSettings.vue:26
+#: src/views/preference/BasicSettings.vue:28
 msgid "Terminal Start Command"
 msgid "Terminal Start Command"
 msgstr ""
 msgstr ""
 
 
@@ -1689,8 +1706,8 @@ msgstr ""
 "Note: The server_name in the current configuration must be the domain name "
 "Note: The server_name in the current configuration must be the domain name "
 "you need to get the certificate."
 "you need to get the certificate."
 
 
-#: src/views/preference/BasicSettings.vue:36
-#: src/views/preference/BasicSettings.vue:48
+#: src/views/preference/BasicSettings.vue:38
+#: src/views/preference/BasicSettings.vue:50
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:48
 #: src/views/preference/OpenAISettings.vue:48
 msgid "The url is not valid"
 msgid "The url is not valid"
@@ -1858,6 +1875,7 @@ msgstr ""
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
 msgstr "Yes"
 msgstr "Yes"
 
 

+ 41 - 23
app/src/language/es/app.po

@@ -23,7 +23,7 @@ msgid "Access Logs"
 msgstr "Registros de acceso"
 msgstr "Registros de acceso"
 
 
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
-#: src/views/certificate/ACMEUserSelector.vue:72
+#: src/views/certificate/ACMEUserSelector.vue:79
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Usuario"
 msgstr "Usuario"
@@ -42,6 +42,7 @@ msgstr "Acción"
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
+#: src/views/preference/BasicSettings.vue:73
 #: src/views/stream/StreamList.vue:121
 #: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Agregar"
 msgstr "Agregar"
@@ -123,6 +124,11 @@ msgstr "¿Está seguro de que quiere borrar esta directiva?"
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr "¿Está seguro de que quiere borrar esta directiva?"
 msgstr "¿Está seguro de que quiere borrar esta directiva?"
 
 
+#: src/views/preference/BasicSettings.vue:99
+#, fuzzy
+msgid "Are you sure you want to remove this item?"
+msgstr "¿Está seguro de que quiere borrar esta directiva?"
+
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "¿Está seguro de que quiere borrar esta ubicación?"
 msgstr "¿Está seguro de que quiere borrar esta ubicación?"
@@ -173,7 +179,7 @@ msgstr "Información general"
 
 
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/domain/components/RightSettings.vue:75
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:93
+#: src/views/preference/Preference.vue:94
 #: src/views/stream/components/RightSettings.vue:74
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgid "Basic"
 msgstr "Básico"
 msgstr "Básico"
@@ -195,7 +201,7 @@ msgstr "Desarrollado con"
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:45
+#: src/views/preference/BasicSettings.vue:47
 msgid "CADir"
 msgid "CADir"
 msgstr "Directorio CA"
 msgstr "Directorio CA"
 
 
@@ -222,7 +228,7 @@ msgstr "El certificado expiró"
 msgid "Certificate is valid"
 msgid "Certificate is valid"
 msgstr "El certificado es válido"
 msgstr "El certificado es válido"
 
 
-#: src/views/preference/BasicSettings.vue:53
+#: src/views/preference/BasicSettings.vue:55
 #, fuzzy
 #, fuzzy
 msgid "Certificate Renewal Interval"
 msgid "Certificate Renewal Interval"
 msgstr "El certificado es válido"
 msgstr "El certificado es válido"
@@ -367,7 +373,7 @@ msgstr "Panel"
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "Base de datos (Opcional, default: database)"
 msgstr "Base de datos (Opcional, default: database)"
 
 
-#: src/views/preference/BasicSettings.vue:58
+#: src/views/preference/BasicSettings.vue:60
 msgid "Days"
 msgid "Days"
 msgstr ""
 msgstr ""
 
 
@@ -734,7 +740,7 @@ msgstr "Filtro"
 msgid "Finished"
 msgid "Finished"
 msgstr "Terminado"
 msgstr "Terminado"
 
 
-#: src/views/preference/BasicSettings.vue:41
+#: src/views/preference/BasicSettings.vue:43
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "Para usuario chino: https://mirror.ghproxy.com/"
 msgstr "Para usuario chino: https://mirror.ghproxy.com/"
 
 
@@ -770,7 +776,7 @@ msgstr "Obtener error de información de versión"
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr "Obteniendo el certificado, por favor espere..."
 msgstr "Obteniendo el certificado, por favor espere..."
 
 
-#: src/views/preference/BasicSettings.vue:33
+#: src/views/preference/BasicSettings.vue:35
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Proxy Github"
 msgstr "Proxy Github"
 
 
@@ -778,15 +784,15 @@ msgstr "Proxy Github"
 msgid "Home"
 msgid "Home"
 msgstr "Inicio"
 msgstr "Inicio"
 
 
-#: src/views/preference/BasicSettings.vue:29
+#: src/views/preference/BasicSettings.vue:31
 msgid "HTTP Challenge Port"
 msgid "HTTP Challenge Port"
 msgstr "Puerto de desafío HTTP"
 msgstr "Puerto de desafío HTTP"
 
 
-#: src/views/preference/BasicSettings.vue:11
+#: src/views/preference/BasicSettings.vue:13
 msgid "HTTP Host"
 msgid "HTTP Host"
 msgstr "Host HTTP"
 msgstr "Host HTTP"
 
 
-#: src/views/preference/BasicSettings.vue:14
+#: src/views/preference/BasicSettings.vue:16
 msgid "HTTP Port"
 msgid "HTTP Port"
 msgstr "Puerto HTTP"
 msgstr "Puerto HTTP"
 
 
@@ -851,7 +857,7 @@ msgstr "Obtener certificado Comodín"
 msgid "Issued certificate successfully"
 msgid "Issued certificate successfully"
 msgstr "Certificado emitido con éxito"
 msgstr "Certificado emitido con éxito"
 
 
-#: src/views/preference/BasicSettings.vue:20
+#: src/views/preference/BasicSettings.vue:22
 msgid "Jwt Secret"
 msgid "Jwt Secret"
 msgstr "Secreto Jwt"
 msgstr "Secreto Jwt"
 
 
@@ -925,7 +931,7 @@ msgstr "Acceso exitoso"
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr "Cierre de sesión exitoso"
 msgstr "Cierre de sesión exitoso"
 
 
-#: src/views/preference/Preference.vue:111
+#: src/views/preference/Preference.vue:112
 msgid "Logrotate"
 msgid "Logrotate"
 msgstr ""
 msgstr ""
 
 
@@ -1049,7 +1055,7 @@ msgstr "Se liberó una nueva versión"
 msgid "Next"
 msgid "Next"
 msgstr "Siguiente"
 msgstr "Siguiente"
 
 
-#: src/views/preference/Preference.vue:99
+#: src/views/preference/Preference.vue:100
 msgid "Nginx"
 msgid "Nginx"
 msgstr "Nginx"
 msgstr "Nginx"
 
 
@@ -1089,11 +1095,12 @@ msgstr "Nginx reiniciado con éxito"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/notification/Notification.vue:68
 #: src/views/notification/Notification.vue:68
+#: src/views/preference/BasicSettings.vue:101
 #: src/views/stream/StreamList.vue:165
 #: src/views/stream/StreamList.vue:165
 msgid "No"
 msgid "No"
 msgstr "No"
 msgstr "No"
 
 
-#: src/views/preference/BasicSettings.vue:23
+#: src/views/preference/BasicSettings.vue:25
 msgid "Node Secret"
 msgid "Node Secret"
 msgstr "Secreto del nodo"
 msgstr "Secreto del nodo"
 
 
@@ -1171,7 +1178,7 @@ msgstr "Una vez que se complete la verificación, los registros se eliminarán."
 msgid "Online"
 msgid "Online"
 msgstr "En línea"
 msgstr "En línea"
 
 
-#: src/views/preference/Preference.vue:105
+#: src/views/preference/Preference.vue:106
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
@@ -1273,7 +1280,7 @@ msgstr "¡Seleccione al menos un nodo!"
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr "Prelanzamiento"
 msgstr "Prelanzamiento"
 
 
-#: src/routes/index.ts:239 src/views/preference/Preference.vue:88
+#: src/routes/index.ts:239 src/views/preference/Preference.vue:89
 msgid "Preference"
 msgid "Preference"
 msgstr "Configuración"
 msgstr "Configuración"
 
 
@@ -1316,6 +1323,10 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "Eliminado con éxito"
 msgstr "Eliminado con éxito"
 
 
+#: src/views/preference/BasicSettings.vue:68
+msgid "Recursive Nameservers"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:278
 #: src/components/ChatGPT/ChatGPT.vue:278
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Regenerar respuesta"
 msgstr "Regenerar respuesta"
@@ -1407,7 +1418,7 @@ msgstr "Reiniciar"
 msgid "Restarting"
 msgid "Restarting"
 msgstr "Reiniciando"
 msgstr "Reiniciando"
 
 
-#: src/views/preference/BasicSettings.vue:17
+#: src/views/preference/BasicSettings.vue:19
 msgid "Run Mode"
 msgid "Run Mode"
 msgstr "Modo de ejecución"
 msgstr "Modo de ejecución"
 
 
@@ -1419,7 +1430,7 @@ msgstr "Corriendo"
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:122 src/views/stream/StreamEdit.vue:254
+#: src/views/preference/Preference.vue:123 src/views/stream/StreamEdit.vue:254
 msgid "Save"
 msgid "Save"
 msgstr "Guardar"
 msgstr "Guardar"
 
 
@@ -1435,7 +1446,7 @@ msgstr "Error al guardar %{msg}"
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/views/certificate/CertificateEditor.vue:45
 #: src/views/certificate/CertificateEditor.vue:45
-#: src/views/preference/Preference.vue:58
+#: src/views/preference/Preference.vue:59
 msgid "Save successfully"
 msgid "Save successfully"
 msgstr "Guardado con éxito"
 msgstr "Guardado con éxito"
 
 
@@ -1467,7 +1478,7 @@ msgstr "Enviado"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
-#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:62
+#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:63
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/system/Upgrade.vue:42
 #: src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgid "Server error"
@@ -1486,6 +1497,12 @@ msgstr "No se encuentra server_name en las directivas"
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr "Se requiere el parámetro server_name"
 msgstr "Se requiere el parámetro server_name"
 
 
+#: src/views/preference/BasicSettings.vue:64
+msgid ""
+"Set the recursive nameservers to override the systems nameservers for the "
+"step of DNS challenge."
+msgstr ""
+
 #: src/language/constants.ts:11
 #: src/language/constants.ts:11
 msgid "Setting DNS01 challenge provider"
 msgid "Setting DNS01 challenge provider"
 msgstr "Usando el proveedor de desafíos DNS01"
 msgstr "Usando el proveedor de desafíos DNS01"
@@ -1583,7 +1600,7 @@ msgstr "Objetivo"
 msgid "Terminal"
 msgid "Terminal"
 msgstr "Terminal"
 msgstr "Terminal"
 
 
-#: src/views/preference/BasicSettings.vue:26
+#: src/views/preference/BasicSettings.vue:28
 msgid "Terminal Start Command"
 msgid "Terminal Start Command"
 msgstr "Comando de inicio de terminal"
 msgstr "Comando de inicio de terminal"
 
 
@@ -1625,8 +1642,8 @@ msgstr ""
 "El server_name en la configuración actual debe ser el nombre de dominio que "
 "El server_name en la configuración actual debe ser el nombre de dominio que "
 "necesita para obtener el certificado, soporta dominios múltiples."
 "necesita para obtener el certificado, soporta dominios múltiples."
 
 
-#: src/views/preference/BasicSettings.vue:36
-#: src/views/preference/BasicSettings.vue:48
+#: src/views/preference/BasicSettings.vue:38
+#: src/views/preference/BasicSettings.vue:50
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:48
 #: src/views/preference/OpenAISettings.vue:48
 msgid "The url is not valid"
 msgid "The url is not valid"
@@ -1799,6 +1816,7 @@ msgstr "Escribir certificado a disco"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
 msgstr "Si"
 msgstr "Si"
 
 

+ 41 - 23
app/src/language/fr_FR/app.po

@@ -20,7 +20,7 @@ msgid "Access Logs"
 msgstr "Journaux d'accès"
 msgstr "Journaux d'accès"
 
 
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
-#: src/views/certificate/ACMEUserSelector.vue:72
+#: src/views/certificate/ACMEUserSelector.vue:79
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Nom d'utilisateur"
 msgstr "Nom d'utilisateur"
@@ -39,6 +39,7 @@ msgstr "Action"
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
+#: src/views/preference/BasicSettings.vue:73
 #: src/views/stream/StreamList.vue:121
 #: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Ajouter"
 msgstr "Ajouter"
@@ -125,6 +126,11 @@ msgstr "Voulez-vous vraiment supprimer cette directive ?"
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr "Voulez-vous vraiment supprimer cette directive ?"
 msgstr "Voulez-vous vraiment supprimer cette directive ?"
 
 
+#: src/views/preference/BasicSettings.vue:99
+#, fuzzy
+msgid "Are you sure you want to remove this item?"
+msgstr "Voulez-vous vraiment supprimer cette directive ?"
+
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Voulez-vous vraiment supprimer cette localisation ?"
 msgstr "Voulez-vous vraiment supprimer cette localisation ?"
@@ -176,7 +182,7 @@ msgstr "Information générale"
 
 
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/domain/components/RightSettings.vue:75
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:93
+#: src/views/preference/Preference.vue:94
 #: src/views/stream/components/RightSettings.vue:74
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgid "Basic"
 msgstr "Basique"
 msgstr "Basique"
@@ -199,7 +205,7 @@ msgstr "Build avec"
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:45
+#: src/views/preference/BasicSettings.vue:47
 msgid "CADir"
 msgid "CADir"
 msgstr ""
 msgstr ""
 
 
@@ -226,7 +232,7 @@ msgstr "Le certificat a expiré"
 msgid "Certificate is valid"
 msgid "Certificate is valid"
 msgstr "Le certificat est valide"
 msgstr "Le certificat est valide"
 
 
-#: src/views/preference/BasicSettings.vue:53
+#: src/views/preference/BasicSettings.vue:55
 #, fuzzy
 #, fuzzy
 msgid "Certificate Renewal Interval"
 msgid "Certificate Renewal Interval"
 msgstr "Le certificat est valide"
 msgstr "Le certificat est valide"
@@ -375,7 +381,7 @@ msgstr "Dashboard"
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "Base de données (Facultatif, par défaut : database)"
 msgstr "Base de données (Facultatif, par défaut : database)"
 
 
-#: src/views/preference/BasicSettings.vue:58
+#: src/views/preference/BasicSettings.vue:60
 msgid "Days"
 msgid "Days"
 msgstr ""
 msgstr ""
 
 
@@ -763,7 +769,7 @@ msgstr "Filtrer"
 msgid "Finished"
 msgid "Finished"
 msgstr "Finie"
 msgstr "Finie"
 
 
-#: src/views/preference/BasicSettings.vue:41
+#: src/views/preference/BasicSettings.vue:43
 #, fuzzy
 #, fuzzy
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "Utilisateur chinois : https://mirror.ghproxy.com/"
 msgstr "Utilisateur chinois : https://mirror.ghproxy.com/"
@@ -801,7 +807,7 @@ msgstr "Erreur d'obtention des informations sur la version"
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr "Obtention du certificat, veuillez patienter..."
 msgstr "Obtention du certificat, veuillez patienter..."
 
 
-#: src/views/preference/BasicSettings.vue:33
+#: src/views/preference/BasicSettings.vue:35
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Proxy Github"
 msgstr "Proxy Github"
 
 
@@ -809,15 +815,15 @@ msgstr "Proxy Github"
 msgid "Home"
 msgid "Home"
 msgstr "Menu principal"
 msgstr "Menu principal"
 
 
-#: src/views/preference/BasicSettings.vue:29
+#: src/views/preference/BasicSettings.vue:31
 msgid "HTTP Challenge Port"
 msgid "HTTP Challenge Port"
 msgstr "Port de challenge HTTP"
 msgstr "Port de challenge HTTP"
 
 
-#: src/views/preference/BasicSettings.vue:11
+#: src/views/preference/BasicSettings.vue:13
 msgid "HTTP Host"
 msgid "HTTP Host"
 msgstr "Host HTTP"
 msgstr "Host HTTP"
 
 
-#: src/views/preference/BasicSettings.vue:14
+#: src/views/preference/BasicSettings.vue:16
 msgid "HTTP Port"
 msgid "HTTP Port"
 msgstr "Port HTTP"
 msgstr "Port HTTP"
 
 
@@ -885,7 +891,7 @@ msgstr "État du certificat"
 msgid "Issued certificate successfully"
 msgid "Issued certificate successfully"
 msgstr "Certificat délivré avec succès"
 msgstr "Certificat délivré avec succès"
 
 
-#: src/views/preference/BasicSettings.vue:20
+#: src/views/preference/BasicSettings.vue:22
 msgid "Jwt Secret"
 msgid "Jwt Secret"
 msgstr "Secret Jwt"
 msgstr "Secret Jwt"
 
 
@@ -966,7 +972,7 @@ msgstr "Connexion réussie"
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr "Déconnexion réussie"
 msgstr "Déconnexion réussie"
 
 
-#: src/views/preference/Preference.vue:111
+#: src/views/preference/Preference.vue:112
 msgid "Logrotate"
 msgid "Logrotate"
 msgstr ""
 msgstr ""
 
 
@@ -1094,7 +1100,7 @@ msgstr "Nouvelle version publiée"
 msgid "Next"
 msgid "Next"
 msgstr "Suivant"
 msgstr "Suivant"
 
 
-#: src/views/preference/Preference.vue:99
+#: src/views/preference/Preference.vue:100
 #, fuzzy
 #, fuzzy
 msgid "Nginx"
 msgid "Nginx"
 msgstr "Journal Nginx"
 msgstr "Journal Nginx"
@@ -1135,11 +1141,12 @@ msgstr "Nginx a redémarré avec succès"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/notification/Notification.vue:68
 #: src/views/notification/Notification.vue:68
+#: src/views/preference/BasicSettings.vue:101
 #: src/views/stream/StreamList.vue:165
 #: src/views/stream/StreamList.vue:165
 msgid "No"
 msgid "No"
 msgstr "Non"
 msgstr "Non"
 
 
-#: src/views/preference/BasicSettings.vue:23
+#: src/views/preference/BasicSettings.vue:25
 #, fuzzy
 #, fuzzy
 msgid "Node Secret"
 msgid "Node Secret"
 msgstr "Secret Jwt"
 msgstr "Secret Jwt"
@@ -1220,7 +1227,7 @@ msgstr ""
 msgid "Online"
 msgid "Online"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/Preference.vue:105
+#: src/views/preference/Preference.vue:106
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
@@ -1320,7 +1327,7 @@ msgstr ""
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:239 src/views/preference/Preference.vue:88
+#: src/routes/index.ts:239 src/views/preference/Preference.vue:89
 msgid "Preference"
 msgid "Preference"
 msgstr "Préférence"
 msgstr "Préférence"
 
 
@@ -1366,6 +1373,10 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "Enregistré avec succès"
 msgstr "Enregistré avec succès"
 
 
+#: src/views/preference/BasicSettings.vue:68
+msgid "Recursive Nameservers"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:278
 #: src/components/ChatGPT/ChatGPT.vue:278
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Régénérer la réponse"
 msgstr "Régénérer la réponse"
@@ -1463,7 +1474,7 @@ msgstr "Redémarrer"
 msgid "Restarting"
 msgid "Restarting"
 msgstr "Redémarrage"
 msgstr "Redémarrage"
 
 
-#: src/views/preference/BasicSettings.vue:17
+#: src/views/preference/BasicSettings.vue:19
 msgid "Run Mode"
 msgid "Run Mode"
 msgstr "Mode d'exécution"
 msgstr "Mode d'exécution"
 
 
@@ -1475,7 +1486,7 @@ msgstr "En cours d'éxécution"
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:122 src/views/stream/StreamEdit.vue:254
+#: src/views/preference/Preference.vue:123 src/views/stream/StreamEdit.vue:254
 msgid "Save"
 msgid "Save"
 msgstr "Enregistrer"
 msgstr "Enregistrer"
 
 
@@ -1491,7 +1502,7 @@ msgstr "Enregistrer l'erreur %{msg}"
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/views/certificate/CertificateEditor.vue:45
 #: src/views/certificate/CertificateEditor.vue:45
-#: src/views/preference/Preference.vue:58
+#: src/views/preference/Preference.vue:59
 msgid "Save successfully"
 msgid "Save successfully"
 msgstr "Sauvegarde réussie"
 msgstr "Sauvegarde réussie"
 
 
@@ -1523,7 +1534,7 @@ msgstr "Envoyer"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
-#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:62
+#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:63
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/system/Upgrade.vue:42
 #: src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgid "Server error"
@@ -1542,6 +1553,12 @@ msgstr "server_name introuvable dans les directives"
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr "Le paramètre server_name est obligatoire"
 msgstr "Le paramètre server_name est obligatoire"
 
 
+#: src/views/preference/BasicSettings.vue:64
+msgid ""
+"Set the recursive nameservers to override the systems nameservers for the "
+"step of DNS challenge."
+msgstr ""
+
 #: src/language/constants.ts:11
 #: src/language/constants.ts:11
 #, fuzzy
 #, fuzzy
 msgid "Setting DNS01 challenge provider"
 msgid "Setting DNS01 challenge provider"
@@ -1647,7 +1664,7 @@ msgstr ""
 msgid "Terminal"
 msgid "Terminal"
 msgstr "Terminal"
 msgstr "Terminal"
 
 
-#: src/views/preference/BasicSettings.vue:26
+#: src/views/preference/BasicSettings.vue:28
 msgid "Terminal Start Command"
 msgid "Terminal Start Command"
 msgstr "Commande de démarrage du terminal"
 msgstr "Commande de démarrage du terminal"
 
 
@@ -1692,8 +1709,8 @@ msgstr ""
 "dont vous avez besoin pour obtenir le certificat, prendre en charge "
 "dont vous avez besoin pour obtenir le certificat, prendre en charge "
 "plusieurs domaines."
 "plusieurs domaines."
 
 
-#: src/views/preference/BasicSettings.vue:36
-#: src/views/preference/BasicSettings.vue:48
+#: src/views/preference/BasicSettings.vue:38
+#: src/views/preference/BasicSettings.vue:50
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:48
 #: src/views/preference/OpenAISettings.vue:48
 msgid "The url is not valid"
 msgid "The url is not valid"
@@ -1868,6 +1885,7 @@ msgstr "Écriture du certificat sur le disque"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
 msgstr "Oui"
 msgstr "Oui"
 
 

+ 41 - 23
app/src/language/ko_KR/app.po

@@ -22,7 +22,7 @@ msgid "Access Logs"
 msgstr "접근 로그"
 msgstr "접근 로그"
 
 
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
-#: src/views/certificate/ACMEUserSelector.vue:72
+#: src/views/certificate/ACMEUserSelector.vue:79
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
 msgstr "사용자 이름"
 msgstr "사용자 이름"
@@ -41,6 +41,7 @@ msgstr "작업"
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
+#: src/views/preference/BasicSettings.vue:73
 #: src/views/stream/StreamList.vue:121
 #: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "추가"
 msgstr "추가"
@@ -122,6 +123,11 @@ msgstr "이 지시문을 정말로 제거하시겠습니까?"
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr "이 지시문을 정말로 제거하시겠습니까?"
 msgstr "이 지시문을 정말로 제거하시겠습니까?"
 
 
+#: src/views/preference/BasicSettings.vue:99
+#, fuzzy
+msgid "Are you sure you want to remove this item?"
+msgstr "이 지시문을 정말로 제거하시겠습니까?"
+
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "이 위치를 제거하시겠습니까?"
 msgstr "이 위치를 제거하시겠습니까?"
@@ -172,7 +178,7 @@ msgstr "기본 정보"
 
 
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/domain/components/RightSettings.vue:75
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:93
+#: src/views/preference/Preference.vue:94
 #: src/views/stream/components/RightSettings.vue:74
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgid "Basic"
 msgstr "기본"
 msgstr "기본"
@@ -194,7 +200,7 @@ msgstr "빌드 환경"
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:45
+#: src/views/preference/BasicSettings.vue:47
 msgid "CADir"
 msgid "CADir"
 msgstr "CA 디렉토리"
 msgstr "CA 디렉토리"
 
 
@@ -221,7 +227,7 @@ msgstr "인증서가 만료되었습니다"
 msgid "Certificate is valid"
 msgid "Certificate is valid"
 msgstr "인증서가 유효합니다"
 msgstr "인증서가 유효합니다"
 
 
-#: src/views/preference/BasicSettings.vue:53
+#: src/views/preference/BasicSettings.vue:55
 #, fuzzy
 #, fuzzy
 msgid "Certificate Renewal Interval"
 msgid "Certificate Renewal Interval"
 msgstr "인증서가 유효합니다"
 msgstr "인증서가 유효합니다"
@@ -365,7 +371,7 @@ msgstr "대시보드"
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "데이터베이스 (선택사항, 기본값: database)"
 msgstr "데이터베이스 (선택사항, 기본값: database)"
 
 
-#: src/views/preference/BasicSettings.vue:58
+#: src/views/preference/BasicSettings.vue:60
 msgid "Days"
 msgid "Days"
 msgstr ""
 msgstr ""
 
 
@@ -733,7 +739,7 @@ msgstr "필터"
 msgid "Finished"
 msgid "Finished"
 msgstr "완료됨"
 msgstr "완료됨"
 
 
-#: src/views/preference/BasicSettings.vue:41
+#: src/views/preference/BasicSettings.vue:43
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "중국 사용자를 위해: https://mirror.ghproxy.com/"
 msgstr "중국 사용자를 위해: https://mirror.ghproxy.com/"
 
 
@@ -773,7 +779,7 @@ msgstr "릴리스 정보 가져오기 오류"
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr "인증서를 가져오는 중입니다. 잠시 기다려 주세요..."
 msgstr "인증서를 가져오는 중입니다. 잠시 기다려 주세요..."
 
 
-#: src/views/preference/BasicSettings.vue:33
+#: src/views/preference/BasicSettings.vue:35
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Github 프록시"
 msgstr "Github 프록시"
 
 
@@ -781,15 +787,15 @@ msgstr "Github 프록시"
 msgid "Home"
 msgid "Home"
 msgstr "홈"
 msgstr "홈"
 
 
-#: src/views/preference/BasicSettings.vue:29
+#: src/views/preference/BasicSettings.vue:31
 msgid "HTTP Challenge Port"
 msgid "HTTP Challenge Port"
 msgstr "HTTP 검증 포트"
 msgstr "HTTP 검증 포트"
 
 
-#: src/views/preference/BasicSettings.vue:11
+#: src/views/preference/BasicSettings.vue:13
 msgid "HTTP Host"
 msgid "HTTP Host"
 msgstr "HTTP 호스트"
 msgstr "HTTP 호스트"
 
 
-#: src/views/preference/BasicSettings.vue:14
+#: src/views/preference/BasicSettings.vue:16
 msgid "HTTP Port"
 msgid "HTTP Port"
 msgstr "HTTP 포트"
 msgstr "HTTP 포트"
 
 
@@ -859,7 +865,7 @@ msgstr "인증서 상태"
 msgid "Issued certificate successfully"
 msgid "Issued certificate successfully"
 msgstr "성공적으로 활성화됨"
 msgstr "성공적으로 활성화됨"
 
 
-#: src/views/preference/BasicSettings.vue:20
+#: src/views/preference/BasicSettings.vue:22
 msgid "Jwt Secret"
 msgid "Jwt Secret"
 msgstr "Jwt 토큰"
 msgstr "Jwt 토큰"
 
 
@@ -937,7 +943,7 @@ msgstr "로그인 성공"
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr "로그아웃 성공"
 msgstr "로그아웃 성공"
 
 
-#: src/views/preference/Preference.vue:111
+#: src/views/preference/Preference.vue:112
 msgid "Logrotate"
 msgid "Logrotate"
 msgstr "로그관리"
 msgstr "로그관리"
 
 
@@ -1072,7 +1078,7 @@ msgstr "새 버전 출시"
 msgid "Next"
 msgid "Next"
 msgstr "다음"
 msgstr "다음"
 
 
-#: src/views/preference/Preference.vue:99
+#: src/views/preference/Preference.vue:100
 msgid "Nginx"
 msgid "Nginx"
 msgstr "Nginx"
 msgstr "Nginx"
 
 
@@ -1115,11 +1121,12 @@ msgstr "Nginx가 성공적으로 재시작됨"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/notification/Notification.vue:68
 #: src/views/notification/Notification.vue:68
+#: src/views/preference/BasicSettings.vue:101
 #: src/views/stream/StreamList.vue:165
 #: src/views/stream/StreamList.vue:165
 msgid "No"
 msgid "No"
 msgstr "아니요"
 msgstr "아니요"
 
 
-#: src/views/preference/BasicSettings.vue:23
+#: src/views/preference/BasicSettings.vue:25
 msgid "Node Secret"
 msgid "Node Secret"
 msgstr "노드 시크릿"
 msgstr "노드 시크릿"
 
 
@@ -1200,7 +1207,7 @@ msgstr "검증이 완료되면, 레코드는 제거됩니다."
 msgid "Online"
 msgid "Online"
 msgstr "온라인"
 msgstr "온라인"
 
 
-#: src/views/preference/Preference.vue:105
+#: src/views/preference/Preference.vue:106
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "오픈AI"
 msgstr "오픈AI"
 
 
@@ -1296,7 +1303,7 @@ msgstr "적어도 하나의 노드를 선택해주세요!"
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr "사전 출시"
 msgstr "사전 출시"
 
 
-#: src/routes/index.ts:239 src/views/preference/Preference.vue:88
+#: src/routes/index.ts:239 src/views/preference/Preference.vue:89
 msgid "Preference"
 msgid "Preference"
 msgstr "환경설정"
 msgstr "환경설정"
 
 
@@ -1340,6 +1347,10 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "성공적으로 제거됨"
 msgstr "성공적으로 제거됨"
 
 
+#: src/views/preference/BasicSettings.vue:68
+msgid "Recursive Nameservers"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:278
 #: src/components/ChatGPT/ChatGPT.vue:278
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "응답 재생성"
 msgstr "응답 재생성"
@@ -1438,7 +1449,7 @@ msgstr "재시작"
 msgid "Restarting"
 msgid "Restarting"
 msgstr "재시작 중"
 msgstr "재시작 중"
 
 
-#: src/views/preference/BasicSettings.vue:17
+#: src/views/preference/BasicSettings.vue:19
 #, fuzzy
 #, fuzzy
 msgid "Run Mode"
 msgid "Run Mode"
 msgstr "실행 모드"
 msgstr "실행 모드"
@@ -1451,7 +1462,7 @@ msgstr "실행 중"
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:122 src/views/stream/StreamEdit.vue:254
+#: src/views/preference/Preference.vue:123 src/views/stream/StreamEdit.vue:254
 msgid "Save"
 msgid "Save"
 msgstr "저장"
 msgstr "저장"
 
 
@@ -1467,7 +1478,7 @@ msgstr "저장 오류 %{msg}"
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/views/certificate/CertificateEditor.vue:45
 #: src/views/certificate/CertificateEditor.vue:45
-#: src/views/preference/Preference.vue:58
+#: src/views/preference/Preference.vue:59
 #, fuzzy
 #, fuzzy
 msgid "Save successfully"
 msgid "Save successfully"
 msgstr "성공적으로 저장됨"
 msgstr "성공적으로 저장됨"
@@ -1500,7 +1511,7 @@ msgstr "보내기"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
-#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:62
+#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:63
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/system/Upgrade.vue:42
 #: src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgid "Server error"
@@ -1519,6 +1530,12 @@ msgstr "directives에서 server_name을 찾을 수 없습니다"
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr "server_name 매개변수가 필요합니다"
 msgstr "server_name 매개변수가 필요합니다"
 
 
+#: src/views/preference/BasicSettings.vue:64
+msgid ""
+"Set the recursive nameservers to override the systems nameservers for the "
+"step of DNS challenge."
+msgstr ""
+
 #: src/language/constants.ts:11
 #: src/language/constants.ts:11
 msgid "Setting DNS01 challenge provider"
 msgid "Setting DNS01 challenge provider"
 msgstr "DNS01 공급자 설정"
 msgstr "DNS01 공급자 설정"
@@ -1623,7 +1640,7 @@ msgstr "대상"
 msgid "Terminal"
 msgid "Terminal"
 msgstr "터미널"
 msgstr "터미널"
 
 
-#: src/views/preference/BasicSettings.vue:26
+#: src/views/preference/BasicSettings.vue:28
 msgid "Terminal Start Command"
 msgid "Terminal Start Command"
 msgstr "터미널 시작 명령"
 msgstr "터미널 시작 명령"
 
 
@@ -1667,8 +1684,8 @@ msgstr ""
 "Note: The server_name in the current configuration must be the domain name "
 "Note: The server_name in the current configuration must be the domain name "
 "you need to get the certificate."
 "you need to get the certificate."
 
 
-#: src/views/preference/BasicSettings.vue:36
-#: src/views/preference/BasicSettings.vue:48
+#: src/views/preference/BasicSettings.vue:38
+#: src/views/preference/BasicSettings.vue:50
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:48
 #: src/views/preference/OpenAISettings.vue:48
 msgid "The url is not valid"
 msgid "The url is not valid"
@@ -1844,6 +1861,7 @@ msgstr "인증서를 디스크에 쓰기"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
 msgstr "예"
 msgstr "예"
 
 

+ 38 - 23
app/src/language/messages.pot

@@ -13,7 +13,7 @@ msgstr ""
 
 
 #: src/routes/index.ts:128
 #: src/routes/index.ts:128
 #: src/views/certificate/ACMEUser.vue:76
 #: src/views/certificate/ACMEUser.vue:76
-#: src/views/certificate/ACMEUserSelector.vue:72
+#: src/views/certificate/ACMEUserSelector.vue:79
 msgid "ACME User"
 msgid "ACME User"
 msgstr ""
 msgstr ""
 
 
@@ -34,6 +34,7 @@ msgstr ""
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
+#: src/views/preference/BasicSettings.vue:73
 #: src/views/stream/StreamList.vue:121
 #: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr ""
 msgstr ""
@@ -115,6 +116,10 @@ msgstr ""
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/BasicSettings.vue:99
+msgid "Are you sure you want to remove this item?"
+msgstr ""
+
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr ""
 msgstr ""
@@ -167,7 +172,7 @@ msgstr ""
 
 
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/domain/components/RightSettings.vue:75
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:93
+#: src/views/preference/Preference.vue:94
 #: src/views/stream/components/RightSettings.vue:74
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgid "Basic"
 msgstr ""
 msgstr ""
@@ -190,7 +195,7 @@ msgstr ""
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:45
+#: src/views/preference/BasicSettings.vue:47
 msgid "CADir"
 msgid "CADir"
 msgstr ""
 msgstr ""
 
 
@@ -217,7 +222,7 @@ msgstr ""
 msgid "Certificate is valid"
 msgid "Certificate is valid"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:53
+#: src/views/preference/BasicSettings.vue:55
 msgid "Certificate Renewal Interval"
 msgid "Certificate Renewal Interval"
 msgstr ""
 msgstr ""
 
 
@@ -362,7 +367,7 @@ msgstr ""
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:58
+#: src/views/preference/BasicSettings.vue:60
 msgid "Days"
 msgid "Days"
 msgstr ""
 msgstr ""
 
 
@@ -738,7 +743,7 @@ msgstr ""
 msgid "Finished"
 msgid "Finished"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:41
+#: src/views/preference/BasicSettings.vue:43
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr ""
 msgstr ""
 
 
@@ -774,7 +779,7 @@ msgstr ""
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:33
+#: src/views/preference/BasicSettings.vue:35
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr ""
 msgstr ""
 
 
@@ -782,15 +787,15 @@ msgstr ""
 msgid "Home"
 msgid "Home"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:29
+#: src/views/preference/BasicSettings.vue:31
 msgid "HTTP Challenge Port"
 msgid "HTTP Challenge Port"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:11
+#: src/views/preference/BasicSettings.vue:13
 msgid "HTTP Host"
 msgid "HTTP Host"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:14
+#: src/views/preference/BasicSettings.vue:16
 msgid "HTTP Port"
 msgid "HTTP Port"
 msgstr ""
 msgstr ""
 
 
@@ -856,7 +861,7 @@ msgstr ""
 msgid "Issued certificate successfully"
 msgid "Issued certificate successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:20
+#: src/views/preference/BasicSettings.vue:22
 msgid "Jwt Secret"
 msgid "Jwt Secret"
 msgstr ""
 msgstr ""
 
 
@@ -931,7 +936,7 @@ msgstr ""
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/Preference.vue:111
+#: src/views/preference/Preference.vue:112
 msgid "Logrotate"
 msgid "Logrotate"
 msgstr ""
 msgstr ""
 
 
@@ -1049,7 +1054,7 @@ msgstr ""
 msgid "Next"
 msgid "Next"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/Preference.vue:99
+#: src/views/preference/Preference.vue:100
 msgid "Nginx"
 msgid "Nginx"
 msgstr ""
 msgstr ""
 
 
@@ -1091,11 +1096,12 @@ msgstr ""
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/notification/Notification.vue:68
 #: src/views/notification/Notification.vue:68
+#: src/views/preference/BasicSettings.vue:101
 #: src/views/stream/StreamList.vue:165
 #: src/views/stream/StreamList.vue:165
 msgid "No"
 msgid "No"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:23
+#: src/views/preference/BasicSettings.vue:25
 msgid "Node Secret"
 msgid "Node Secret"
 msgstr ""
 msgstr ""
 
 
@@ -1174,7 +1180,7 @@ msgstr ""
 msgid "Online"
 msgid "Online"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/Preference.vue:105
+#: src/views/preference/Preference.vue:106
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr ""
 msgstr ""
 
 
@@ -1265,7 +1271,7 @@ msgid "Pre-release"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/index.ts:239
 #: src/routes/index.ts:239
-#: src/views/preference/Preference.vue:88
+#: src/views/preference/Preference.vue:89
 msgid "Preference"
 msgid "Preference"
 msgstr ""
 msgstr ""
 
 
@@ -1307,6 +1313,10 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/BasicSettings.vue:68
+msgid "Recursive Nameservers"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:278
 #: src/components/ChatGPT/ChatGPT.vue:278
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr ""
 msgstr ""
@@ -1394,7 +1404,7 @@ msgstr ""
 msgid "Restarting"
 msgid "Restarting"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:17
+#: src/views/preference/BasicSettings.vue:19
 msgid "Run Mode"
 msgid "Run Mode"
 msgstr ""
 msgstr ""
 
 
@@ -1407,7 +1417,7 @@ msgstr ""
 #: src/views/config/ConfigEdit.vue:96
 #: src/views/config/ConfigEdit.vue:96
 #: src/views/domain/DomainEdit.vue:263
 #: src/views/domain/DomainEdit.vue:263
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:122
+#: src/views/preference/Preference.vue:123
 #: src/views/stream/StreamEdit.vue:254
 #: src/views/stream/StreamEdit.vue:254
 msgid "Save"
 msgid "Save"
 msgstr ""
 msgstr ""
@@ -1425,7 +1435,7 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/views/certificate/CertificateEditor.vue:45
 #: src/views/certificate/CertificateEditor.vue:45
-#: src/views/preference/Preference.vue:58
+#: src/views/preference/Preference.vue:59
 msgid "Save successfully"
 msgid "Save successfully"
 msgstr ""
 msgstr ""
 
 
@@ -1460,7 +1470,7 @@ msgstr ""
 #: src/views/config/ConfigEdit.vue:40
 #: src/views/config/ConfigEdit.vue:40
 #: src/views/domain/DomainList.vue:81
 #: src/views/domain/DomainList.vue:81
 #: src/views/other/Install.vue:70
 #: src/views/other/Install.vue:70
-#: src/views/preference/Preference.vue:62
+#: src/views/preference/Preference.vue:63
 #: src/views/stream/StreamList.vue:113
 #: src/views/stream/StreamList.vue:113
 #: src/views/stream/StreamList.vue:81
 #: src/views/stream/StreamList.vue:81
 #: src/views/system/Upgrade.vue:42
 #: src/views/system/Upgrade.vue:42
@@ -1480,6 +1490,10 @@ msgstr ""
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr ""
 msgstr ""
 
 
+#: src/views/preference/BasicSettings.vue:64
+msgid "Set the recursive nameservers to override the systems nameservers for the step of DNS challenge."
+msgstr ""
+
 #: src/language/constants.ts:11
 #: src/language/constants.ts:11
 msgid "Setting DNS01 challenge provider"
 msgid "Setting DNS01 challenge provider"
 msgstr ""
 msgstr ""
@@ -1581,7 +1595,7 @@ msgstr ""
 msgid "Terminal"
 msgid "Terminal"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:26
+#: src/views/preference/BasicSettings.vue:28
 msgid "Terminal Start Command"
 msgid "Terminal Start Command"
 msgstr ""
 msgstr ""
 
 
@@ -1613,8 +1627,8 @@ msgstr ""
 msgid "The server_name in the current configuration must be the domain name you need to get the certificate, supportmultiple domains."
 msgid "The server_name in the current configuration must be the domain name you need to get the certificate, supportmultiple domains."
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:36
-#: src/views/preference/BasicSettings.vue:48
+#: src/views/preference/BasicSettings.vue:38
+#: src/views/preference/BasicSettings.vue:50
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:48
 #: src/views/preference/OpenAISettings.vue:48
 msgid "The url is not valid"
 msgid "The url is not valid"
@@ -1776,6 +1790,7 @@ msgstr ""
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
 msgstr ""
 msgstr ""
 
 

+ 41 - 23
app/src/language/ru_RU/app.po

@@ -18,7 +18,7 @@ msgid "Access Logs"
 msgstr "Журнал доступа"
 msgstr "Журнал доступа"
 
 
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
-#: src/views/certificate/ACMEUserSelector.vue:72
+#: src/views/certificate/ACMEUserSelector.vue:79
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Пользователь"
 msgstr "Пользователь"
@@ -37,6 +37,7 @@ msgstr "Действие"
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
+#: src/views/preference/BasicSettings.vue:73
 #: src/views/stream/StreamList.vue:121
 #: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Добавить"
 msgstr "Добавить"
@@ -123,6 +124,11 @@ msgstr "Вы уверены, что хотите удалить эту дире
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr "Вы уверены, что хотите удалить эту директиву?"
 msgstr "Вы уверены, что хотите удалить эту директиву?"
 
 
+#: src/views/preference/BasicSettings.vue:99
+#, fuzzy
+msgid "Are you sure you want to remove this item?"
+msgstr "Вы уверены, что хотите удалить эту директиву?"
+
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
@@ -175,7 +181,7 @@ msgstr "Основная информация"
 
 
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/domain/components/RightSettings.vue:75
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:93
+#: src/views/preference/Preference.vue:94
 #: src/views/stream/components/RightSettings.vue:74
 #: src/views/stream/components/RightSettings.vue:74
 #, fuzzy
 #, fuzzy
 msgid "Basic"
 msgid "Basic"
@@ -199,7 +205,7 @@ msgstr "Собрать с"
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:45
+#: src/views/preference/BasicSettings.vue:47
 msgid "CADir"
 msgid "CADir"
 msgstr ""
 msgstr ""
 
 
@@ -226,7 +232,7 @@ msgstr "Срок действия сертификата истек"
 msgid "Certificate is valid"
 msgid "Certificate is valid"
 msgstr "Сертификат действителен"
 msgstr "Сертификат действителен"
 
 
-#: src/views/preference/BasicSettings.vue:53
+#: src/views/preference/BasicSettings.vue:55
 #, fuzzy
 #, fuzzy
 msgid "Certificate Renewal Interval"
 msgid "Certificate Renewal Interval"
 msgstr "Сертификат действителен"
 msgstr "Сертификат действителен"
@@ -377,7 +383,7 @@ msgstr "Доска"
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "База данных (Опционально, по умолчанию: database)"
 msgstr "База данных (Опционально, по умолчанию: database)"
 
 
-#: src/views/preference/BasicSettings.vue:58
+#: src/views/preference/BasicSettings.vue:60
 msgid "Days"
 msgid "Days"
 msgstr ""
 msgstr ""
 
 
@@ -765,7 +771,7 @@ msgstr "Фильтр"
 msgid "Finished"
 msgid "Finished"
 msgstr "Готово"
 msgstr "Готово"
 
 
-#: src/views/preference/BasicSettings.vue:41
+#: src/views/preference/BasicSettings.vue:43
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr ""
 msgstr ""
 
 
@@ -805,7 +811,7 @@ msgstr "Ошибка получения информации о релизе"
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr "Получение сертификата, пожалуйста, подождите..."
 msgstr "Получение сертификата, пожалуйста, подождите..."
 
 
-#: src/views/preference/BasicSettings.vue:33
+#: src/views/preference/BasicSettings.vue:35
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr ""
 msgstr ""
 
 
@@ -813,15 +819,15 @@ msgstr ""
 msgid "Home"
 msgid "Home"
 msgstr "Главная"
 msgstr "Главная"
 
 
-#: src/views/preference/BasicSettings.vue:29
+#: src/views/preference/BasicSettings.vue:31
 msgid "HTTP Challenge Port"
 msgid "HTTP Challenge Port"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:11
+#: src/views/preference/BasicSettings.vue:13
 msgid "HTTP Host"
 msgid "HTTP Host"
 msgstr "Хостинг HTTP"
 msgstr "Хостинг HTTP"
 
 
-#: src/views/preference/BasicSettings.vue:14
+#: src/views/preference/BasicSettings.vue:16
 msgid "HTTP Port"
 msgid "HTTP Port"
 msgstr "Порт HTTP"
 msgstr "Порт HTTP"
 
 
@@ -892,7 +898,7 @@ msgstr "Статус сертификата"
 msgid "Issued certificate successfully"
 msgid "Issued certificate successfully"
 msgstr "Сертификат успешно выдан"
 msgstr "Сертификат успешно выдан"
 
 
-#: src/views/preference/BasicSettings.vue:20
+#: src/views/preference/BasicSettings.vue:22
 msgid "Jwt Secret"
 msgid "Jwt Secret"
 msgstr ""
 msgstr ""
 
 
@@ -971,7 +977,7 @@ msgstr "Авторизация успешна"
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr "Выход выполнен успешно"
 msgstr "Выход выполнен успешно"
 
 
-#: src/views/preference/Preference.vue:111
+#: src/views/preference/Preference.vue:112
 msgid "Logrotate"
 msgid "Logrotate"
 msgstr ""
 msgstr ""
 
 
@@ -1101,7 +1107,7 @@ msgstr "Вышла новая версия"
 msgid "Next"
 msgid "Next"
 msgstr "Дальше"
 msgstr "Дальше"
 
 
-#: src/views/preference/Preference.vue:99
+#: src/views/preference/Preference.vue:100
 #, fuzzy
 #, fuzzy
 msgid "Nginx"
 msgid "Nginx"
 msgstr "Журнал"
 msgstr "Журнал"
@@ -1145,11 +1151,12 @@ msgstr "Nginx успешно перезапущен"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/notification/Notification.vue:68
 #: src/views/notification/Notification.vue:68
+#: src/views/preference/BasicSettings.vue:101
 #: src/views/stream/StreamList.vue:165
 #: src/views/stream/StreamList.vue:165
 msgid "No"
 msgid "No"
 msgstr "Нет"
 msgstr "Нет"
 
 
-#: src/views/preference/BasicSettings.vue:23
+#: src/views/preference/BasicSettings.vue:25
 msgid "Node Secret"
 msgid "Node Secret"
 msgstr ""
 msgstr ""
 
 
@@ -1230,7 +1237,7 @@ msgstr ""
 msgid "Online"
 msgid "Online"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/Preference.vue:105
+#: src/views/preference/Preference.vue:106
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr ""
 msgstr ""
 
 
@@ -1326,7 +1333,7 @@ msgstr ""
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:239 src/views/preference/Preference.vue:88
+#: src/routes/index.ts:239 src/views/preference/Preference.vue:89
 msgid "Preference"
 msgid "Preference"
 msgstr "Настройки"
 msgstr "Настройки"
 
 
@@ -1370,6 +1377,10 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "Успешно сохранено"
 msgstr "Успешно сохранено"
 
 
+#: src/views/preference/BasicSettings.vue:68
+msgid "Recursive Nameservers"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:278
 #: src/components/ChatGPT/ChatGPT.vue:278
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Восстановить ответ"
 msgstr "Восстановить ответ"
@@ -1468,7 +1479,7 @@ msgstr "Перезапуск"
 msgid "Restarting"
 msgid "Restarting"
 msgstr "Перезапускается"
 msgstr "Перезапускается"
 
 
-#: src/views/preference/BasicSettings.vue:17
+#: src/views/preference/BasicSettings.vue:19
 #, fuzzy
 #, fuzzy
 msgid "Run Mode"
 msgid "Run Mode"
 msgstr "Расширенный режим"
 msgstr "Расширенный режим"
@@ -1481,7 +1492,7 @@ msgstr "Выполняется"
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:122 src/views/stream/StreamEdit.vue:254
+#: src/views/preference/Preference.vue:123 src/views/stream/StreamEdit.vue:254
 msgid "Save"
 msgid "Save"
 msgstr "Сохранить"
 msgstr "Сохранить"
 
 
@@ -1497,7 +1508,7 @@ msgstr "Ошибка сохранения %{msg}"
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/views/certificate/CertificateEditor.vue:45
 #: src/views/certificate/CertificateEditor.vue:45
-#: src/views/preference/Preference.vue:58
+#: src/views/preference/Preference.vue:59
 #, fuzzy
 #, fuzzy
 msgid "Save successfully"
 msgid "Save successfully"
 msgstr "Успешно сохранено"
 msgstr "Успешно сохранено"
@@ -1530,7 +1541,7 @@ msgstr "Отправлено"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
-#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:62
+#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:63
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/system/Upgrade.vue:42
 #: src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgid "Server error"
@@ -1549,6 +1560,12 @@ msgstr "server_name не нашел в директивах"
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr "server_name параметр обязателен"
 msgstr "server_name параметр обязателен"
 
 
+#: src/views/preference/BasicSettings.vue:64
+msgid ""
+"Set the recursive nameservers to override the systems nameservers for the "
+"step of DNS challenge."
+msgstr ""
+
 #: src/language/constants.ts:11
 #: src/language/constants.ts:11
 msgid "Setting DNS01 challenge provider"
 msgid "Setting DNS01 challenge provider"
 msgstr ""
 msgstr ""
@@ -1654,7 +1671,7 @@ msgstr ""
 msgid "Terminal"
 msgid "Terminal"
 msgstr "Терминал"
 msgstr "Терминал"
 
 
-#: src/views/preference/BasicSettings.vue:26
+#: src/views/preference/BasicSettings.vue:28
 msgid "Terminal Start Command"
 msgid "Terminal Start Command"
 msgstr "Терминальная команда запуска"
 msgstr "Терминальная команда запуска"
 
 
@@ -1698,8 +1715,8 @@ msgstr ""
 "Note: The server_name in the current configuration must be the domain name "
 "Note: The server_name in the current configuration must be the domain name "
 "you need to get the certificate."
 "you need to get the certificate."
 
 
-#: src/views/preference/BasicSettings.vue:36
-#: src/views/preference/BasicSettings.vue:48
+#: src/views/preference/BasicSettings.vue:38
+#: src/views/preference/BasicSettings.vue:50
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:48
 #: src/views/preference/OpenAISettings.vue:48
 msgid "The url is not valid"
 msgid "The url is not valid"
@@ -1870,6 +1887,7 @@ msgstr "Запись сертификата на диск"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
 msgstr "Да"
 msgstr "Да"
 
 

+ 41 - 23
app/src/language/vi_VN/app.po

@@ -18,7 +18,7 @@ msgid "Access Logs"
 msgstr "Log truy cập"
 msgstr "Log truy cập"
 
 
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
-#: src/views/certificate/ACMEUserSelector.vue:72
+#: src/views/certificate/ACMEUserSelector.vue:79
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Người dùng"
 msgstr "Người dùng"
@@ -37,6 +37,7 @@ msgstr "Hành động"
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
+#: src/views/preference/BasicSettings.vue:73
 #: src/views/stream/StreamList.vue:121
 #: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Thêm"
 msgstr "Thêm"
@@ -123,6 +124,11 @@ msgstr "Bạn chắc chắn muốn xoá directive này ?"
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr "Bạn chắc chắn muốn xoá directive này ?"
 msgstr "Bạn chắc chắn muốn xoá directive này ?"
 
 
+#: src/views/preference/BasicSettings.vue:99
+#, fuzzy
+msgid "Are you sure you want to remove this item?"
+msgstr "Bạn chắc chắn muốn xoá directive này ?"
+
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
@@ -175,7 +181,7 @@ msgstr "Thông tin"
 
 
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/domain/components/RightSettings.vue:75
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:93
+#: src/views/preference/Preference.vue:94
 #: src/views/stream/components/RightSettings.vue:74
 #: src/views/stream/components/RightSettings.vue:74
 #, fuzzy
 #, fuzzy
 msgid "Basic"
 msgid "Basic"
@@ -199,7 +205,7 @@ msgstr "Xây dựng với"
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:45
+#: src/views/preference/BasicSettings.vue:47
 msgid "CADir"
 msgid "CADir"
 msgstr ""
 msgstr ""
 
 
@@ -226,7 +232,7 @@ msgstr "Chứng chỉ đã hết hạn"
 msgid "Certificate is valid"
 msgid "Certificate is valid"
 msgstr "Chứng chỉ SSL hợp lệ"
 msgstr "Chứng chỉ SSL hợp lệ"
 
 
-#: src/views/preference/BasicSettings.vue:53
+#: src/views/preference/BasicSettings.vue:55
 #, fuzzy
 #, fuzzy
 msgid "Certificate Renewal Interval"
 msgid "Certificate Renewal Interval"
 msgstr "Chứng chỉ SSL hợp lệ"
 msgstr "Chứng chỉ SSL hợp lệ"
@@ -377,7 +383,7 @@ msgstr "Bảng điều khiển"
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "Tên cơ sở dữ liệu (Tuỳ chọn, Mặc định là: database)"
 msgstr "Tên cơ sở dữ liệu (Tuỳ chọn, Mặc định là: database)"
 
 
-#: src/views/preference/BasicSettings.vue:58
+#: src/views/preference/BasicSettings.vue:60
 msgid "Days"
 msgid "Days"
 msgstr ""
 msgstr ""
 
 
@@ -766,7 +772,7 @@ msgstr "Lọc"
 msgid "Finished"
 msgid "Finished"
 msgstr "Đã hoàn thành"
 msgstr "Đã hoàn thành"
 
 
-#: src/views/preference/BasicSettings.vue:41
+#: src/views/preference/BasicSettings.vue:43
 #, fuzzy
 #, fuzzy
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "Người dùng Trung Quốc: https://mirror.ghproxy.com/"
 msgstr "Người dùng Trung Quốc: https://mirror.ghproxy.com/"
@@ -807,7 +813,7 @@ msgstr "Nhận lỗi thông tin phát hành"
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr "Đang lấy chứng chỉ, vui lòng đợi..."
 msgstr "Đang lấy chứng chỉ, vui lòng đợi..."
 
 
-#: src/views/preference/BasicSettings.vue:33
+#: src/views/preference/BasicSettings.vue:35
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr ""
 msgstr ""
 
 
@@ -815,15 +821,15 @@ msgstr ""
 msgid "Home"
 msgid "Home"
 msgstr "Trang chủ"
 msgstr "Trang chủ"
 
 
-#: src/views/preference/BasicSettings.vue:29
+#: src/views/preference/BasicSettings.vue:31
 msgid "HTTP Challenge Port"
 msgid "HTTP Challenge Port"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:11
+#: src/views/preference/BasicSettings.vue:13
 msgid "HTTP Host"
 msgid "HTTP Host"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:14
+#: src/views/preference/BasicSettings.vue:16
 msgid "HTTP Port"
 msgid "HTTP Port"
 msgstr ""
 msgstr ""
 
 
@@ -894,7 +900,7 @@ msgstr "Thêm chứng chỉ SSL"
 msgid "Issued certificate successfully"
 msgid "Issued certificate successfully"
 msgstr "Cấp chứng chỉ thành công"
 msgstr "Cấp chứng chỉ thành công"
 
 
-#: src/views/preference/BasicSettings.vue:20
+#: src/views/preference/BasicSettings.vue:22
 msgid "Jwt Secret"
 msgid "Jwt Secret"
 msgstr ""
 msgstr ""
 
 
@@ -973,7 +979,7 @@ msgstr "Đăng nhập thành công"
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr "Đã đăng xuất"
 msgstr "Đã đăng xuất"
 
 
-#: src/views/preference/Preference.vue:111
+#: src/views/preference/Preference.vue:112
 msgid "Logrotate"
 msgid "Logrotate"
 msgstr ""
 msgstr ""
 
 
@@ -1102,7 +1108,7 @@ msgstr "Đã có phiên bản mới"
 msgid "Next"
 msgid "Next"
 msgstr "Tiếp theo"
 msgstr "Tiếp theo"
 
 
-#: src/views/preference/Preference.vue:99
+#: src/views/preference/Preference.vue:100
 msgid "Nginx"
 msgid "Nginx"
 msgstr ""
 msgstr ""
 
 
@@ -1145,11 +1151,12 @@ msgstr "Restart Nginx thành công"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/notification/Notification.vue:68
 #: src/views/notification/Notification.vue:68
+#: src/views/preference/BasicSettings.vue:101
 #: src/views/stream/StreamList.vue:165
 #: src/views/stream/StreamList.vue:165
 msgid "No"
 msgid "No"
 msgstr "Không"
 msgstr "Không"
 
 
-#: src/views/preference/BasicSettings.vue:23
+#: src/views/preference/BasicSettings.vue:25
 msgid "Node Secret"
 msgid "Node Secret"
 msgstr ""
 msgstr ""
 
 
@@ -1230,7 +1237,7 @@ msgstr "Sau khi quá trình xác minh hoàn tất, bản ghi sẽ bị xóa."
 msgid "Online"
 msgid "Online"
 msgstr "Trực tuyến"
 msgstr "Trực tuyến"
 
 
-#: src/views/preference/Preference.vue:105
+#: src/views/preference/Preference.vue:106
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr ""
 msgstr ""
 
 
@@ -1328,7 +1335,7 @@ msgstr ""
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:239 src/views/preference/Preference.vue:88
+#: src/routes/index.ts:239 src/views/preference/Preference.vue:89
 msgid "Preference"
 msgid "Preference"
 msgstr "Cài đặt"
 msgstr "Cài đặt"
 
 
@@ -1372,6 +1379,10 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "Xoá thành công"
 msgstr "Xoá thành công"
 
 
+#: src/views/preference/BasicSettings.vue:68
+msgid "Recursive Nameservers"
+msgstr ""
+
 #: src/components/ChatGPT/ChatGPT.vue:278
 #: src/components/ChatGPT/ChatGPT.vue:278
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Tạo lại câu trả lời"
 msgstr "Tạo lại câu trả lời"
@@ -1470,7 +1481,7 @@ msgstr "Khởi động lại"
 msgid "Restarting"
 msgid "Restarting"
 msgstr "Đang khởi động lại"
 msgstr "Đang khởi động lại"
 
 
-#: src/views/preference/BasicSettings.vue:17
+#: src/views/preference/BasicSettings.vue:19
 #, fuzzy
 #, fuzzy
 msgid "Run Mode"
 msgid "Run Mode"
 msgstr "Run Mode"
 msgstr "Run Mode"
@@ -1483,7 +1494,7 @@ msgstr "Running"
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:122 src/views/stream/StreamEdit.vue:254
+#: src/views/preference/Preference.vue:123 src/views/stream/StreamEdit.vue:254
 msgid "Save"
 msgid "Save"
 msgstr "Lưu"
 msgstr "Lưu"
 
 
@@ -1499,7 +1510,7 @@ msgstr "Đã xảy ra lỗi khi lưu %{msg}"
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/views/certificate/CertificateEditor.vue:45
 #: src/views/certificate/CertificateEditor.vue:45
-#: src/views/preference/Preference.vue:58
+#: src/views/preference/Preference.vue:59
 #, fuzzy
 #, fuzzy
 msgid "Save successfully"
 msgid "Save successfully"
 msgstr "Lưu thành công"
 msgstr "Lưu thành công"
@@ -1532,7 +1543,7 @@ msgstr "Gửi"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
-#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:62
+#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:63
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/system/Upgrade.vue:42
 #: src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgid "Server error"
@@ -1551,6 +1562,12 @@ msgstr "không tìm thấy server_name trong directives"
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr "Tham số server_name là bắt buộc"
 msgstr "Tham số server_name là bắt buộc"
 
 
+#: src/views/preference/BasicSettings.vue:64
+msgid ""
+"Set the recursive nameservers to override the systems nameservers for the "
+"step of DNS challenge."
+msgstr ""
+
 #: src/language/constants.ts:11
 #: src/language/constants.ts:11
 msgid "Setting DNS01 challenge provider"
 msgid "Setting DNS01 challenge provider"
 msgstr "Sử dụng DNS01 để xác thực SSL"
 msgstr "Sử dụng DNS01 để xác thực SSL"
@@ -1652,7 +1669,7 @@ msgstr "Mục tiêu"
 msgid "Terminal"
 msgid "Terminal"
 msgstr "Terminal"
 msgstr "Terminal"
 
 
-#: src/views/preference/BasicSettings.vue:26
+#: src/views/preference/BasicSettings.vue:28
 msgid "Terminal Start Command"
 msgid "Terminal Start Command"
 msgstr ""
 msgstr ""
 
 
@@ -1693,8 +1710,8 @@ msgid ""
 msgstr ""
 msgstr ""
 "Lưu ý: server_name trong cấu hình hiện tại phải là tên miền bạn muốn ký SSL."
 "Lưu ý: server_name trong cấu hình hiện tại phải là tên miền bạn muốn ký SSL."
 
 
-#: src/views/preference/BasicSettings.vue:36
-#: src/views/preference/BasicSettings.vue:48
+#: src/views/preference/BasicSettings.vue:38
+#: src/views/preference/BasicSettings.vue:50
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:48
 #: src/views/preference/OpenAISettings.vue:48
 msgid "The url is not valid"
 msgid "The url is not valid"
@@ -1871,6 +1888,7 @@ msgstr "Ghi chứng chỉ vào disk"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
 msgstr "Có"
 msgstr "Có"
 
 

BIN
app/src/language/zh_CN/app.mo


+ 40 - 26
app/src/language/zh_CN/app.po

@@ -22,7 +22,7 @@ msgid "Access Logs"
 msgstr "访问日志"
 msgstr "访问日志"
 
 
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
-#: src/views/certificate/ACMEUserSelector.vue:72
+#: src/views/certificate/ACMEUserSelector.vue:79
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME 用户"
 msgstr "ACME 用户"
 
 
@@ -40,6 +40,7 @@ msgstr "操作"
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
+#: src/views/preference/BasicSettings.vue:73
 #: src/views/stream/StreamList.vue:121
 #: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "添加"
 msgstr "添加"
@@ -118,6 +119,10 @@ msgstr "您确定要恢复这个项目吗?"
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr "您确定要删除这条指令?"
 msgstr "您确定要删除这条指令?"
 
 
+#: src/views/preference/BasicSettings.vue:99
+msgid "Are you sure you want to remove this item?"
+msgstr "您确定要删除这个项目吗?"
+
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您确定要删除这个 Location?"
 msgstr "您确定要删除这个 Location?"
@@ -168,7 +173,7 @@ msgstr "基本信息"
 
 
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/domain/components/RightSettings.vue:75
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:93
+#: src/views/preference/Preference.vue:94
 #: src/views/stream/components/RightSettings.vue:74
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgid "Basic"
 msgstr "基本"
 msgstr "基本"
@@ -190,7 +195,7 @@ msgstr "构建基于"
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr "CA Dir"
 msgstr "CA Dir"
 
 
-#: src/views/preference/BasicSettings.vue:45
+#: src/views/preference/BasicSettings.vue:47
 msgid "CADir"
 msgid "CADir"
 msgstr "CADir"
 msgstr "CADir"
 
 
@@ -217,7 +222,7 @@ msgstr "此证书已过期"
 msgid "Certificate is valid"
 msgid "Certificate is valid"
 msgstr "此证书有效"
 msgstr "此证书有效"
 
 
-#: src/views/preference/BasicSettings.vue:53
+#: src/views/preference/BasicSettings.vue:55
 msgid "Certificate Renewal Interval"
 msgid "Certificate Renewal Interval"
 msgstr "证书续期间隔"
 msgstr "证书续期间隔"
 
 
@@ -360,7 +365,7 @@ msgstr "仪表盘"
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "数据库 (可选,默认: database)"
 msgstr "数据库 (可选,默认: database)"
 
 
-#: src/views/preference/BasicSettings.vue:58
+#: src/views/preference/BasicSettings.vue:60
 msgid "Days"
 msgid "Days"
 msgstr "天"
 msgstr "天"
 
 
@@ -721,7 +726,7 @@ msgstr "过滤"
 msgid "Finished"
 msgid "Finished"
 msgstr "完成"
 msgstr "完成"
 
 
-#: src/views/preference/BasicSettings.vue:41
+#: src/views/preference/BasicSettings.vue:43
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "中国用户:https://mirror.ghproxy.com/"
 msgstr "中国用户:https://mirror.ghproxy.com/"
 
 
@@ -757,7 +762,7 @@ msgstr "获取发布信息错误"
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr "正在获取证书,请稍等..."
 msgstr "正在获取证书,请稍等..."
 
 
-#: src/views/preference/BasicSettings.vue:33
+#: src/views/preference/BasicSettings.vue:35
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Github代理"
 msgstr "Github代理"
 
 
@@ -765,15 +770,15 @@ msgstr "Github代理"
 msgid "Home"
 msgid "Home"
 msgstr "首页"
 msgstr "首页"
 
 
-#: src/views/preference/BasicSettings.vue:29
+#: src/views/preference/BasicSettings.vue:31
 msgid "HTTP Challenge Port"
 msgid "HTTP Challenge Port"
 msgstr "HTTP Challenge 监听端口"
 msgstr "HTTP Challenge 监听端口"
 
 
-#: src/views/preference/BasicSettings.vue:11
+#: src/views/preference/BasicSettings.vue:13
 msgid "HTTP Host"
 msgid "HTTP Host"
 msgstr "HTTP 监听主机"
 msgstr "HTTP 监听主机"
 
 
-#: src/views/preference/BasicSettings.vue:14
+#: src/views/preference/BasicSettings.vue:16
 msgid "HTTP Port"
 msgid "HTTP Port"
 msgstr "HTTP 监听端口"
 msgstr "HTTP 监听端口"
 
 
@@ -837,7 +842,7 @@ msgstr "颁发通配符证书"
 msgid "Issued certificate successfully"
 msgid "Issued certificate successfully"
 msgstr "证书申请成功"
 msgstr "证书申请成功"
 
 
-#: src/views/preference/BasicSettings.vue:20
+#: src/views/preference/BasicSettings.vue:22
 msgid "Jwt Secret"
 msgid "Jwt Secret"
 msgstr "Jwt 密钥"
 msgstr "Jwt 密钥"
 
 
@@ -910,7 +915,7 @@ msgstr "登录成功"
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr "登出成功"
 msgstr "登出成功"
 
 
-#: src/views/preference/Preference.vue:111
+#: src/views/preference/Preference.vue:112
 msgid "Logrotate"
 msgid "Logrotate"
 msgstr "Logrotate"
 msgstr "Logrotate"
 
 
@@ -1036,7 +1041,7 @@ msgstr "新版本发布"
 msgid "Next"
 msgid "Next"
 msgstr "下一步"
 msgstr "下一步"
 
 
-#: src/views/preference/Preference.vue:99
+#: src/views/preference/Preference.vue:100
 msgid "Nginx"
 msgid "Nginx"
 msgstr "Nginx"
 msgstr "Nginx"
 
 
@@ -1076,11 +1081,12 @@ msgstr "Nginx 重启成功"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/notification/Notification.vue:68
 #: src/views/notification/Notification.vue:68
+#: src/views/preference/BasicSettings.vue:101
 #: src/views/stream/StreamList.vue:165
 #: src/views/stream/StreamList.vue:165
 msgid "No"
 msgid "No"
 msgstr "取消"
 msgstr "取消"
 
 
-#: src/views/preference/BasicSettings.vue:23
+#: src/views/preference/BasicSettings.vue:25
 msgid "Node Secret"
 msgid "Node Secret"
 msgstr "节点密钥"
 msgstr "节点密钥"
 
 
@@ -1158,7 +1164,7 @@ msgstr "一旦验证完成,这些记录将被删除。"
 msgid "Online"
 msgid "Online"
 msgstr "在线"
 msgstr "在线"
 
 
-#: src/views/preference/Preference.vue:105
+#: src/views/preference/Preference.vue:106
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
@@ -1253,7 +1259,7 @@ msgstr "请至少选择一个节点!"
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr "预发布"
 msgstr "预发布"
 
 
-#: src/routes/index.ts:239 src/views/preference/Preference.vue:88
+#: src/routes/index.ts:239 src/views/preference/Preference.vue:89
 msgid "Preference"
 msgid "Preference"
 msgstr "偏好设置"
 msgstr "偏好设置"
 
 
@@ -1295,6 +1301,10 @@ msgstr "恢复"
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "恢复成功"
 msgstr "恢复成功"
 
 
+#: src/views/preference/BasicSettings.vue:68
+msgid "Recursive Nameservers"
+msgstr "递归域名服务器"
+
 #: src/components/ChatGPT/ChatGPT.vue:278
 #: src/components/ChatGPT/ChatGPT.vue:278
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "重新生成响应"
 msgstr "重新生成响应"
@@ -1382,7 +1392,7 @@ msgstr "重启"
 msgid "Restarting"
 msgid "Restarting"
 msgstr "重启中"
 msgstr "重启中"
 
 
-#: src/views/preference/BasicSettings.vue:17
+#: src/views/preference/BasicSettings.vue:19
 msgid "Run Mode"
 msgid "Run Mode"
 msgstr "运行模式"
 msgstr "运行模式"
 
 
@@ -1394,7 +1404,7 @@ msgstr "运行中"
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:122 src/views/stream/StreamEdit.vue:254
+#: src/views/preference/Preference.vue:123 src/views/stream/StreamEdit.vue:254
 msgid "Save"
 msgid "Save"
 msgstr "保存"
 msgstr "保存"
 
 
@@ -1410,7 +1420,7 @@ msgstr "保存错误 %{msg}"
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/views/certificate/CertificateEditor.vue:45
 #: src/views/certificate/CertificateEditor.vue:45
-#: src/views/preference/Preference.vue:58
+#: src/views/preference/Preference.vue:59
 msgid "Save successfully"
 msgid "Save successfully"
 msgstr "保存成功"
 msgstr "保存成功"
 
 
@@ -1442,7 +1452,7 @@ msgstr "上传"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
-#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:62
+#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:63
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/system/Upgrade.vue:42
 #: src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgid "Server error"
@@ -1461,6 +1471,12 @@ msgstr "未在指令集合中找到 server_name"
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr "必须为 server_name 指令指明参数"
 msgstr "必须为 server_name 指令指明参数"
 
 
+#: src/views/preference/BasicSettings.vue:64
+msgid ""
+"Set the recursive nameservers to override the systems nameservers for the "
+"step of DNS challenge."
+msgstr "为 DNS 挑战步骤设置递归域名服务器以覆盖操作系统的域名服务器设置。"
+
 #: src/language/constants.ts:11
 #: src/language/constants.ts:11
 msgid "Setting DNS01 challenge provider"
 msgid "Setting DNS01 challenge provider"
 msgstr "使用 DNS01 Challenge 提供商"
 msgstr "使用 DNS01 Challenge 提供商"
@@ -1558,7 +1574,7 @@ msgstr "目标"
 msgid "Terminal"
 msgid "Terminal"
 msgstr "终端"
 msgstr "终端"
 
 
-#: src/views/preference/BasicSettings.vue:26
+#: src/views/preference/BasicSettings.vue:28
 msgid "Terminal Start Command"
 msgid "Terminal Start Command"
 msgstr "终端启动命令"
 msgstr "终端启动命令"
 
 
@@ -1596,8 +1612,8 @@ msgid ""
 "need to get the certificate, supportmultiple domains."
 "need to get the certificate, supportmultiple domains."
 msgstr "当前配置中的 server_name 必须是获取证书所需的域名,支持多个域名。"
 msgstr "当前配置中的 server_name 必须是获取证书所需的域名,支持多个域名。"
 
 
-#: src/views/preference/BasicSettings.vue:36
-#: src/views/preference/BasicSettings.vue:48
+#: src/views/preference/BasicSettings.vue:38
+#: src/views/preference/BasicSettings.vue:50
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:48
 #: src/views/preference/OpenAISettings.vue:48
 msgid "The url is not valid"
 msgid "The url is not valid"
@@ -1763,6 +1779,7 @@ msgstr "正在将证书写入磁盘"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
 msgstr "是的"
 msgstr "是的"
 
 
@@ -1947,9 +1964,6 @@ msgstr "你可以在这个页面检查Nginx UI的升级。"
 #~ msgid "Root Directory (root)"
 #~ msgid "Root Directory (root)"
 #~ msgstr "网站根目录 (root)"
 #~ msgstr "网站根目录 (root)"
 
 
-#~ msgid "Server Names (server_name)"
-#~ msgstr "网站域名 (server_name)"
-
 #~ msgid ""
 #~ msgid ""
 #~ "The certificate for the domain will be checked every hour, and will be "
 #~ "The certificate for the domain will be checked every hour, and will be "
 #~ "renewed if it has been more than 1 month since it was last issued.<br/>If "
 #~ "renewed if it has been more than 1 month since it was last issued.<br/>If "

+ 42 - 26
app/src/language/zh_TW/app.po

@@ -23,7 +23,7 @@ msgid "Access Logs"
 msgstr "存取日誌"
 msgstr "存取日誌"
 
 
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
 #: src/routes/index.ts:128 src/views/certificate/ACMEUser.vue:76
-#: src/views/certificate/ACMEUserSelector.vue:72
+#: src/views/certificate/ACMEUserSelector.vue:79
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
 msgstr "使用者名稱"
 msgstr "使用者名稱"
@@ -42,6 +42,7 @@ msgstr "操作"
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxServer.vue:167
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
 #: src/views/domain/ngx_conf/NgxUpstream.vue:152
+#: src/views/preference/BasicSettings.vue:73
 #: src/views/stream/StreamList.vue:121
 #: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "新增"
 msgstr "新增"
@@ -126,6 +127,11 @@ msgstr "您確定要刪除這條指令嗎?"
 msgid "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this directive?"
 msgstr "您確定要刪除這條指令嗎?"
 msgstr "您確定要刪除這條指令嗎?"
 
 
+#: src/views/preference/BasicSettings.vue:99
+#, fuzzy
+msgid "Are you sure you want to remove this item?"
+msgstr "您確定要刪除這條指令嗎?"
+
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 #: src/views/domain/ngx_conf/LocationEditor.vue:69
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您確定要刪除此 Location 嗎?"
 msgstr "您確定要刪除此 Location 嗎?"
@@ -176,7 +182,7 @@ msgstr "基本資訊"
 
 
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/config/ConfigEdit.vue:115
 #: src/views/domain/components/RightSettings.vue:75
 #: src/views/domain/components/RightSettings.vue:75
-#: src/views/preference/Preference.vue:93
+#: src/views/preference/Preference.vue:94
 #: src/views/stream/components/RightSettings.vue:74
 #: src/views/stream/components/RightSettings.vue:74
 msgid "Basic"
 msgid "Basic"
 msgstr "基本"
 msgstr "基本"
@@ -198,7 +204,7 @@ msgstr "構建基於"
 msgid "CA Dir"
 msgid "CA Dir"
 msgstr ""
 msgstr ""
 
 
-#: src/views/preference/BasicSettings.vue:45
+#: src/views/preference/BasicSettings.vue:47
 msgid "CADir"
 msgid "CADir"
 msgstr "CADir"
 msgstr "CADir"
 
 
@@ -225,7 +231,7 @@ msgstr "此憑證已過期"
 msgid "Certificate is valid"
 msgid "Certificate is valid"
 msgstr "此憑證有效"
 msgstr "此憑證有效"
 
 
-#: src/views/preference/BasicSettings.vue:53
+#: src/views/preference/BasicSettings.vue:55
 #, fuzzy
 #, fuzzy
 msgid "Certificate Renewal Interval"
 msgid "Certificate Renewal Interval"
 msgstr "憑證自動續簽"
 msgstr "憑證自動續簽"
@@ -374,7 +380,7 @@ msgstr "儀表板"
 msgid "Database (Optional, default: database)"
 msgid "Database (Optional, default: database)"
 msgstr "資料庫 (可選,預設: database)"
 msgstr "資料庫 (可選,預設: database)"
 
 
-#: src/views/preference/BasicSettings.vue:58
+#: src/views/preference/BasicSettings.vue:60
 msgid "Days"
 msgid "Days"
 msgstr ""
 msgstr ""
 
 
@@ -747,7 +753,7 @@ msgstr "篩選"
 msgid "Finished"
 msgid "Finished"
 msgstr "完成"
 msgstr "完成"
 
 
-#: src/views/preference/BasicSettings.vue:41
+#: src/views/preference/BasicSettings.vue:43
 #, fuzzy
 #, fuzzy
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgid "For Chinese user: https://mirror.ghproxy.com/"
 msgstr "中國使用者:https://mirror.ghproxy.com/"
 msgstr "中國使用者:https://mirror.ghproxy.com/"
@@ -785,7 +791,7 @@ msgstr "取得發布資訊錯誤"
 msgid "Getting the certificate, please wait..."
 msgid "Getting the certificate, please wait..."
 msgstr "正在取得憑證,請稍候..."
 msgstr "正在取得憑證,請稍候..."
 
 
-#: src/views/preference/BasicSettings.vue:33
+#: src/views/preference/BasicSettings.vue:35
 msgid "Github Proxy"
 msgid "Github Proxy"
 msgstr "Github 代理"
 msgstr "Github 代理"
 
 
@@ -793,15 +799,15 @@ msgstr "Github 代理"
 msgid "Home"
 msgid "Home"
 msgstr "首頁"
 msgstr "首頁"
 
 
-#: src/views/preference/BasicSettings.vue:29
+#: src/views/preference/BasicSettings.vue:31
 msgid "HTTP Challenge Port"
 msgid "HTTP Challenge Port"
 msgstr "HTTP 挑戰埠"
 msgstr "HTTP 挑戰埠"
 
 
-#: src/views/preference/BasicSettings.vue:11
+#: src/views/preference/BasicSettings.vue:13
 msgid "HTTP Host"
 msgid "HTTP Host"
 msgstr "HTTP 監聽主機"
 msgstr "HTTP 監聽主機"
 
 
-#: src/views/preference/BasicSettings.vue:14
+#: src/views/preference/BasicSettings.vue:16
 msgid "HTTP Port"
 msgid "HTTP Port"
 msgstr "HTTP 監聽埠"
 msgstr "HTTP 監聽埠"
 
 
@@ -870,7 +876,7 @@ msgstr "憑證狀態"
 msgid "Issued certificate successfully"
 msgid "Issued certificate successfully"
 msgstr "成功頒發憑證"
 msgstr "成功頒發憑證"
 
 
-#: src/views/preference/BasicSettings.vue:20
+#: src/views/preference/BasicSettings.vue:22
 msgid "Jwt Secret"
 msgid "Jwt Secret"
 msgstr "Jwt Secret"
 msgstr "Jwt Secret"
 
 
@@ -948,7 +954,7 @@ msgstr "登入成功"
 msgid "Logout successful"
 msgid "Logout successful"
 msgstr "登出成功"
 msgstr "登出成功"
 
 
-#: src/views/preference/Preference.vue:111
+#: src/views/preference/Preference.vue:112
 msgid "Logrotate"
 msgid "Logrotate"
 msgstr ""
 msgstr ""
 
 
@@ -1074,7 +1080,7 @@ msgstr "新版本發布"
 msgid "Next"
 msgid "Next"
 msgstr "下一步"
 msgstr "下一步"
 
 
-#: src/views/preference/Preference.vue:99
+#: src/views/preference/Preference.vue:100
 msgid "Nginx"
 msgid "Nginx"
 msgstr "Nginx"
 msgstr "Nginx"
 
 
@@ -1114,11 +1120,12 @@ msgstr "Nginx 重啟成功"
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:90
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/domain/ngx_conf/LocationEditor.vue:71
 #: src/views/notification/Notification.vue:68
 #: src/views/notification/Notification.vue:68
+#: src/views/preference/BasicSettings.vue:101
 #: src/views/stream/StreamList.vue:165
 #: src/views/stream/StreamList.vue:165
 msgid "No"
 msgid "No"
 msgstr "取消"
 msgstr "取消"
 
 
-#: src/views/preference/BasicSettings.vue:23
+#: src/views/preference/BasicSettings.vue:25
 msgid "Node Secret"
 msgid "Node Secret"
 msgstr "Node Secret"
 msgstr "Node Secret"
 
 
@@ -1198,7 +1205,7 @@ msgstr ""
 msgid "Online"
 msgid "Online"
 msgstr "線上"
 msgstr "線上"
 
 
-#: src/views/preference/Preference.vue:105
+#: src/views/preference/Preference.vue:106
 msgid "OpenAI"
 msgid "OpenAI"
 msgstr "OpenAI"
 msgstr "OpenAI"
 
 
@@ -1294,7 +1301,7 @@ msgstr "請至少選擇一個節點!"
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr "預先發布"
 msgstr "預先發布"
 
 
-#: src/routes/index.ts:239 src/views/preference/Preference.vue:88
+#: src/routes/index.ts:239 src/views/preference/Preference.vue:89
 msgid "Preference"
 msgid "Preference"
 msgstr "偏好設定"
 msgstr "偏好設定"
 
 
@@ -1337,6 +1344,11 @@ msgstr ""
 msgid "Recovered Successfully"
 msgid "Recovered Successfully"
 msgstr "儲存成功"
 msgstr "儲存成功"
 
 
+#: src/views/preference/BasicSettings.vue:68
+#, fuzzy
+msgid "Recursive Nameservers"
+msgstr "網站域名 (server_name)"
+
 #: src/components/ChatGPT/ChatGPT.vue:278
 #: src/components/ChatGPT/ChatGPT.vue:278
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "重新產生回應"
 msgstr "重新產生回應"
@@ -1434,7 +1446,7 @@ msgstr "重新啟動"
 msgid "Restarting"
 msgid "Restarting"
 msgstr "正在重新啟動"
 msgstr "正在重新啟動"
 
 
-#: src/views/preference/BasicSettings.vue:17
+#: src/views/preference/BasicSettings.vue:19
 msgid "Run Mode"
 msgid "Run Mode"
 msgstr "執行模式"
 msgstr "執行模式"
 
 
@@ -1446,7 +1458,7 @@ msgstr "執行中"
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/certificate/CertificateEditor.vue:242
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/config/ConfigEdit.vue:96 src/views/domain/DomainEdit.vue:263
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:120
-#: src/views/preference/Preference.vue:122 src/views/stream/StreamEdit.vue:254
+#: src/views/preference/Preference.vue:123 src/views/stream/StreamEdit.vue:254
 msgid "Save"
 msgid "Save"
 msgstr "儲存"
 msgstr "儲存"
 
 
@@ -1462,7 +1474,7 @@ msgstr "儲存錯誤 %{msg}"
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:39
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:104
 #: src/views/certificate/CertificateEditor.vue:45
 #: src/views/certificate/CertificateEditor.vue:45
-#: src/views/preference/Preference.vue:58
+#: src/views/preference/Preference.vue:59
 msgid "Save successfully"
 msgid "Save successfully"
 msgstr "儲存成功"
 msgstr "儲存成功"
 
 
@@ -1494,7 +1506,7 @@ msgstr "傳送"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:182
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:221
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
 #: src/views/config/ConfigEdit.vue:40 src/views/domain/DomainList.vue:81
-#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:62
+#: src/views/other/Install.vue:70 src/views/preference/Preference.vue:63
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/stream/StreamList.vue:113 src/views/stream/StreamList.vue:81
 #: src/views/system/Upgrade.vue:42
 #: src/views/system/Upgrade.vue:42
 msgid "Server error"
 msgid "Server error"
@@ -1513,6 +1525,12 @@ msgstr "在指令中未找到 server_name"
 msgid "server_name parameter is required"
 msgid "server_name parameter is required"
 msgstr "必須提供 server_name 參數"
 msgstr "必須提供 server_name 參數"
 
 
+#: src/views/preference/BasicSettings.vue:64
+msgid ""
+"Set the recursive nameservers to override the systems nameservers for the "
+"step of DNS challenge."
+msgstr ""
+
 #: src/language/constants.ts:11
 #: src/language/constants.ts:11
 #, fuzzy
 #, fuzzy
 msgid "Setting DNS01 challenge provider"
 msgid "Setting DNS01 challenge provider"
@@ -1616,7 +1634,7 @@ msgstr "目標"
 msgid "Terminal"
 msgid "Terminal"
 msgstr "終端機"
 msgstr "終端機"
 
 
-#: src/views/preference/BasicSettings.vue:26
+#: src/views/preference/BasicSettings.vue:28
 msgid "Terminal Start Command"
 msgid "Terminal Start Command"
 msgstr "終端機啟動指令"
 msgstr "終端機啟動指令"
 
 
@@ -1658,8 +1676,8 @@ msgid ""
 "need to get the certificate, supportmultiple domains."
 "need to get the certificate, supportmultiple domains."
 msgstr "注意:目前設定中的 server_name 必須為需要申請憑證的域名。"
 msgstr "注意:目前設定中的 server_name 必須為需要申請憑證的域名。"
 
 
-#: src/views/preference/BasicSettings.vue:36
-#: src/views/preference/BasicSettings.vue:48
+#: src/views/preference/BasicSettings.vue:38
+#: src/views/preference/BasicSettings.vue:50
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:36
 #: src/views/preference/OpenAISettings.vue:48
 #: src/views/preference/OpenAISettings.vue:48
 #, fuzzy
 #, fuzzy
@@ -1830,6 +1848,7 @@ msgstr "將憑證寫入磁碟"
 
 
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:89
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
 #: src/views/domain/ngx_conf/LocationEditor.vue:70
+#: src/views/preference/BasicSettings.vue:100
 msgid "Yes"
 msgid "Yes"
 msgstr "是的"
 msgstr "是的"
 
 
@@ -1976,9 +1995,6 @@ msgstr "您可以在此頁面檢查 Nginx UI 的升級。"
 #~ msgid "Root Directory (root)"
 #~ msgid "Root Directory (root)"
 #~ msgstr "網站根目錄 (root)"
 #~ msgstr "網站根目錄 (root)"
 
 
-#~ msgid "Server Names (server_name)"
-#~ msgstr "網站域名 (server_name)"
-
 #~ msgid ""
 #~ msgid ""
 #~ "The certificate for the domain will be checked every hour, and will be "
 #~ "The certificate for the domain will be checked every hour, and will be "
 #~ "renewed if it has been more than 1 month since it was last issued.<br/>If "
 #~ "renewed if it has been more than 1 month since it was last issued.<br/>If "

+ 55 - 0
app/src/views/preference/BasicSettings.vue

@@ -1,5 +1,7 @@
 <script setup lang="ts">
 <script setup lang="ts">
 import { inject } from 'vue'
 import { inject } from 'vue'
+import Draggable from 'vuedraggable'
+import { DeleteOutlined, HolderOutlined } from '@ant-design/icons-vue'
 import type { Settings } from '@/views/preference/typedef'
 import type { Settings } from '@/views/preference/typedef'
 
 
 const data: Settings = inject('data') as Settings
 const data: Settings = inject('data') as Settings
@@ -58,6 +60,59 @@ const errors: Record<string, Record<string, string>> = inject('errors') as Recor
         :addon-after="$gettext('Days')"
         :addon-after="$gettext('Days')"
       />
       />
     </AFormItem>
     </AFormItem>
+    <AFormItem
+      :help="$gettext('Set the recursive nameservers to override the systems nameservers '
+        + 'for the step of DNS challenge.')"
+    >
+      <template #label>
+        {{ $gettext('Recursive Nameservers') }}
+        <AButton
+          type="link"
+          @click="data.server.recursive_nameservers.push('')"
+        >
+          {{ $gettext('Add') }}
+        </AButton>
+      </template>
+
+      <Draggable
+        :list="data.server.recursive_nameservers"
+        item-key="name"
+        class="list-group"
+        ghost-class="ghost"
+        handle=".anticon-holder"
+      >
+        <template #item="{ index }">
+          <ARow>
+            <ACol :span="2">
+              <HolderOutlined class="p-2" />
+            </ACol>
+            <ACol :span="20">
+              <AInput
+                v-model:value="data.server.recursive_nameservers[index]"
+                :status="errors?.server?.recursive_nameservers?.[index] ? 'error' : undefined"
+                placeholder="8.8.8.8:53"
+                class="mb-4"
+              />
+            </ACol>
+            <ACol :span="2">
+              <APopconfirm
+                :title="$gettext('Are you sure you want to remove this item?')"
+                :ok-text="$gettext('Yes')"
+                :cancel-text="$gettext('No')"
+                @confirm="data.server.recursive_nameservers.splice(index, 1)"
+              >
+                <AButton
+                  type="link"
+                  danger
+                >
+                  <DeleteOutlined />
+                </AButton>
+              </APopconfirm>
+            </ACol>
+          </ARow>
+        </template>
+      </Draggable>
+    </AFormItem>
   </AForm>
   </AForm>
 </template>
 </template>
 
 

+ 1 - 0
app/src/views/preference/Preference.vue

@@ -22,6 +22,7 @@ const data = ref<Settings>({
     ca_dir: '',
     ca_dir: '',
     node_secret: '',
     node_secret: '',
     cert_renewal_interval: 7,
     cert_renewal_interval: 7,
+    recursive_nameservers: [],
   },
   },
   nginx: {
   nginx: {
     access_log_path: '',
     access_log_path: '',

+ 1 - 0
app/src/views/preference/typedef.ts

@@ -11,6 +11,7 @@ export interface Settings {
     email: string
     email: string
     ca_dir: string
     ca_dir: string
     cert_renewal_interval: number
     cert_renewal_interval: number
+    recursive_nameservers: string[]
   }
   }
   nginx: {
   nginx: {
     access_log_path: string
     access_log_path: string

+ 6 - 5
docs/package.json

@@ -7,12 +7,13 @@
     "docs:preview": "vitepress preview"
     "docs:preview": "vitepress preview"
   },
   },
   "dependencies": {
   "dependencies": {
-    "vue": "^3.4.19",
-    "vitepress": "^1.0.0-rc.43"
+    "vue": "^3.4.26",
+    "vitepress": "^1.1.4"
   },
   },
   "devDependencies": {
   "devDependencies": {
-    "@types/node": "^20.1.0",
-    "less": "^4.1.3"
+    "@types/node": "^20.12.8",
+    "less": "^4.2.0"
   },
   },
-  "license": "AGPL-3.0"
+  "license": "AGPL-3.0",
+  "packageManager": "pnpm@9.0.6+sha256.0624e30eff866cdeb363b15061bdb7fd9425b17bc1bb42c22f5f4efdea21f6b3"
 }
 }

File diff suppressed because it is too large
+ 305 - 316
docs/pnpm-lock.yaml


+ 10 - 1
internal/cert/cert.go

@@ -7,6 +7,7 @@ import (
 	"github.com/0xJacky/Nginx-UI/internal/nginx"
 	"github.com/0xJacky/Nginx-UI/internal/nginx"
 	"github.com/0xJacky/Nginx-UI/query"
 	"github.com/0xJacky/Nginx-UI/query"
 	"github.com/0xJacky/Nginx-UI/settings"
 	"github.com/0xJacky/Nginx-UI/settings"
+	"github.com/go-acme/lego/v4/challenge/dns01"
 	"github.com/go-acme/lego/v4/challenge/http01"
 	"github.com/go-acme/lego/v4/challenge/http01"
 	"github.com/go-acme/lego/v4/lego"
 	"github.com/go-acme/lego/v4/lego"
 	legolog "github.com/go-acme/lego/v4/log"
 	legolog "github.com/go-acme/lego/v4/log"
@@ -116,7 +117,15 @@ func IssueCert(payload *ConfigPayload, logChan chan string, errChan chan error)
 			if err != nil {
 			if err != nil {
 				break
 				break
 			}
 			}
-			err = client.Challenge.SetDNS01Provider(provider)
+			challengeOptions := make([]dns01.ChallengeOption, 0)
+
+			if len(settings.ServerSettings.RecursiveNameservers) > 0 {
+				challengeOptions = append(challengeOptions,
+					dns01.AddRecursiveNameservers(settings.ServerSettings.RecursiveNameservers),
+				)
+			}
+
+			err = client.Challenge.SetDNS01Provider(provider, challengeOptions...)
 		} else {
 		} else {
 			errChan <- errors.Wrap(err, "environment configuration is empty")
 			errChan <- errors.Wrap(err, "environment configuration is empty")
 			return
 			return

+ 0 - 0
internal/cert/issue.go → internal/cert/channel_writer.go


+ 27 - 25
settings/server.go

@@ -5,20 +5,21 @@ import (
 )
 )
 
 
 type Server struct {
 type Server struct {
-	HttpHost            string `json:"http_host" protected:"true"`
-	HttpPort            string `json:"http_port" protected:"true"`
-	RunMode             string `json:"run_mode" protected:"true"`
-	JwtSecret           string `json:"jwt_secret" protected:"true"`
-	NodeSecret          string `json:"node_secret" protected:"true"`
-	HTTPChallengePort   string `json:"http_challenge_port"`
-	Email               string `json:"email" protected:"true"`
-	Database            string `json:"database" protected:"true"`
-	StartCmd            string `json:"start_cmd" protected:"true"`
-	CADir               string `json:"ca_dir" binding:"omitempty,url"`
-	Demo                bool   `json:"demo" protected:"true"`
-	PageSize            int    `json:"page_size" protected:"true"`
-	GithubProxy         string `json:"github_proxy" binding:"omitempty,url"`
-	CertRenewalInterval int    `json:"cert_renewal_interval" binging:"min=7,max=21"`
+	HttpHost             string   `json:"http_host" protected:"true"`
+	HttpPort             string   `json:"http_port" protected:"true"`
+	RunMode              string   `json:"run_mode" protected:"true"`
+	JwtSecret            string   `json:"jwt_secret" protected:"true"`
+	NodeSecret           string   `json:"node_secret" protected:"true"`
+	HTTPChallengePort    string   `json:"http_challenge_port"`
+	Email                string   `json:"email" protected:"true"`
+	Database             string   `json:"database" protected:"true"`
+	StartCmd             string   `json:"start_cmd" protected:"true"`
+	CADir                string   `json:"ca_dir" binding:"omitempty,url"`
+	Demo                 bool     `json:"demo" protected:"true"`
+	PageSize             int      `json:"page_size" protected:"true"`
+	GithubProxy          string   `json:"github_proxy" binding:"omitempty,url"`
+	CertRenewalInterval  int      `json:"cert_renewal_interval" binding:"min=7,max=21"`
+	RecursiveNameservers []string `json:"recursive_nameservers" binding:"omitempty,dive,hostname_port"`
 }
 }
 
 
 func (s *Server) GetCADir() string {
 func (s *Server) GetCADir() string {
@@ -44,15 +45,16 @@ func (s *Server) GetCertRenewalInterval() int {
 }
 }
 
 
 var ServerSettings = Server{
 var ServerSettings = Server{
-	HttpHost:            "0.0.0.0",
-	HttpPort:            "9000",
-	RunMode:             "debug",
-	HTTPChallengePort:   "9180",
-	Database:            "database",
-	StartCmd:            "login",
-	Demo:                false,
-	PageSize:            10,
-	CADir:               "",
-	GithubProxy:         "",
-	CertRenewalInterval: 7,
+	HttpHost:             "0.0.0.0",
+	HttpPort:             "9000",
+	RunMode:              "debug",
+	HTTPChallengePort:    "9180",
+	Database:             "database",
+	StartCmd:             "login",
+	Demo:                 false,
+	PageSize:             10,
+	CADir:                "",
+	GithubProxy:          "",
+	CertRenewalInterval:  7,
+	RecursiveNameservers: make([]string, 0),
 }
 }

Some files were not shown because too many files changed in this diff