package service import ( "crypto/md5" "encoding/hex" "fmt" "sync" "github.com/casehub/ticket-workbench/internal/model" "github.com/google/uuid" "gorm.io/gorm" ) var ( sessions = make(map[string]*model.TicketUser) sessionMu sync.RWMutex ) func MD5Hash(text string) string { hash := md5.Sum([]byte(text)) return hex.EncodeToString(hash[:]) } func Login(db *gorm.DB, account, password string) (*model.TicketUser, string, error) { var user model.TicketUser err := db.Where("account = ? AND status = 1", account).First(&user).Error if err != nil { if err == gorm.ErrRecordNotFound { return nil, "", fmt.Errorf("账号或密码错误") } return nil, "", err } if user.Password != MD5Hash(password) { return nil, "", fmt.Errorf("账号或密码错误") } sessionID := uuid.New().String() sessionMu.Lock() sessions[sessionID] = &user sessionMu.Unlock() return &user, sessionID, nil } func Logout(sessionID string) { sessionMu.Lock() delete(sessions, sessionID) sessionMu.Unlock() } func GetUserBySession(sessionID string) *model.TicketUser { sessionMu.RLock() defer sessionMu.RUnlock() return sessions[sessionID] }