feat: ensure admin user
This commit is contained in:
44
internal/user/admin.go
Normal file
44
internal/user/admin.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package user
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"gitea.local/admin/hspguard/internal/repository"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
func EnsureAdminUser(ctx context.Context, repo *repository.Queries) {
|
||||||
|
adminName := os.Getenv("ADMIN_NAME")
|
||||||
|
if adminName == "" {
|
||||||
|
adminName = "admin"
|
||||||
|
}
|
||||||
|
|
||||||
|
adminEmail := os.Getenv("ADMIN_EMAIL")
|
||||||
|
adminPassword := os.Getenv("ADMIN_PASSWORD")
|
||||||
|
|
||||||
|
if adminEmail == "" {
|
||||||
|
log.Fatalln("ERR: ADMIN_EMAIL env variable is required")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := repo.FindUserEmail(ctx, adminEmail)
|
||||||
|
if err != nil {
|
||||||
|
if adminPassword == "" {
|
||||||
|
log.Fatalln("ERR: ADMIN_PASSWORD env variable is required")
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := createAdmin(ctx, adminName, adminEmail, adminPassword, repo); err != nil {
|
||||||
|
log.Fatalln("ERR: Failed to create admin account:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func createAdmin(ctx context.Context, name, email, password string, repo *repository.Queries) (uuid.UUID, error) {
|
||||||
|
return repo.InsertUser(ctx, repository.InsertUserParams{
|
||||||
|
FullName: name,
|
||||||
|
Email: email,
|
||||||
|
PasswordHash: password,
|
||||||
|
IsAdmin: true,
|
||||||
|
})
|
||||||
|
}
|
Reference in New Issue
Block a user