43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
package migrate
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/perfect-panel/server/internal/model/user"
|
|
"github.com/perfect-panel/server/pkg/logger"
|
|
"github.com/perfect-panel/server/pkg/tool"
|
|
"github.com/perfect-panel/server/pkg/uuidx"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// CreateAdminUser create admin user
|
|
func CreateAdminUser(email, password string, tx *gorm.DB) error {
|
|
enable := true
|
|
return tx.Transaction(func(tx *gorm.DB) error {
|
|
// Prevent duplicate creation
|
|
if tx.Model(&user.User{}).Find(&user.User{}).RowsAffected != 0 {
|
|
logger.Info("User already exists, skip creating administrator account")
|
|
return nil
|
|
}
|
|
|
|
u := user.User{
|
|
Password: tool.EncodePassWord(password),
|
|
IsAdmin: &enable,
|
|
ReferCode: uuidx.UserInviteCode(time.Now().Unix()),
|
|
}
|
|
if err := tx.Model(&user.User{}).Save(&u).Error; err != nil {
|
|
return err
|
|
}
|
|
method := user.AuthMethods{
|
|
UserId: u.Id,
|
|
AuthType: "email",
|
|
AuthIdentifier: email,
|
|
Verified: true,
|
|
}
|
|
if err := tx.Model(&user.AuthMethods{}).Save(&method).Error; err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
})
|
|
}
|