基本功能实现

This commit is contained in:
2026-01-26 21:53:34 +08:00
commit c6e5e655f9
28 changed files with 4803 additions and 0 deletions

View File

@@ -0,0 +1,69 @@
package token
import (
"crypto/rand"
"encoding/hex"
"errors"
"time"
"BingDailyImage/internal/config"
"BingDailyImage/internal/model"
"BingDailyImage/internal/repo"
"golang.org/x/crypto/bcrypt"
)
func GenerateTokenString() string {
b := make([]byte, 32)
rand.Read(b)
return hex.EncodeToString(b)
}
func CreateToken(name string, expiresAt time.Time) (*model.Token, error) {
tString := GenerateTokenString()
t := &model.Token{
Token: tString,
Name: name,
ExpiresAt: expiresAt,
}
if err := repo.DB.Create(t).Error; err != nil {
return nil, err
}
return t, nil
}
func ValidateToken(tokenStr string) (*model.Token, error) {
var t model.Token
if err := repo.DB.Where("token = ? AND disabled = ?", tokenStr, false).First(&t).Error; err != nil {
return nil, err
}
if time.Now().After(t.ExpiresAt) {
return nil, errors.New("token expired")
}
return &t, nil
}
func Login(password string) (*model.Token, error) {
cfg := config.GetConfig()
err := bcrypt.CompareHashAndPassword([]byte(cfg.Admin.PasswordBcrypt), []byte(password))
if err != nil {
return nil, errors.New("invalid password")
}
ttl := config.GetTokenTTL()
return CreateToken("login-token", time.Now().Add(ttl))
}
func ListTokens() ([]model.Token, error) {
var tokens []model.Token
err := repo.DB.Order("id desc").Find(&tokens).Error
return tokens, err
}
func UpdateToken(id uint, disabled bool) error {
return repo.DB.Model(&model.Token{}).Where("id = ?", id).Update("disabled", disabled).Error
}
func DeleteToken(id uint) error {
return repo.DB.Delete(&model.Token{}, id).Error
}