Files
gitea-mcp/internal/mcp/session.go
2026-05-04 20:40:53 +02:00

41 lines
610 B
Go

package mcp
import (
"crypto/rand"
"encoding/hex"
"sync"
)
type SessionStore struct {
mu sync.RWMutex
m map[string]struct{}
}
func NewSessionStore() *SessionStore {
return &SessionStore{m: make(map[string]struct{})}
}
func (s *SessionStore) Issue() string {
b := make([]byte, 16)
_, _ = rand.Read(b)
id := hex.EncodeToString(b)
s.mu.Lock()
s.m[id] = struct{}{}
s.mu.Unlock()
return id
}
func (s *SessionStore) Valid(id string) bool {
s.mu.RLock()
defer s.mu.RUnlock()
_, ok := s.m[id]
return ok
}
func (s *SessionStore) Drop(id string) {
s.mu.Lock()
delete(s.m, id)
s.mu.Unlock()
}