mirror of
				https://github.com/go-gitea/gitea
				synced 2025-09-28 03:28:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2017 The Gitea Authors. All rights reserved.
 | |
| // Use of this source code is governed by a MIT-style
 | |
| // license that can be found in the LICENSE file.
 | |
| 
 | |
| 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
 | |
| }
 |