From 222ad51d3db68fd1d3ed9554487504fe11da1341 Mon Sep 17 00:00:00 2001 From: Jason Streifling Date: Fri, 7 Feb 2025 15:55:00 +0100 Subject: [PATCH] Move DB username and password from ENV_VAR to config file --- cmd/backend/config.go | 13 +++++++++ cmd/backend/db.go | 62 +++++++++++++++++++------------------------ cmd/main.go | 2 +- 3 files changed, 42 insertions(+), 35 deletions(-) diff --git a/cmd/backend/config.go b/cmd/backend/config.go index a35b6c7..015103b 100644 --- a/cmd/backend/config.go +++ b/cmd/backend/config.go @@ -17,6 +17,8 @@ type Config struct { AtomFile string ConfigFile string DBName string + DBPass string + DBUser string Description string Domain string FirebaseKey string @@ -43,6 +45,7 @@ func newConfig() *Config { ConfigFile: "/etc/cpolis/config.toml", CookieExpiryHours: 24 * 30, DBName: "cpolis", + DBUser: "cpolis", FirebaseKey: "/etc/cpolis/serviceAccountKey.json", ImgDir: "/var/www/cpolis/images", LogFile: "/var/log/cpolis.log", @@ -110,6 +113,8 @@ func (c *Config) handleCliArgs() error { flag.StringVar(&c.AtomFile, "feed", c.AtomFile, "atom feed file") flag.StringVar(&c.ConfigFile, "config", c.ConfigFile, "config file") flag.StringVar(&c.DBName, "db", c.DBName, "DB name") + flag.StringVar(&c.DBPass, "db-pass", c.DBPass, "DB password") + flag.StringVar(&c.DBUser, "db-user", c.DBUser, "DB username") flag.StringVar(&c.Description, "desc", c.Description, "channel description") flag.StringVar(&c.Domain, "domain", c.Domain, "domain name") flag.StringVar(&c.FirebaseKey, "firebase", c.FirebaseKey, "Firebase service account key file") @@ -196,6 +201,14 @@ func (c *Config) setupConfig(cliConfig *Config) error { c.DBName = cliConfig.DBName } + if cliConfig.DBPass != defaultConfig.DBPass { + c.DBPass = cliConfig.DBPass + } + + if cliConfig.DBUser != defaultConfig.DBUser { + c.DBUser = cliConfig.DBUser + } + if cliConfig.Description != defaultConfig.Description { c.Description = cliConfig.Description } diff --git a/cmd/backend/db.go b/cmd/backend/db.go index cc7e67c..23e1f04 100644 --- a/cmd/backend/db.go +++ b/cmd/backend/db.go @@ -30,45 +30,32 @@ type ( } ) -func getUsername() (string, error) { - user := os.Getenv("DB_USER") - if user == "" { +func getDBUsername(c *Config) error { + if c.DBUser == "" { var err error + fmt.Printf("DB Benutzer: ") - user, err = bufio.NewReader(os.Stdin).ReadString('\n') + c.DBUser, err = bufio.NewReader(os.Stdin).ReadString('\n') if err != nil { - return "", fmt.Errorf("error reading username: %v", err) + return fmt.Errorf("error reading username: %v", err) } } - return strings.TrimSpace(user), nil + + return nil } -func getPassword() (string, error) { - pass := os.Getenv("DB_PASS") - if pass == "" { +func getDBPassword(c *Config) error { + if c.DBPass == "" { fmt.Printf("DB Passwort: ") bytePass, err := term.ReadPassword(int(syscall.Stdin)) if err != nil { - return "", fmt.Errorf("error reading password: %v", err) + return fmt.Errorf("error reading password: %v", err) } + fmt.Println() - pass = strings.TrimSpace(string(bytePass)) + c.DBPass = strings.TrimSpace(string(bytePass)) } - return pass, nil -} - -func getCredentials() (string, string, error) { - user, err := getUsername() - if err != nil { - return "", "", fmt.Errorf("error getting username: %v", err) - } - - pass, err := getPassword() - if err != nil { - return "", "", fmt.Errorf("error getting password: %v", err) - } - - return user, pass, nil + return nil } func wait(iteration int) { @@ -77,26 +64,33 @@ func wait(iteration int) { time.Sleep(waitTime + jitter) } -func OpenDB(dbName string) (*DB, error) { +func OpenDB(c *Config) (*DB, error) { var err error - db := DB{DB: new(sql.DB)} + db := new(DB) + + if err := getDBUsername(c); err != nil { + return nil, fmt.Errorf("error getting DB username: %v", err) + } + + if err := getDBPassword(c); err != nil { + return nil, fmt.Errorf("error getting DB password: %v", err) + } cfg := mysql.NewConfig() - cfg.DBName = dbName - cfg.User, cfg.Passwd, err = getCredentials() - if err != nil { - return nil, fmt.Errorf("error reading user credentials for DB: %v", err) - } + cfg.DBName = c.DBName + cfg.User = c.DBUser + cfg.Passwd = c.DBPass db.DB, err = sql.Open("mysql", cfg.FormatDSN()) if err != nil { return nil, fmt.Errorf("error opening DB: %v", err) } + if err = db.Ping(); err != nil { return nil, fmt.Errorf("error pinging DB: %v", err) } - return &db, nil + return db, nil } func (db *DB) UpdateAttributes(a ...*Attribute) error { diff --git a/cmd/main.go b/cmd/main.go index bb07bca..d99cf9f 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -24,7 +24,7 @@ func main() { defer logFile.Close() log.SetOutput(logFile) - db, err := b.OpenDB(config.DBName) + db, err := b.OpenDB(config) if err != nil { log.Fatalln(err) }