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
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
}

View File

@ -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 {

View File

@ -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)
}