licensing-cotton/internal/handlers/session.go
2025-01-16 15:41:42 +08:00

43 lines
964 B
Go

package handlers
import (
"crypto/sha256"
"encoding/base64"
"fmt"
"sync"
"time"
"licensing-cotton/internal/database"
)
var (
sessionMap = make(map[string]string) // token -> username
sessionMutex sync.RWMutex
)
// 生成一个简单的 session token
func generateSessionToken(username string) string {
data := fmt.Sprintf("%s:%d", username, time.Now().UnixNano())
sum := sha256.Sum256([]byte(data))
return base64.URLEncoding.EncodeToString(sum[:])
}
func setSession(token, username string) {
sessionMutex.Lock()
defer sessionMutex.Unlock()
sessionMap[token] = username
}
func getSessionUsername(token string) (string, bool) {
sessionMutex.RLock()
defer sessionMutex.RUnlock()
u, ok := sessionMap[token]
return u, ok
}
// 也可以把 dbQueryRole 写这里或单独再抽一个地方
func dbQueryRole(username string, role *string) error {
return database.DB.QueryRow(`SELECT role FROM users WHERE username=?`, username).
Scan(role)
}