Files
ragflow/internal/server/config/environments.go
Jin Hai 36ae39bc60 Go: refactor config (#17544)
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
2026-07-31 17:18:45 +08:00

168 lines
4.6 KiB
Go

//
// Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package config
import (
"fmt"
"net/mail"
"ragflow/internal/common"
"strings"
)
type Environments struct {
Language string `mapstructure:"language"`
SecretKey string `mapstructure:"secret_key"`
RegisterEnabled bool `mapstructure:"register_enabled"`
DisablePasswordLogin bool `mapstructure:"disable_password_login"`
DocumentEngineType string `mapstructure:"document_engine_type"`
DatabaseType string `mapstructure:"database_type"`
StorageType string `mapstructure:"storage_type"`
MinioHost string `mapstructure:"minio_host"`
MinioRegion string `mapstructure:"minio_region"`
CreateDefaultSuperUser bool `mapstructure:"create_default_super_user"`
DefaultSuperUser DefaultSuperUser `mapstructure:"default_super_user"`
}
type DefaultSuperUser struct {
Email string `mapstructure:"email"`
Password string `mapstructure:"password"`
Nickname string `mapstructure:"nickname"`
}
func (c *Config) GetEnvironments() error {
// Secret key
if envVal := common.GetEnv(common.EnvRAGFlowSecretKey); envVal != "" {
c.environments.SecretKey = envVal
}
// Load REGISTER_ENABLED from environment variable (default: true)
if envVal := common.GetEnv(common.EnvRegisterEnabled); envVal != "" {
str := strings.ToLower(envVal)
if str == "true" || str == "1" || str == "yes" {
c.environments.RegisterEnabled = true
} else {
c.environments.RegisterEnabled = false
}
}
// Load DISABLE_PASSWORD_LOGIN from environment variable (default: false)
if envVal := common.GetEnv(common.EnvDisablePasswordLogin); envVal != "" {
str := strings.ToLower(envVal)
if str == "true" || str == "1" || str == "yes" {
c.environments.DisablePasswordLogin = true
} else {
c.environments.DisablePasswordLogin = false
}
}
// Doc engine
docEngine := common.GetEnvSmall(common.EnvDocEngine)
if docEngine != "" {
switch docEngine {
case "infinity", "elasticsearch":
c.environments.DocumentEngineType = docEngine
case "opensearch", "oceanbase":
return fmt.Errorf("not implemented: %s", docEngine)
default:
return fmt.Errorf("invalid doc engine: %s", docEngine)
}
}
// Default super user email
superUserEmail := common.GetEnv(common.EnvDefaultSuperuserEmail)
if superUserEmail != "" {
_, err := mail.ParseAddress(superUserEmail)
if err != nil {
return fmt.Errorf("invalid super user email: %s", superUserEmail)
}
c.environments.DefaultSuperUser.Email = superUserEmail
}
superUserPassword := common.GetEnv(common.EnvDefaultSuperuserPassword)
if superUserPassword != "" {
c.environments.DefaultSuperUser.Password = superUserPassword
}
superUserNickname := common.GetEnv(common.EnvDefaultSuperuserNickname)
if superUserNickname != "" {
c.environments.DefaultSuperUser.Nickname = superUserNickname
}
// Meta database
databaseType := common.GetEnvSmall(common.EnvDBType)
if databaseType != "" {
switch databaseType {
case "mysql":
c.environments.DatabaseType = "mysql"
default:
return fmt.Errorf("invalid database type: %s", databaseType)
}
}
// Storage
storageType := common.GetEnvSmall(common.EnvStorageImpl)
if storageType != "" {
switch storageType {
case "minio", "s3", "oss", "gcs":
c.environments.StorageType = storageType
default:
return fmt.Errorf("invalid storage type: %s", storageType)
}
}
// Minio
minioHost := strings.ToLower(common.GetEnv(common.EnvMinioHost))
if minioHost != "" {
c.environments.MinioHost = minioHost
}
minioRegion := strings.ToLower(common.GetEnv(common.EnvMinioRegion))
if minioRegion != "" {
c.environments.MinioRegion = minioRegion
}
c.environments.Language = GetLanguage()
return nil
}
func GetLanguage() string {
lang := common.GetEnv(common.EnvLang)
if lang == "" {
lang = common.GetEnv(common.EnvLanguage)
}
lang = strings.ToLower(lang)
if strings.Contains(lang, "zh_") ||
strings.Contains(lang, "zh-") ||
strings.HasPrefix(lang, "zh") {
return "Chinese"
}
return "English"
}
func (c *Config) GetSecretKey() string {
return c.environments.SecretKey
}