5374ab81cc
SeedAdmin now uses 'admin'/'admin' as defaults when environment variables are not set, so the service works out-of-the-box after first install.
41 lines
691 B
Go
41 lines
691 B
Go
package auth
|
|
|
|
import (
|
|
"database/sql"
|
|
"log/slog"
|
|
)
|
|
|
|
func SeedAdmin(db *sql.DB, username, password string) error {
|
|
if username == "" {
|
|
username = "admin"
|
|
}
|
|
if password == "" {
|
|
password = "admin"
|
|
}
|
|
|
|
var exists bool
|
|
err := db.QueryRow("SELECT EXISTS(SELECT 1 FROM users WHERE username = ?)", username).Scan(&exists)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if exists {
|
|
return nil
|
|
}
|
|
|
|
hash, err := HashPassword(password)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = db.Exec(
|
|
"INSERT INTO users (username, password_hash, role) VALUES (?, ?, ?)",
|
|
username, string(hash), "admin",
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
slog.Info("admin user created", "username", username)
|
|
return nil
|
|
}
|