mirror of
https://github.com/tickstep/aliyunpan.git
synced 2025-02-02 21:27:15 +08:00
add token refresh for webdav
This commit is contained in:
parent
93b55014d0
commit
4c5f217257
@ -122,7 +122,7 @@ func RefreshTokenInNeed(activeUser *config.PanUser) bool {
|
||||
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
|
||||
if (expiredTime.Unix() - now.Unix()) <= (20 * 60) { // 20min
|
||||
// need update refresh token
|
||||
logger.Verboseln("access token expired, get new from refresh token")
|
||||
if wt, er := aliyunpan.GetAccessTokenFromRefreshToken(activeUser.RefreshToken); er == nil {
|
||||
@ -136,3 +136,28 @@ func RefreshTokenInNeed(activeUser *config.PanUser) bool {
|
||||
}
|
||||
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
|
||||
}
|
||||
|
@ -18,8 +18,10 @@ import (
|
||||
"github.com/tickstep/aliyunpan/cmder"
|
||||
"github.com/tickstep/aliyunpan/internal/config"
|
||||
"github.com/tickstep/aliyunpan/internal/webdav"
|
||||
"github.com/tickstep/library-go/logger"
|
||||
"github.com/urfave/cli"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func CmdWebdav() cli.Command {
|
||||
@ -69,6 +71,17 @@ aliyunpan webdav start -h
|
||||
fmt.Println("未登录账号,请先登录")
|
||||
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{
|
||||
PanDriveId: "",
|
||||
PanUserId: "",
|
||||
@ -87,8 +100,7 @@ aliyunpan webdav start -h
|
||||
}
|
||||
|
||||
// pan user
|
||||
panUserId := config.Config.ActiveUID
|
||||
activeUser := GetActiveUser()
|
||||
panUserId := activeUser.UserId
|
||||
webdavServ.PanUserId = panUserId
|
||||
webdavServ.PanUser = activeUser
|
||||
|
||||
|
3
main.go
3
main.go
@ -81,7 +81,7 @@ func checkLoginExpiredAndRelogin() {
|
||||
// maybe expired, try to login
|
||||
cmder.TryLogin()
|
||||
} else {
|
||||
// refresh expired token
|
||||
// 刷新过期Token并保存到配置文件
|
||||
command.RefreshTokenInNeed(activeUser)
|
||||
}
|
||||
cmder.SaveConfigFunc(nil)
|
||||
@ -96,6 +96,7 @@ func main() {
|
||||
// check token expired task
|
||||
go func() {
|
||||
for {
|
||||
// Token刷新进程,不管是CLI命令行模式,还是直接命令模式,本刷新任务都会执行
|
||||
time.Sleep(time.Duration(5) * time.Minute)
|
||||
//time.Sleep(time.Duration(5) * time.Second)
|
||||
checkLoginExpiredAndRelogin()
|
||||
|
Loading…
Reference in New Issue
Block a user