52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package user
|
|
|
|
import (
|
|
"caddydash/db"
|
|
"fmt"
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
|
)
|
|
|
|
func InitAdminUser(username string, password string, cdb *db.ConfigDB) error {
|
|
hasUser, err := cdb.HasAnyUser()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to check if any user exists: %w", err)
|
|
}
|
|
if hasUser {
|
|
userStatus.SetInitialized(true)
|
|
return nil
|
|
}
|
|
hashedPassword, err := hashPassword(password)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to hash password: %w", err)
|
|
}
|
|
err = cdb.AddUser(username, hashedPassword)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to add admin user: %w", err)
|
|
}
|
|
userStatus.SetInitialized(true)
|
|
return nil
|
|
}
|
|
|
|
// bcrypt加密password串
|
|
func hashPassword(password string) (string, error) {
|
|
bytes, err := bcrypt.GenerateFromPassword([]byte(password), 11)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return string(bytes), err
|
|
}
|
|
|
|
func InitAdminUserStatus(cdb *db.ConfigDB) error {
|
|
hasUser, err := cdb.HasAnyUser()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to check if any user exists: %w", err)
|
|
}
|
|
if hasUser {
|
|
userStatus.SetInitialized(true)
|
|
return nil
|
|
} else {
|
|
userStatus.SetInitialized(false)
|
|
return nil
|
|
}
|
|
}
|