From 82413499f5d086e238d7557ad69cd56636d44c80 Mon Sep 17 00:00:00 2001 From: "$(pass /github/name)" <$(pass /github/email)> Date: Fri, 6 Sep 2024 09:26:15 +0200 Subject: [PATCH] add: Admin creation --- internal/database/db.go | 47 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/internal/database/db.go b/internal/database/db.go index 07d8aab..4607423 100644 --- a/internal/database/db.go +++ b/internal/database/db.go @@ -1,9 +1,14 @@ package database import ( + "GoMembership/internal/constants" "GoMembership/internal/models" "GoMembership/pkg/logger" + "crypto/rand" + "encoding/hex" + "time" + "github.com/alexedwards/argon2id" "gorm.io/driver/sqlite" "gorm.io/gorm" ) @@ -29,6 +34,9 @@ func Open(dbPath string) error { DB = db logger.Info.Print("Opened DB") + if err := seedDatabase(); err != nil { + return err + } return nil } @@ -40,3 +48,42 @@ func Close() error { } return db.Close() } + +func seedDatabase() error { + var count int64 + DB.Model(&models.User{}).Count(&count) + if count == 0 { + bytes := make([]byte, 12) + _, err := rand.Read(bytes) + if err != nil { + return err + } + password := hex.EncodeToString(bytes) + hash, err := argon2id.CreateHash(password, argon2id.DefaultParams) + if err != nil { + return err + } + + admin := models.User{ + FirstName: "ad", + LastName: "min", + DateOfBirth: time.Now(), + Password: hash, + Address: "Downhill 4", + ZipCode: "9999", + City: "TechTown", + Status: constants.ActiveStatus, + RoleID: constants.Roles.Editor, + } + + result := DB.Create(&admin) + if result.Error != nil { + return result.Error + } + logger.Error.Print("==============================================================") + logger.Error.Printf("Admin Password: %v", password) + logger.Error.Print("==============================================================") + } + + return nil +}