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 {
|
2023-07-22 13:42:43 +05:00
|
|
|
ID uint64 `gorm:"primaryKey"`
|
|
|
|
Username string `gorm:"unique;notNull"`
|
|
|
|
Bcrypt string `gorm:"notNull"`
|
2023-04-06 10:36:11 +05:00
|
|
|
}
|
|
|
|
|
2024-03-25 15:52:18 +05:00
|
|
|
func CountAdmins() int64 {
|
2023-04-06 10:36:11 +05:00
|
|
|
var admins []Admin
|
|
|
|
var count int64
|
2024-03-25 15:52:18 +05:00
|
|
|
DB.Model(&admins).Count(&count)
|
2023-04-06 10:36:11 +05:00
|
|
|
return count
|
|
|
|
}
|
|
|
|
|
2024-03-25 15:52:18 +05:00
|
|
|
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),
|
|
|
|
}
|
2024-03-25 15:52:18 +05:00
|
|
|
result := DB.Create(&admin)
|
2023-04-06 10:36:11 +05:00
|
|
|
|
|
|
|
if result.Error != nil {
|
|
|
|
return Admin{}, result.Error
|
|
|
|
}
|
|
|
|
|
|
|
|
return admin, nil
|
|
|
|
}
|
|
|
|
|
2024-03-25 15:52:18 +05:00
|
|
|
func AuthorizeAdmin(username string, password string) (Admin, error) {
|
2023-04-06 10:36:11 +05:00
|
|
|
var admin Admin
|
2024-03-25 15:52:18 +05:00
|
|
|
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
|
|
|
|
}
|