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区
|
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
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
3
main.go
3
main.go
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user