From 68f2929ba195cd588d26519de7806dc6324bf31b Mon Sep 17 00:00:00 2001 From: ZJY <764763903@qq.com> Date: Fri, 3 Sep 2021 07:41:24 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=93=E5=AD=98token=20=20=E6=9B=B4=E6=94=B9?= =?UTF-8?q?readme=20=20readme=E7=9B=B8=E5=85=B3=E9=97=AE=E9=A2=98=E4=B8=8D?= =?UTF-8?q?=E5=9C=A8=E8=A7=A3=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/container.go | 52 +++++++++++++++++++++++++++++++++++---------- models/db.go | 31 +++++++-------------------- models/toekn.go | 5 ++--- readme.txt | 11 +++++++++- 4 files changed, 61 insertions(+), 38 deletions(-) diff --git a/models/container.go b/models/container.go index c97853d..a99ad3f 100644 --- a/models/container.go +++ b/models/container.go @@ -10,6 +10,7 @@ import ( "os" "regexp" "strings" + "time" "github.com/beego/beego/v2/client/httplib" "github.com/beego/beego/v2/core/logs" @@ -354,21 +355,30 @@ func (c *Container) getToken() error { version, err := GetQlVersion(c.Address) logs.Debug(err) if version == "2.9" { - logs.Info("获取新版token") - req := httplib.Get(c.Address + fmt.Sprintf(`/open/auth/token?client_id=%s&client_secret=%s`, c.Cid, c.Secret)) - req.Header("Content-Type", "application/json;charset=UTF-8") - if rsp, err := req.Response(); err == nil { - data, err := ioutil.ReadAll(rsp.Body) - if err != nil { - return err + token, err := getSqlToken() + if err != nil { + logs.Error(err) + } + if token == nil { + err2, done := getT(c, token) + if done { + return err2 } - c.Token, _ = jsonparser.GetString(data, "data", "token") - logs.Info(c.Token) } else { - return err + logs.Info("缓存token") + h, _ := time.ParseDuration("+24d") + tZero := time.Time{}.Local().Add(h) + if tZero.After(token.expiration) { + err2, done := getT(c, token) + if done { + return err2 + } + } else { + logs.Info("获取缓存成功") + c.Token = token.Token + } } } else { - logs.Info("获取旧版token") req := httplib.Post(c.Address + "/api/login") req.Header("Content-Type", "application/json;charset=UTF-8") req.Body(fmt.Sprintf(`{"username":"%s","password":"%s"}`, c.Username, c.Password)) @@ -388,6 +398,26 @@ func (c *Container) getToken() error { return nil } +func getT(c *Container, token *Token) (error, bool) { + logs.Info("获取token") + req := httplib.Get(c.Address + fmt.Sprintf(`/open/auth/token?client_id=%s&client_secret=%s`, c.Cid, c.Secret)) + req.Header("Content-Type", "application/json;charset=UTF-8") + if rsp, err := req.Response(); err == nil { + data, err := ioutil.ReadAll(rsp.Body) + if err != nil { + return err, true + } + c.Token, _ = jsonparser.GetString(data, "data", "token") + token.Token, _ = jsonparser.GetString(data, "data", "token") + token.expiration = time.Time{}.Local() + setSqlToken(token) + logs.Info(c.Token) + } else { + return err, true + } + return nil, false +} + func (c *Container) request(ss ...string) ([]byte, error) { var api, method, body string for _, s := range ss { diff --git a/models/db.go b/models/db.go index 17d1bcd..0aa70f1 100644 --- a/models/db.go +++ b/models/db.go @@ -76,6 +76,7 @@ type JdCookie struct { CreateAt string `gorm:"column:CreateAt"` PtKey string `gorm:"column:PtKey"` PtPin string `gorm:"column:PtPin;unique"` + WsKey string `gorm:"column:WsKey"` Note string `gorm:"column:Note"` Available string `gorm:"column:Available;default:true" validate:"oneof=true false"` Nickname string `gorm:"column:Nickname"` @@ -119,6 +120,7 @@ var Available = "Available" var UnAvailable = "UnAvailable" var PtKey = "PtKey" var PtPin = "PtPin" +var WsKey = "WsKey" var Priority = "Priority" var Nickname = "Nickname" var BeanNum = "BeanNum" @@ -157,7 +159,7 @@ func GetJdCookies(sbs ...func(sb *gorm.DB) *gorm.DB) []JdCookie { for _, sb := range sbs { tb = sb(tb) } - tb.Order("priority desc").Find(&cks) + tb.Order("priority,available desc").Find(&cks) return cks } @@ -275,7 +277,7 @@ func CheckIn(pin, key string) int { return 2 } -func setToken(token *Token) error { +func setSqlToken(token *Token) error { tx := db.Begin() if err := tx.Create(token).Error; err != nil { tx.Rollback() @@ -284,24 +286,7 @@ func setToken(token *Token) error { return tx.Commit().Error } -//func getToken(pin string) (*Token, error) { -// token := &Token{} -// db.Where(CreateAt+" = ?", pin).First(token) -// format := "2006-01-02 15:04:05" -// sqlUpdatedAt, _ := time.ParseInLocation(format, "2021-03-24 15:00:00", time.Local) -// fmt.Println("测试时间:", sqlUpdatedAt) -// -// t := time.Now() -// t_zero := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location()) -// fmt.Println("当天凌晨时间:", t_zero) -// -// t_ := sqlUpdatedAt.Sub(t_zero) -// fmt.Println("测试时间到当天凌晨时间:", t_) -// if t_ > 0 { -// fmt.Println("未超有效时间!!!") -// } else { -// fmt.Println("超过有效时间!!!") -// } -// -// return token, db.Where(CreateAt+" = ?", pin).First(ck).Error -//} +func getSqlToken() (*Token, error) { + token := &Token{} + return token, db.First(token).Error +} diff --git a/models/toekn.go b/models/toekn.go index 597d8b8..28f22dc 100644 --- a/models/toekn.go +++ b/models/toekn.go @@ -5,7 +5,6 @@ import ( ) type Token struct { - ID int - CreatedAt time.Time - Token string + expiration time.Time + Token string } diff --git a/readme.txt b/readme.txt index 90d4598..b49a668 100644 --- a/readme.txt +++ b/readme.txt @@ -1 +1,10 @@ -自用、学习、爱用不用。我就是上传数据也不叫偷,我自己脚本还不是想咋写就咋写,整天偷偷偷的,毛病。 \ No newline at end of file +自用、学习、爱用不用。我就是上传数据也不叫偷,我自己脚本还不是想咋写就咋写,整天偷偷偷的,毛病。 +##注意事项 + 1. master: 的值即为密码,后面不可带注释,全匹配方可登录,也不要pt_pin 可自定义 + 2. 2.9+版本需要配置 cid: admin + secret: admin + 在青龙里面系统设置,添加应用后配置 + 3.发送wskey即可自动添加账号 + 4.账号过期自动换key 暂未好 + 5.定时十二小时自动换key 暂未好 + 6.缓存token