Move DB username and password from ENV_VAR to config file

This commit is contained in:
Jason Streifling 2025-02-07 15:55:00 +01:00
parent df4019ef0f
commit 222ad51d3d
3 changed files with 42 additions and 35 deletions

View File

@ -17,6 +17,8 @@ type Config struct {
AtomFile string AtomFile string
ConfigFile string ConfigFile string
DBName string DBName string
DBPass string
DBUser string
Description string Description string
Domain string Domain string
FirebaseKey string FirebaseKey string
@ -43,6 +45,7 @@ func newConfig() *Config {
ConfigFile: "/etc/cpolis/config.toml", ConfigFile: "/etc/cpolis/config.toml",
CookieExpiryHours: 24 * 30, CookieExpiryHours: 24 * 30,
DBName: "cpolis", DBName: "cpolis",
DBUser: "cpolis",
FirebaseKey: "/etc/cpolis/serviceAccountKey.json", FirebaseKey: "/etc/cpolis/serviceAccountKey.json",
ImgDir: "/var/www/cpolis/images", ImgDir: "/var/www/cpolis/images",
LogFile: "/var/log/cpolis.log", 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.AtomFile, "feed", c.AtomFile, "atom feed file")
flag.StringVar(&c.ConfigFile, "config", c.ConfigFile, "config file") flag.StringVar(&c.ConfigFile, "config", c.ConfigFile, "config file")
flag.StringVar(&c.DBName, "db", c.DBName, "DB name") 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.Description, "desc", c.Description, "channel description")
flag.StringVar(&c.Domain, "domain", c.Domain, "domain name") flag.StringVar(&c.Domain, "domain", c.Domain, "domain name")
flag.StringVar(&c.FirebaseKey, "firebase", c.FirebaseKey, "Firebase service account key file") 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 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 { if cliConfig.Description != defaultConfig.Description {
c.Description = cliConfig.Description c.Description = cliConfig.Description
} }

View File

@ -30,45 +30,32 @@ type (
} }
) )
func getUsername() (string, error) { func getDBUsername(c *Config) error {
user := os.Getenv("DB_USER") if c.DBUser == "" {
if user == "" {
var err error var err error
fmt.Printf("DB Benutzer: ") fmt.Printf("DB Benutzer: ")
user, err = bufio.NewReader(os.Stdin).ReadString('\n') c.DBUser, err = bufio.NewReader(os.Stdin).ReadString('\n')
if err != nil { 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) { func getDBPassword(c *Config) error {
pass := os.Getenv("DB_PASS") if c.DBPass == "" {
if pass == "" {
fmt.Printf("DB Passwort: ") fmt.Printf("DB Passwort: ")
bytePass, err := term.ReadPassword(int(syscall.Stdin)) bytePass, err := term.ReadPassword(int(syscall.Stdin))
if err != nil { if err != nil {
return "", fmt.Errorf("error reading password: %v", err) return fmt.Errorf("error reading password: %v", err)
} }
fmt.Println() fmt.Println()
pass = strings.TrimSpace(string(bytePass)) c.DBPass = strings.TrimSpace(string(bytePass))
} }
return pass, nil return 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
} }
func wait(iteration int) { func wait(iteration int) {
@ -77,26 +64,33 @@ func wait(iteration int) {
time.Sleep(waitTime + jitter) time.Sleep(waitTime + jitter)
} }
func OpenDB(dbName string) (*DB, error) { func OpenDB(c *Config) (*DB, error) {
var err 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 := mysql.NewConfig()
cfg.DBName = dbName cfg.DBName = c.DBName
cfg.User, cfg.Passwd, err = getCredentials() cfg.User = c.DBUser
if err != nil { cfg.Passwd = c.DBPass
return nil, fmt.Errorf("error reading user credentials for DB: %v", err)
}
db.DB, err = sql.Open("mysql", cfg.FormatDSN()) db.DB, err = sql.Open("mysql", cfg.FormatDSN())
if err != nil { if err != nil {
return nil, fmt.Errorf("error opening DB: %v", err) return nil, fmt.Errorf("error opening DB: %v", err)
} }
if err = db.Ping(); err != nil { if err = db.Ping(); err != nil {
return nil, fmt.Errorf("error pinging DB: %v", err) return nil, fmt.Errorf("error pinging DB: %v", err)
} }
return &db, nil return db, nil
} }
func (db *DB) UpdateAttributes(a ...*Attribute) error { func (db *DB) UpdateAttributes(a ...*Attribute) error {

View File

@ -24,7 +24,7 @@ func main() {
defer logFile.Close() defer logFile.Close()
log.SetOutput(logFile) log.SetOutput(logFile)
db, err := b.OpenDB(config.DBName) db, err := b.OpenDB(config)
if err != nil { if err != nil {
log.Fatalln(err) log.Fatalln(err)
} }