package store import ( "context" "crypto/sha1" "fmt" "gorm.io/driver/sqlite" "gorm.io/gorm" "os" "sonarqube-badge/config" "sonarqube-badge/security/aes" "time" ) func CreateDatabase(ctx context.Context) context.Context { cfg := ctx.Value("config").(config.Config) db, err := gorm.Open(sqlite.Open(fmt.Sprintf("%s/sqbadge.db", cfg.DataPath)), &gorm.Config{}) if err != nil { panic("failed to open database") } err = db.AutoMigrate(&Project{}) if err != nil { panic("failed to migrate database Project") } err = db.AutoMigrate(&User{}) if err != nil { panic("failed to migrate database User") } provideDefaultUser(cfg, db) return context.WithValue(ctx, "db", db) } func provideDefaultUser(cfg config.Config, db *gorm.DB) { password := aes.EncryptAES(cfg.Secret, time.Now().String()) sha1Hash := sha1.Sum([]byte(password)) user := User{ Username: "admin", // Random Password Password: fmt.Sprintf("%x", sha1Hash), Email: "admin@example.com", } if db.First(&user).Error != nil { _, _ = fmt.Fprintf(os.Stderr, "Default User: \n\t- %s\n\t- %s\n", user.Email, password) db.Create(&user) } }