51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
package service
|
|
|
|
type InMemoryRuntimeStore struct {
|
|
records map[string]*TokenRecord
|
|
tokenToID map[string]string
|
|
idempotencyByKey map[string]idempotencyEntry
|
|
}
|
|
|
|
func NewInMemoryRuntimeStore() *InMemoryRuntimeStore {
|
|
return &InMemoryRuntimeStore{
|
|
records: make(map[string]*TokenRecord),
|
|
tokenToID: make(map[string]string),
|
|
idempotencyByKey: make(map[string]idempotencyEntry),
|
|
}
|
|
}
|
|
|
|
func (s *InMemoryRuntimeStore) Save(record TokenRecord, idempotencyKey, requestHash string) {
|
|
recordCopy := cloneRecord(record)
|
|
s.records[record.TokenID] = &recordCopy
|
|
s.tokenToID[record.AccessToken] = record.TokenID
|
|
if idempotencyKey != "" {
|
|
s.idempotencyByKey[idempotencyKey] = idempotencyEntry{
|
|
RequestHash: requestHash,
|
|
TokenID: record.TokenID,
|
|
}
|
|
}
|
|
}
|
|
|
|
func (s *InMemoryRuntimeStore) GetByTokenID(tokenID string) (*TokenRecord, bool) {
|
|
record, ok := s.records[tokenID]
|
|
return record, ok
|
|
}
|
|
|
|
func (s *InMemoryRuntimeStore) GetByAccessToken(accessToken string) (*TokenRecord, bool) {
|
|
tokenID, ok := s.tokenToID[accessToken]
|
|
if !ok {
|
|
return nil, false
|
|
}
|
|
record, ok := s.records[tokenID]
|
|
return record, ok
|
|
}
|
|
|
|
func (s *InMemoryRuntimeStore) LookupIdempotency(idempotencyKey string) (idempotencyEntry, bool) {
|
|
entry, ok := s.idempotencyByKey[idempotencyKey]
|
|
return entry, ok
|
|
}
|
|
|
|
func (s *InMemoryRuntimeStore) TokenCount() int {
|
|
return len(s.records)
|
|
}
|