代码拉取完成,页面将自动刷新
package token
import (
"fmt"
"os"
"path"
"path/filepath"
"time"
)
// Manager token manager
type Manager struct {
ttl time.Duration
cacheDir string
}
// DefaultTTL default ttl
const DefaultTTL = time.Hour
// NewManager new token manager
func NewManager(dir string, ttl time.Duration) *Manager {
ret := new(Manager)
ret.ttl = ttl
ret.cacheDir = dir
os.MkdirAll(dir, 0755)
go func() {
for {
ret.clear()
time.Sleep(time.Minute)
}
}()
return ret
}
func (m *Manager) clear() {
files, _ := filepath.Glob(path.Join(m.cacheDir, "*.token"))
for _, file := range files {
fi, err := os.Stat(file)
if err != nil {
continue
}
if time.Since(fi.ModTime()) > m.ttl {
os.Remove(file)
}
}
}
// Save save token
func (m *Manager) Save(tk Token) error {
dir := path.Join(m.cacheDir, fmt.Sprintf("%s_%s.token", tk.GetUID(), tk.GetTK()))
return tk.SaveToFile(dir)
}
// Verify verify token
func (m *Manager) Verify(tk Token) (bool, error) {
files, _ := filepath.Glob(path.Join(m.cacheDir, fmt.Sprintf("*_%s.token", tk.GetTK())))
if len(files) == 0 {
return false, nil
}
return true, tk.LoadFromFile(files[0])
}
// Revoke revoke token
func (m *Manager) Revoke(tk Token) {
files, _ := filepath.Glob(path.Join(m.cacheDir, fmt.Sprintf("%s_*.token", tk.GetUID())))
for _, file := range files {
os.Remove(file)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。