69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package openid
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
type DiscoveredInfo interface {
|
|
OpEndpoint() string
|
|
OpLocalID() string
|
|
ClaimedID() string
|
|
// ProtocolVersion: it's always openId 2.
|
|
}
|
|
|
|
type DiscoveryCache interface {
|
|
Put(id string, info DiscoveredInfo)
|
|
// Return a discovered info, or nil.
|
|
Get(id string) DiscoveredInfo
|
|
}
|
|
|
|
type SimpleDiscoveredInfo struct {
|
|
opEndpoint string
|
|
opLocalID string
|
|
claimedID string
|
|
}
|
|
|
|
func (s *SimpleDiscoveredInfo) OpEndpoint() string {
|
|
return s.opEndpoint
|
|
}
|
|
|
|
func (s *SimpleDiscoveredInfo) OpLocalID() string {
|
|
return s.opLocalID
|
|
}
|
|
|
|
func (s *SimpleDiscoveredInfo) ClaimedID() string {
|
|
return s.claimedID
|
|
}
|
|
|
|
type SimpleDiscoveryCache struct {
|
|
cache map[string]DiscoveredInfo
|
|
mutex *sync.Mutex
|
|
}
|
|
|
|
func NewSimpleDiscoveryCache() *SimpleDiscoveryCache {
|
|
return &SimpleDiscoveryCache{cache: map[string]DiscoveredInfo{}, mutex: &sync.Mutex{}}
|
|
}
|
|
|
|
func (s *SimpleDiscoveryCache) Put(id string, info DiscoveredInfo) {
|
|
s.mutex.Lock()
|
|
defer s.mutex.Unlock()
|
|
|
|
s.cache[id] = info
|
|
}
|
|
|
|
func (s *SimpleDiscoveryCache) Get(id string) DiscoveredInfo {
|
|
s.mutex.Lock()
|
|
defer s.mutex.Unlock()
|
|
|
|
if info, has := s.cache[id]; has {
|
|
return info
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func compareDiscoveredInfo(a DiscoveredInfo, opEndpoint, opLocalID, claimedID string) bool {
|
|
return a != nil &&
|
|
a.OpEndpoint() == opEndpoint &&
|
|
a.OpLocalID() == opLocalID &&
|
|
a.ClaimedID() == claimedID
|
|
}
|