Slide 53
Slide 53 text
Cached Token Authenticator
53
func (a *cta) AuthenticateToken(ctx context.Context, token string)
(*Response, bool, error) {
if record, exists := a.cache.get(token); exists {
return record.resp, record.ok, record.err
}
record, _, _ := a.group.Do(token, func() (interface{}, error) {
resp, ok, err := a.authenticator.AuthenticateToken(ctx, token)
record := &cacheRecord{resp, ok, err}
a.cache.set(token, record, defaultTTL)
return record, nil
})
realRecord := record.(*cacheRecord)
return realRecord.resp, realRecord.ok, realRecord.err
}