41 lines
610 B
Go
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()
|
|
}
|