Added initial support for MySQL databases

This commit is contained in:
2024-02-18 16:37:13 +01:00
parent 2ccc9c7397
commit 5d41543543
5 changed files with 102 additions and 0 deletions

34
cmd/data/db.go Normal file
View File

@ -0,0 +1,34 @@
package data
import (
"database/sql"
"fmt"
"github.com/go-sql-driver/mysql"
)
type DB struct {
*sql.DB
}
func OpenDB(dbName string) (*DB, error) {
var err error
db := DB{DB: &sql.DB{}}
cfg := mysql.NewConfig()
cfg.DBName = dbName
cfg.User, cfg.Passwd, err = getCredentials()
if err != nil {
return nil, fmt.Errorf("error: user credentials for DB could not be read: %v", err)
}
db.DB, err = sql.Open("mysql", cfg.FormatDSN())
if err != nil {
return nil, fmt.Errorf("error: DB could not be opened: %v", err)
}
if err = db.Ping(); err != nil {
return nil, fmt.Errorf("error: DB could not be reached: %v", err)
}
return &db, nil
}

52
cmd/data/helpers.go Normal file
View File

@ -0,0 +1,52 @@
package data
import (
"bufio"
"fmt"
"os"
"strings"
"syscall"
"golang.org/x/term"
)
func getUsername() (string, error) {
user := os.Getenv("DB_USER")
if user == "" {
var err error
fmt.Printf("DB Benutzer: ")
user, err = bufio.NewReader(os.Stdin).ReadString('\n')
if err != nil {
return fmt.Errorf("error: cmd/data/helpers.go getUsername bufio.NewReader().ReadString(): %v", err)
}
}
return strings.TrimSpace(user), nil
}
func getPassword() (string, error) {
pass := os.Getenv("DB_PASS")
if pass == "" {
fmt.Printf("DB Passwort: ")
bytePass, err := term.ReadPassword(int(syscall.Stdin))
if err != nil {
return fmt.Errorf("error: cmd/data/helpers.go getPassword term.ReadPassword(): %v", err)
}
fmt.Println()
pass = strings.TrimSpace(string(bytePass))
}
return pass, nil
}
func getCredentials() (string, string, error) {
user, err := getUsername()
if err != nil {
return "", "", fmt.Errorf("error: cmd/data/helpers.go getCredentials getUsername(): %v", err)
}
pass, err := getPassword()
if err != nil {
return "", "", fmt.Errorf("error: cmd/data/helpers.go getCredentials getPassword(): %v", err)
}
return user, pass, nil
}