add token refresh for webdav

This commit is contained in:
xiaoyaofenfen 2022-09-24 15:09:31 +08:00
parent 93b55014d0
commit 4c5f217257
3 changed files with 42 additions and 4 deletions

View File

@ -122,7 +122,7 @@ func RefreshTokenInNeed(activeUser *config.PanUser) bool {
cz := time.FixedZone("CST", 8*3600) // 东8区 cz := time.FixedZone("CST", 8*3600) // 东8区
expiredTime, _ := time.ParseInLocation("2006-01-02 15:04:05", activeUser.WebToken.ExpireTime, cz) expiredTime, _ := time.ParseInLocation("2006-01-02 15:04:05", activeUser.WebToken.ExpireTime, cz)
now := time.Now() now := time.Now()
if (expiredTime.Unix() - now.Unix()) <= (10 * 60) { // 10min if (expiredTime.Unix() - now.Unix()) <= (20 * 60) { // 20min
// need update refresh token // need update refresh token
logger.Verboseln("access token expired, get new from refresh token") logger.Verboseln("access token expired, get new from refresh token")
if wt, er := aliyunpan.GetAccessTokenFromRefreshToken(activeUser.RefreshToken); er == nil { if wt, er := aliyunpan.GetAccessTokenFromRefreshToken(activeUser.RefreshToken); er == nil {
@ -136,3 +136,28 @@ func RefreshTokenInNeed(activeUser *config.PanUser) bool {
} }
return false return false
} }
// ReloadRefreshTokenInNeed 从配置文件加载最新token
func ReloadRefreshTokenInNeed(activeUser *config.PanUser) bool {
if activeUser == nil {
return false
}
// refresh expired token
if activeUser.PanClient() != nil {
if len(activeUser.WebToken.RefreshToken) > 0 {
cz := time.FixedZone("CST", 8*3600) // 东8区
expiredTime, _ := time.ParseInLocation("2006-01-02 15:04:05", activeUser.WebToken.ExpireTime, cz)
now := time.Now()
if (expiredTime.Unix() - now.Unix()) <= (10 * 60) { // 10min
// reload refresh token from config file
u := config.Config.ActiveUser()
activeUser.WebToken = u.WebToken
activeUser.PanClient().UpdateToken(u.WebToken)
logger.Verboseln("reload access token from config file")
return true
}
}
}
return false
}

View File

@ -18,8 +18,10 @@ import (
"github.com/tickstep/aliyunpan/cmder" "github.com/tickstep/aliyunpan/cmder"
"github.com/tickstep/aliyunpan/internal/config" "github.com/tickstep/aliyunpan/internal/config"
"github.com/tickstep/aliyunpan/internal/webdav" "github.com/tickstep/aliyunpan/internal/webdav"
"github.com/tickstep/library-go/logger"
"github.com/urfave/cli" "github.com/urfave/cli"
"strings" "strings"
"time"
) )
func CmdWebdav() cli.Command { func CmdWebdav() cli.Command {
@ -69,6 +71,17 @@ aliyunpan webdav start -h
fmt.Println("未登录账号,请先登录") fmt.Println("未登录账号,请先登录")
return nil return nil
} }
activeUser := GetActiveUser()
go func() {
for {
time.Sleep(time.Duration(1) * time.Minute)
//time.Sleep(time.Duration(5) * time.Second)
if ReloadRefreshTokenInNeed(activeUser) {
logger.Verboseln("reload new access token for webdav")
}
}
}()
webdavServ := &webdav.WebdavConfig{ webdavServ := &webdav.WebdavConfig{
PanDriveId: "", PanDriveId: "",
PanUserId: "", PanUserId: "",
@ -87,8 +100,7 @@ aliyunpan webdav start -h
} }
// pan user // pan user
panUserId := config.Config.ActiveUID panUserId := activeUser.UserId
activeUser := GetActiveUser()
webdavServ.PanUserId = panUserId webdavServ.PanUserId = panUserId
webdavServ.PanUser = activeUser webdavServ.PanUser = activeUser

View File

@ -81,7 +81,7 @@ func checkLoginExpiredAndRelogin() {
// maybe expired, try to login // maybe expired, try to login
cmder.TryLogin() cmder.TryLogin()
} else { } else {
// refresh expired token // 刷新过期Token并保存到配置文件
command.RefreshTokenInNeed(activeUser) command.RefreshTokenInNeed(activeUser)
} }
cmder.SaveConfigFunc(nil) cmder.SaveConfigFunc(nil)
@ -96,6 +96,7 @@ func main() {
// check token expired task // check token expired task
go func() { go func() {
for { for {
// Token刷新进程不管是CLI命令行模式还是直接命令模式本刷新任务都会执行
time.Sleep(time.Duration(5) * time.Minute) time.Sleep(time.Duration(5) * time.Minute)
//time.Sleep(time.Duration(5) * time.Second) //time.Sleep(time.Duration(5) * time.Second)
checkLoginExpiredAndRelogin() checkLoginExpiredAndRelogin()