1 Star 0 Fork 0

lwch / token

加入 Gitee
与超过 800 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
manager.go 1.32 KB
一键复制 编辑 Web IDE 原始数据 按行查看 历史
lwch 提交于 2020-11-11 15:18 . first commit
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)
}
}

评论 ( 0 )

你可以在登录后,发表评论

1
https://gitee.com/lwch/token.git
git@gitee.com:lwch/token.git
lwch
token
token
master

搜索帮助