Skip to content

Commit 2ca4c08

Browse files
authored
Merge pull request #566 from dgageot/token-thread-safe
Make Token Store thread safe
2 parents d9c04f0 + 235211c commit 2ca4c08

2 files changed

Lines changed: 14 additions & 5 deletions

File tree

pkg/concurrent/map.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ func (m *Map[K, V]) Store(key K, value V) {
2828
m.values[key] = value
2929
}
3030

31+
func (m *Map[K, V]) Delete(key K) {
32+
m.mu.Lock()
33+
defer m.mu.Unlock()
34+
35+
delete(m.values, key)
36+
}
37+
3138
func (m *Map[K, V]) Length() int {
3239
m.mu.RLock()
3340
defer m.mu.RUnlock()

pkg/tools/mcp/tokenstore.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package mcp
33
import (
44
"fmt"
55
"time"
6+
7+
"github.com/docker/cagent/pkg/concurrent"
68
)
79

810
// OAuthTokenStore manages OAuth tokens
@@ -35,30 +37,30 @@ func (t *OAuthToken) IsExpired() bool {
3537

3638
// InMemoryTokenStore implements OAuthTokenStore in memory
3739
type InMemoryTokenStore struct {
38-
tokens map[string]*OAuthToken
40+
tokens *concurrent.Map[string, *OAuthToken]
3941
}
4042

4143
// NewInMemoryTokenStore creates a new in-memory token store
4244
func NewInMemoryTokenStore() OAuthTokenStore {
4345
return &InMemoryTokenStore{
44-
tokens: make(map[string]*OAuthToken),
46+
tokens: concurrent.NewMap[string, *OAuthToken](),
4547
}
4648
}
4749

4850
func (s *InMemoryTokenStore) GetToken(resourceURL string) (*OAuthToken, error) {
49-
token, ok := s.tokens[resourceURL]
51+
token, ok := s.tokens.Load(resourceURL)
5052
if !ok {
5153
return nil, fmt.Errorf("no token found for resource: %s", resourceURL)
5254
}
5355
return token, nil
5456
}
5557

5658
func (s *InMemoryTokenStore) StoreToken(resourceURL string, token *OAuthToken) error {
57-
s.tokens[resourceURL] = token
59+
s.tokens.Store(resourceURL, token)
5860
return nil
5961
}
6062

6163
func (s *InMemoryTokenStore) RemoveToken(resourceURL string) error {
62-
delete(s.tokens, resourceURL)
64+
s.tokens.Delete(resourceURL)
6365
return nil
6466
}

0 commit comments

Comments
 (0)