mirror of
https://github.com/koho/frpmgr.git
synced 2025-10-20 16:03:47 +08:00
Support token string from external file (#264)
* Support token string from external file * Validate token source before saving config file
This commit is contained in:
1828
i18n/catalog.go
1828
i18n/catalog.go
File diff suppressed because it is too large
Load Diff
@ -641,6 +641,27 @@
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "File",
|
||||
"message": "File",
|
||||
"translation": "File",
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "Select Token File",
|
||||
"message": "Select Token File",
|
||||
"translation": "Select Token File",
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "Source",
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "Secret",
|
||||
"message": "Secret",
|
||||
@ -1012,6 +1033,13 @@
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "Token file is required.",
|
||||
"message": "Token file is required.",
|
||||
"translation": "Token file is required.",
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "Config already exists",
|
||||
"message": "Config already exists",
|
||||
@ -1976,16 +2004,16 @@
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "Created",
|
||||
"id": "Number of TCP Connections",
|
||||
"message": "Number of TCP Connections",
|
||||
"translation": "Number of TCP Connections",
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "Modified",
|
||||
"id": "Number of UDP Connections",
|
||||
"message": "Number of UDP Connections",
|
||||
"translation": "Number of UDP Connections",
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
@ -1997,16 +2025,16 @@
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "Number of TCP Connections",
|
||||
"message": "Number of TCP Connections",
|
||||
"translation": "Number of TCP Connections",
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "Created",
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "Number of UDP Connections",
|
||||
"message": "Number of UDP Connections",
|
||||
"translation": "Number of UDP Connections",
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "Modified",
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
@ -2160,13 +2188,6 @@
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "Source",
|
||||
"translatorComment": "Copied from source.",
|
||||
"fuzzy": true
|
||||
},
|
||||
{
|
||||
"id": "This feature only supports text in INI or TOML format.",
|
||||
"message": "This feature only supports text in INI or TOML format.",
|
||||
|
@ -497,6 +497,21 @@
|
||||
"message": "Token",
|
||||
"translation": "Simbólico"
|
||||
},
|
||||
{
|
||||
"id": "File",
|
||||
"message": "File",
|
||||
"translation": "Archivo"
|
||||
},
|
||||
{
|
||||
"id": "Select Token File",
|
||||
"message": "Select Token File",
|
||||
"translation": "Seleccionar archivo de token"
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "Fuente"
|
||||
},
|
||||
{
|
||||
"id": "Secret",
|
||||
"message": "Secret",
|
||||
@ -762,6 +777,11 @@
|
||||
"message": "UDP Packet Size",
|
||||
"translation": "Tamaño del paquete UDP"
|
||||
},
|
||||
{
|
||||
"id": "Token file is required.",
|
||||
"message": "Token file is required.",
|
||||
"translation": "Se requiere el archivo de token."
|
||||
},
|
||||
{
|
||||
"id": "Config already exists",
|
||||
"message": "Config already exists",
|
||||
@ -1475,21 +1495,6 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "Creado"
|
||||
},
|
||||
{
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "Modificado"
|
||||
},
|
||||
{
|
||||
"id": "Started",
|
||||
"message": "Started",
|
||||
"translation": "Empezado"
|
||||
},
|
||||
{
|
||||
"id": "Number of TCP Connections",
|
||||
"message": "Number of TCP Connections",
|
||||
@ -1500,6 +1505,21 @@
|
||||
"message": "Number of UDP Connections",
|
||||
"translation": "Número de conexiones UDP"
|
||||
},
|
||||
{
|
||||
"id": "Started",
|
||||
"message": "Started",
|
||||
"translation": "Empezado"
|
||||
},
|
||||
{
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "Creado"
|
||||
},
|
||||
{
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "Modificado"
|
||||
},
|
||||
{
|
||||
"id": "{Name} Properties",
|
||||
"message": "{Name} Properties",
|
||||
@ -1610,11 +1630,6 @@
|
||||
"message": "Error message",
|
||||
"translation": "Mensaje de error"
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "Fuente"
|
||||
},
|
||||
{
|
||||
"id": "This feature only supports text in INI or TOML format.",
|
||||
"message": "This feature only supports text in INI or TOML format.",
|
||||
|
@ -507,6 +507,21 @@
|
||||
"message": "Token",
|
||||
"translation": "トークン"
|
||||
},
|
||||
{
|
||||
"id": "File",
|
||||
"message": "File",
|
||||
"translation": "ファイル"
|
||||
},
|
||||
{
|
||||
"id": "Select Token File",
|
||||
"message": "Select Token File",
|
||||
"translation": "トークンファイルを選択"
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "データソース"
|
||||
},
|
||||
{
|
||||
"id": "Secret",
|
||||
"message": "Secret",
|
||||
@ -772,6 +787,11 @@
|
||||
"message": "UDP Packet Size",
|
||||
"translation": "UDPパケットサイズ"
|
||||
},
|
||||
{
|
||||
"id": "Token file is required.",
|
||||
"message": "Token file is required.",
|
||||
"translation": "トークンファイルが必要です。"
|
||||
},
|
||||
{
|
||||
"id": "Config already exists",
|
||||
"message": "Config already exists",
|
||||
@ -1485,21 +1505,6 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "作成時間"
|
||||
},
|
||||
{
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "修正時間"
|
||||
},
|
||||
{
|
||||
"id": "Started",
|
||||
"message": "Started",
|
||||
"translation": "起動時間"
|
||||
},
|
||||
{
|
||||
"id": "Number of TCP Connections",
|
||||
"message": "Number of TCP Connections",
|
||||
@ -1510,6 +1515,21 @@
|
||||
"message": "Number of UDP Connections",
|
||||
"translation": "UDP接続数"
|
||||
},
|
||||
{
|
||||
"id": "Started",
|
||||
"message": "Started",
|
||||
"translation": "起動時間"
|
||||
},
|
||||
{
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "作成時間"
|
||||
},
|
||||
{
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "修正時間"
|
||||
},
|
||||
{
|
||||
"id": "{Name} Properties",
|
||||
"message": "{Name} Properties",
|
||||
@ -1620,11 +1640,6 @@
|
||||
"message": "Error message",
|
||||
"translation": "エラーメッセージ"
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "データソース"
|
||||
},
|
||||
{
|
||||
"id": "This feature only supports text in INI or TOML format.",
|
||||
"message": "This feature only supports text in INI or TOML format.",
|
||||
|
@ -497,6 +497,21 @@
|
||||
"message": "Token",
|
||||
"translation": "토큰"
|
||||
},
|
||||
{
|
||||
"id": "File",
|
||||
"message": "File",
|
||||
"translation": "파일"
|
||||
},
|
||||
{
|
||||
"id": "Select Token File",
|
||||
"message": "Select Token File",
|
||||
"translation": "토큰 파일 선택"
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "데이터 소스"
|
||||
},
|
||||
{
|
||||
"id": "Secret",
|
||||
"message": "Secret",
|
||||
@ -762,6 +777,11 @@
|
||||
"message": "UDP Packet Size",
|
||||
"translation": "UDP 패킷 크기"
|
||||
},
|
||||
{
|
||||
"id": "Token file is required.",
|
||||
"message": "Token file is required.",
|
||||
"translation": "토큰 파일이 필요합니다."
|
||||
},
|
||||
{
|
||||
"id": "Config already exists",
|
||||
"message": "Config already exists",
|
||||
@ -1475,21 +1495,6 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "창조 시간"
|
||||
},
|
||||
{
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "수정 시간"
|
||||
},
|
||||
{
|
||||
"id": "Started",
|
||||
"message": "Started",
|
||||
"translation": "시작 시간"
|
||||
},
|
||||
{
|
||||
"id": "Number of TCP Connections",
|
||||
"message": "Number of TCP Connections",
|
||||
@ -1500,6 +1505,21 @@
|
||||
"message": "Number of UDP Connections",
|
||||
"translation": "UDP 연결 수"
|
||||
},
|
||||
{
|
||||
"id": "Started",
|
||||
"message": "Started",
|
||||
"translation": "시작 시간"
|
||||
},
|
||||
{
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "창조 시간"
|
||||
},
|
||||
{
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "수정 시간"
|
||||
},
|
||||
{
|
||||
"id": "{Name} Properties",
|
||||
"message": "{Name} Properties",
|
||||
@ -1610,11 +1630,6 @@
|
||||
"message": "Error message",
|
||||
"translation": "오류 메시지"
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "데이터 소스"
|
||||
},
|
||||
{
|
||||
"id": "This feature only supports text in INI or TOML format.",
|
||||
"message": "This feature only supports text in INI or TOML format.",
|
||||
|
@ -497,6 +497,21 @@
|
||||
"message": "Token",
|
||||
"translation": "令牌"
|
||||
},
|
||||
{
|
||||
"id": "File",
|
||||
"message": "File",
|
||||
"translation": "文件"
|
||||
},
|
||||
{
|
||||
"id": "Select Token File",
|
||||
"message": "Select Token File",
|
||||
"translation": "选择令牌文件"
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "来源"
|
||||
},
|
||||
{
|
||||
"id": "Secret",
|
||||
"message": "Secret",
|
||||
@ -762,6 +777,11 @@
|
||||
"message": "UDP Packet Size",
|
||||
"translation": "UDP 包大小"
|
||||
},
|
||||
{
|
||||
"id": "Token file is required.",
|
||||
"message": "Token file is required.",
|
||||
"translation": "必须填写令牌文件。"
|
||||
},
|
||||
{
|
||||
"id": "Config already exists",
|
||||
"message": "Config already exists",
|
||||
@ -1475,21 +1495,6 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "创建时间"
|
||||
},
|
||||
{
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "修改时间"
|
||||
},
|
||||
{
|
||||
"id": "Started",
|
||||
"message": "Started",
|
||||
"translation": "启动时间"
|
||||
},
|
||||
{
|
||||
"id": "Number of TCP Connections",
|
||||
"message": "Number of TCP Connections",
|
||||
@ -1500,6 +1505,21 @@
|
||||
"message": "Number of UDP Connections",
|
||||
"translation": "UDP 连接数"
|
||||
},
|
||||
{
|
||||
"id": "Started",
|
||||
"message": "Started",
|
||||
"translation": "启动时间"
|
||||
},
|
||||
{
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "创建时间"
|
||||
},
|
||||
{
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "修改时间"
|
||||
},
|
||||
{
|
||||
"id": "{Name} Properties",
|
||||
"message": "{Name} Properties",
|
||||
@ -1610,11 +1630,6 @@
|
||||
"message": "Error message",
|
||||
"translation": "错误消息"
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "来源"
|
||||
},
|
||||
{
|
||||
"id": "This feature only supports text in INI or TOML format.",
|
||||
"message": "This feature only supports text in INI or TOML format.",
|
||||
|
@ -497,6 +497,21 @@
|
||||
"message": "Token",
|
||||
"translation": "權杖"
|
||||
},
|
||||
{
|
||||
"id": "File",
|
||||
"message": "File",
|
||||
"translation": "檔案"
|
||||
},
|
||||
{
|
||||
"id": "Select Token File",
|
||||
"message": "Select Token File",
|
||||
"translation": "選擇權杖檔案"
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "來源"
|
||||
},
|
||||
{
|
||||
"id": "Secret",
|
||||
"message": "Secret",
|
||||
@ -762,6 +777,11 @@
|
||||
"message": "UDP Packet Size",
|
||||
"translation": "UDP 封包大小"
|
||||
},
|
||||
{
|
||||
"id": "Token file is required.",
|
||||
"message": "Token file is required.",
|
||||
"translation": "必須填寫權杖檔案。"
|
||||
},
|
||||
{
|
||||
"id": "Config already exists",
|
||||
"message": "Config already exists",
|
||||
@ -1475,21 +1495,6 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "建立日期"
|
||||
},
|
||||
{
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "修改日期"
|
||||
},
|
||||
{
|
||||
"id": "Started",
|
||||
"message": "Started",
|
||||
"translation": "啟動日期"
|
||||
},
|
||||
{
|
||||
"id": "Number of TCP Connections",
|
||||
"message": "Number of TCP Connections",
|
||||
@ -1500,6 +1505,21 @@
|
||||
"message": "Number of UDP Connections",
|
||||
"translation": "UDP 連線數"
|
||||
},
|
||||
{
|
||||
"id": "Started",
|
||||
"message": "Started",
|
||||
"translation": "啟動日期"
|
||||
},
|
||||
{
|
||||
"id": "Created",
|
||||
"message": "Created",
|
||||
"translation": "建立日期"
|
||||
},
|
||||
{
|
||||
"id": "Modified",
|
||||
"message": "Modified",
|
||||
"translation": "修改日期"
|
||||
},
|
||||
{
|
||||
"id": "{Name} Properties",
|
||||
"message": "{Name} Properties",
|
||||
@ -1610,11 +1630,6 @@
|
||||
"message": "Error message",
|
||||
"translation": "錯誤訊息"
|
||||
},
|
||||
{
|
||||
"id": "Source",
|
||||
"message": "Source",
|
||||
"translation": "來源"
|
||||
},
|
||||
{
|
||||
"id": "This feature only supports text in INI or TOML format.",
|
||||
"message": "This feature only supports text in INI or TOML format.",
|
||||
|
@ -22,6 +22,8 @@ type ClientAuth struct {
|
||||
AuthenticateHeartBeats bool `ini:"authenticate_heartbeats,omitempty" token:"true" oidc:"true"`
|
||||
AuthenticateNewWorkConns bool `ini:"authenticate_new_work_conns,omitempty" token:"true" oidc:"true"`
|
||||
Token string `ini:"token,omitempty" token:"true"`
|
||||
TokenSource string `ini:"-" token:"true"`
|
||||
TokenSourceFile string `ini:"-" token:"true"`
|
||||
OIDCClientId string `ini:"oidc_client_id,omitempty" oidc:"true"`
|
||||
OIDCClientSecret string `ini:"oidc_client_secret,omitempty" oidc:"true"`
|
||||
OIDCAudience string `ini:"oidc_audience,omitempty" oidc:"true"`
|
||||
@ -37,9 +39,15 @@ func (ca ClientAuth) Complete() ClientAuth {
|
||||
ca = auth.(ClientAuth)
|
||||
ca.AuthMethod = authMethod
|
||||
}
|
||||
// Check the default auth method
|
||||
if authMethod == consts.AuthToken && ca.Token == "" {
|
||||
ca.AuthMethod = ""
|
||||
if authMethod == consts.AuthToken {
|
||||
if ca.TokenSource != "" {
|
||||
ca.Token = ""
|
||||
} else {
|
||||
ca.TokenSourceFile = ""
|
||||
if ca.Token == "" {
|
||||
ca.AuthMethod = ""
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ca = ClientAuth{}
|
||||
@ -408,6 +416,9 @@ func (conf *ClientConfig) saveTOML(path string) error {
|
||||
// Otherwise, it should be completed for file written to disk.
|
||||
func (conf *ClientConfig) Complete(read bool) {
|
||||
// Common config
|
||||
if conf.LegacyFormat {
|
||||
conf.TokenSource = ""
|
||||
}
|
||||
conf.ClientAuth = conf.ClientAuth.Complete()
|
||||
if conf.AdminPort == 0 {
|
||||
conf.AdminUser = ""
|
||||
|
@ -21,6 +21,15 @@ func ClientCommonFromV1(c *v1.ClientCommonConfig) (r ClientCommon) {
|
||||
// Auth client config
|
||||
r.AuthMethod = string(c.Auth.Method)
|
||||
r.Token = c.Auth.Token
|
||||
if ts := c.Auth.TokenSource; ts != nil {
|
||||
r.TokenSource = ts.Type
|
||||
switch ts.Type {
|
||||
case "file":
|
||||
if ts.File != nil {
|
||||
r.TokenSourceFile = ts.File.Path
|
||||
}
|
||||
}
|
||||
}
|
||||
r.OIDCClientId = c.Auth.OIDC.ClientID
|
||||
r.OIDCClientSecret = c.Auth.OIDC.ClientSecret
|
||||
r.OIDCAudience = c.Auth.OIDC.Audience
|
||||
@ -260,6 +269,13 @@ func ClientCommonToV1(c *ClientCommon) (r v1.ClientCommonConfig) {
|
||||
AdditionalEndpointParams: c.OIDCAdditionalEndpointParams,
|
||||
},
|
||||
}
|
||||
if c.TokenSource != "" {
|
||||
r.Auth.TokenSource = &v1.ValueSource{Type: c.TokenSource}
|
||||
switch c.TokenSource {
|
||||
case "file":
|
||||
r.Auth.TokenSource.File = &v1.FileSource{Path: c.TokenSourceFile}
|
||||
}
|
||||
}
|
||||
if c.AuthenticateHeartBeats {
|
||||
r.Auth.AdditionalScopes = append(r.Auth.AdditionalScopes, v1.AuthScopeHeartBeats)
|
||||
}
|
||||
@ -647,6 +663,9 @@ func toMap(in any, tag string) (map[string]any, error) {
|
||||
for i := 0; i < v.NumField(); i++ {
|
||||
ft := t.Field(i)
|
||||
fv := v.Field(i)
|
||||
if fv.Kind() == reflect.Ptr && fv.Elem().Kind() == reflect.Struct {
|
||||
fv = fv.Elem()
|
||||
}
|
||||
key := ft.Tag.Get(tag)
|
||||
if key != "" {
|
||||
key = strings.Split(key, ",")[0]
|
||||
|
@ -106,7 +106,9 @@ func (cd *EditClientDialog) basicConfPage() TabPage {
|
||||
}
|
||||
|
||||
func (cd *EditClientDialog) authConfPage() TabPage {
|
||||
token := Bind("tokenCheck.Checked")
|
||||
tokenSource := Bind("tokenCheck.Checked && !legacyFormat.Checked")
|
||||
tokenInput := Bind("tokenCheck.Checked && (legacyFormat.Checked || tokenSource.Value == '')")
|
||||
tokenFile := Bind("tokenSource.Visible && tokenSource.Value == 'file'")
|
||||
oidc := Bind("oidcCheck.Checked")
|
||||
auth := Bind("!noAuthCheck.Checked")
|
||||
return AlignGrid(TabPage{
|
||||
@ -119,8 +121,20 @@ func (cd *EditClientDialog) authConfPage() TabPage {
|
||||
{Name: "oidcCheck", Text: "OIDC", Value: consts.AuthOIDC},
|
||||
{Name: "noAuthCheck", Text: i18n.Sprintf("None"), Value: ""},
|
||||
}),
|
||||
Label{Visible: token, Text: i18n.SprintfColon("Token")},
|
||||
LineEdit{Visible: token, Text: Bind("Token"), PasswordMode: true},
|
||||
Label{Visible: tokenInput, Text: i18n.SprintfColon("Token")},
|
||||
LineEdit{Visible: tokenInput, Text: Bind("Token"), PasswordMode: true},
|
||||
Label{Visible: tokenFile, Text: i18n.SprintfColon("File")},
|
||||
NewBrowseLineEdit(nil, tokenFile, true, Bind("TokenSourceFile"),
|
||||
i18n.Sprintf("Select Token File"), "", true),
|
||||
Label{Visible: tokenSource, Text: i18n.SprintfColon("Source")},
|
||||
ComboBox{
|
||||
Name: "tokenSource",
|
||||
Visible: tokenSource,
|
||||
Value: Bind("TokenSource"),
|
||||
Model: NewListModel([]string{"", "file"}, i18n.Sprintf("None"), i18n.Sprintf("File")),
|
||||
BindingMember: "Value",
|
||||
DisplayMember: "Title",
|
||||
},
|
||||
Label{Visible: oidc, Text: "ID:"},
|
||||
LineEdit{Visible: oidc, Text: Bind("OIDCClientId")},
|
||||
Label{Visible: oidc, Text: i18n.SprintfColon("Secret")},
|
||||
@ -472,6 +486,10 @@ func (cd *EditClientDialog) onSave() {
|
||||
return
|
||||
}
|
||||
}
|
||||
if !newConf.LegacyFormat && newConf.TokenSource == "file" && newConf.TokenSourceFile == "" {
|
||||
showErrorMessage(cd.Form(), "", i18n.Sprintf("Token file is required."))
|
||||
return
|
||||
}
|
||||
cd.data.ClientCommon = newConf.ClientCommon
|
||||
cd.data.ClientCommon.Name = newConf.Name
|
||||
cd.Accept()
|
||||
|
Reference in New Issue
Block a user