Переглянути джерело

provider: support for username and password file (#1455)

Signed-off-by: patrickap <[email protected]>
patrickap 1 рік тому
батько
коміт
a91cf22e0f
2 змінених файлів з 22 додано та 0 видалено
  1. 4 0
      internal/config/config.go
  2. 18 0
      internal/dataprovider/dataprovider.go

+ 4 - 0
internal/config/config.go

@@ -327,7 +327,9 @@ func Init() {
 			Host:               "",
 			Port:               0,
 			Username:           "",
+			UsernameFile:       "",
 			Password:           "",
+			PasswordFile:       "",
 			ConnectionString:   "",
 			SQLTablesPrefix:    "",
 			SSLMode:            0,
@@ -2067,7 +2069,9 @@ func setViperDefaults() {
 	viper.SetDefault("data_provider.host", globalConf.ProviderConf.Host)
 	viper.SetDefault("data_provider.port", globalConf.ProviderConf.Port)
 	viper.SetDefault("data_provider.username", globalConf.ProviderConf.Username)
+	viper.SetDefault("data_provider.username_file", globalConf.ProviderConf.UsernameFile)
 	viper.SetDefault("data_provider.password", globalConf.ProviderConf.Password)
+	viper.SetDefault("data_provider.password_file", globalConf.ProviderConf.PasswordFile)
 	viper.SetDefault("data_provider.sslmode", globalConf.ProviderConf.SSLMode)
 	viper.SetDefault("data_provider.disable_sni", globalConf.ProviderConf.DisableSNI)
 	viper.SetDefault("data_provider.target_session_attrs", globalConf.ProviderConf.TargetSessionAttrs)

+ 18 - 0
internal/dataprovider/dataprovider.go

@@ -355,8 +355,10 @@ type Config struct {
 	Port int `json:"port" mapstructure:"port"`
 	// Database username
 	Username string `json:"username" mapstructure:"username"`
+	UsernameFile string `json:"username_file" mapstructure:"username_file"`
 	// Database password
 	Password string `json:"password" mapstructure:"password"`
+	PasswordFile string `json:"password_file" mapstructure:"password_file"`
 	// Used for drivers mysql and postgresql.
 	// 0 disable SSL/TLS connections.
 	// 1 require ssl.
@@ -875,6 +877,22 @@ func Initialize(cnf Config, basePath string, checkAdmins bool) error {
 	config.Actions.ExecuteOn = util.RemoveDuplicates(config.Actions.ExecuteOn, true)
 	config.Actions.ExecuteFor = util.RemoveDuplicates(config.Actions.ExecuteFor, true)
 
+	if config.Username == "" && config.UsernameFile != "" {
+		user, err := os.ReadFile(config.UsernameFile)
+		if err != nil {
+			return err
+		}
+		config.Username = string(user)
+	}
+
+	if config.Password == "" && config.PasswordFile != "" {
+		password, err := os.ReadFile(config.PasswordFile)
+		if err != nil {
+			return err
+		}
+		config.Password = string(password)
+	}
+
 	cnf.BackupsPath = getConfigPath(cnf.BackupsPath, basePath)
 	if cnf.BackupsPath == "" {
 		return fmt.Errorf("required directory is invalid, backup path %q", cnf.BackupsPath)