mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-18 00:29:33 +01:00
70 lines
1.4 KiB
Go
70 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
|
||
|
}
|