57 lines · 1.1 KB · Go
RawDownload
// 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 entriesfunc (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}