phoenix/database/admins.go

54 lines
1,017 B
Go
Raw Normal View History

2023-07-22 15:24:01 +05:00
package database
2023-04-06 10:36:11 +05:00
import (
"golang.org/x/crypto/bcrypt"
)
type Admin struct {
ID uint64 `gorm:"primaryKey"`
Username string `gorm:"unique;notNull"`
Bcrypt string `gorm:"notNull"`
2023-04-06 10:36:11 +05:00
}
func CountAdmins() int64 {
2023-04-06 10:36:11 +05:00
var admins []Admin
var count int64
DB.Model(&admins).Count(&count)
2023-04-06 10:36:11 +05:00
return count
}
func CreateAdmin(username string, password string) (Admin, error) {
2023-04-06 10:36:11 +05:00
hash, err := bcrypt.GenerateFromPassword([]byte(password), 10)
if err != nil {
return Admin{}, err
}
admin := Admin{
Username: username,
Bcrypt: string(hash),
}
result := DB.Create(&admin)
2023-04-06 10:36:11 +05:00
if result.Error != nil {
return Admin{}, result.Error
}
return admin, nil
}
func AuthorizeAdmin(username string, password string) (Admin, error) {
2023-04-06 10:36:11 +05:00
var admin Admin
result := DB.Where("username = ?", username).First(&admin)
2023-04-06 10:36:11 +05:00
if result.Error != nil {
return Admin{}, result.Error
}
err := bcrypt.CompareHashAndPassword([]byte(admin.Bcrypt), []byte(password))
if err != nil {
return Admin{}, err
}
return admin, nil
}