Git with a cup of tea, painless self-hosted git service
Mirror for internal git.with.parts use
https://git.with.parts
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
// Copyright 2017 The Gitea Authors. All rights reserved.
|
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
|
|
|
|
package openid
|
|
|
|
|
|
|
|
import (
|
|
|
|
"sync"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/yohcop/openid-go"
|
|
|
|
)
|
|
|
|
|
|
|
|
type timedDiscoveredInfo struct {
|
|
|
|
info openid.DiscoveredInfo
|
|
|
|
time time.Time
|
|
|
|
}
|
|
|
|
|
|
|
|
type timedDiscoveryCache struct {
|
|
|
|
cache map[string]timedDiscoveredInfo
|
|
|
|
ttl time.Duration
|
|
|
|
mutex *sync.Mutex
|
|
|
|
}
|
|
|
|
|
|
|
|
func newTimedDiscoveryCache(ttl time.Duration) *timedDiscoveryCache {
|
|
|
|
return &timedDiscoveryCache{cache: map[string]timedDiscoveredInfo{}, ttl: ttl, mutex: &sync.Mutex{}}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *timedDiscoveryCache) Put(id string, info openid.DiscoveredInfo) {
|
|
|
|
s.mutex.Lock()
|
|
|
|
defer s.mutex.Unlock()
|
|
|
|
|
|
|
|
s.cache[id] = timedDiscoveredInfo{info: info, time: time.Now()}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Delete timed-out cache entries
|
|
|
|
func (s *timedDiscoveryCache) cleanTimedOut() {
|
|
|
|
now := time.Now()
|
|
|
|
for k, e := range s.cache {
|
|
|
|
diff := now.Sub(e.time)
|
|
|
|
if diff > s.ttl {
|
|
|
|
delete(s.cache, k)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *timedDiscoveryCache) Get(id string) openid.DiscoveredInfo {
|
|
|
|
s.mutex.Lock()
|
|
|
|
defer s.mutex.Unlock()
|
|
|
|
|
|
|
|
// Delete old cached while we are at it.
|
|
|
|
s.cleanTimedOut()
|
|
|
|
|
|
|
|
if info, has := s.cache[id]; has {
|
|
|
|
return info.info
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|