@@ -13,7 +13,6 @@ import (
1313 "time"
1414
1515 "github.com/OpenListTeam/OpenList/v4/drivers/base"
16- "github.com/OpenListTeam/OpenList/v4/internal/op"
1716 "github.com/go-resty/resty/v2"
1817 "github.com/google/uuid"
1918 log "github.com/sirupsen/logrus"
@@ -22,8 +21,6 @@ import (
2221var ( // 不同情况下获取的AccessTokenQPS限制不同 如下模块化易于拓展
2322 Api = "https://open-api.123pan.com"
2423
25- AccessToken = InitApiInfo (Api + "/api/v1/access_token" , 1 )
26- RefreshToken = InitApiInfo (Api + "/api/v1/oauth2/access_token" , 1 )
2724 UserInfo = InitApiInfo (Api + "/api/v1/user/info" , 1 )
2825 FileList = InitApiInfo (Api + "/api/v2/file/list" , 3 )
2926 DownloadInfo = InitApiInfo (Api + "/api/v1/file/download_info" , 5 )
@@ -40,11 +37,14 @@ var ( // 不同情况下获取的AccessTokenQPS限制不同 如下模块化易
4037)
4138
4239func (d * Open123 ) Request (apiInfo * ApiInfo , method string , callback base.ReqCallback , resp interface {}) ([]byte , error ) {
43- retryToken := true
4440 for {
41+ token , err := d .getAccessToken (false )
42+ if err != nil {
43+ return nil , err
44+ }
4545 req := base .RestyClient .R ()
4646 req .SetHeaders (map [string ]string {
47- "authorization" : "Bearer " + d . AccessToken ,
47+ "authorization" : "Bearer " + token ,
4848 "platform" : "open_platform" ,
4949 "Content-Type" : "application/json" ,
5050 })
@@ -74,9 +74,9 @@ func (d *Open123) Request(apiInfo *ApiInfo, method string, callback base.ReqCall
7474
7575 if baseResp .Code == 0 {
7676 return body , nil
77- } else if baseResp .Code == 401 && retryToken {
78- retryToken = false
79- if err := d .flushAccessToken ( ); err != nil {
77+ } else if baseResp .Code == 401 {
78+ // 强制刷新Token, 有小概率会 race condition 导致多次刷新Token,但不影响正确运行
79+ if _ , err := d .getAccessToken ( true ); err != nil {
8080 return nil , err
8181 }
8282 } else if baseResp .Code == 429 {
@@ -88,42 +88,6 @@ func (d *Open123) Request(apiInfo *ApiInfo, method string, callback base.ReqCall
8888 }
8989}
9090
91- func (d * Open123 ) flushAccessToken () error {
92- if d .ClientID != "" {
93- if d .RefreshToken != "" {
94- var resp RefreshTokenResp
95- _ , err := d .Request (RefreshToken , http .MethodPost , func (req * resty.Request ) {
96- req .SetQueryParam ("client_id" , d .ClientID )
97- if d .ClientSecret != "" {
98- req .SetQueryParam ("client_secret" , d .ClientSecret )
99- }
100- req .SetQueryParam ("grant_type" , "refresh_token" )
101- req .SetQueryParam ("refresh_token" , d .RefreshToken )
102- }, & resp )
103- if err != nil {
104- return err
105- }
106- d .AccessToken = resp .AccessToken
107- d .RefreshToken = resp .RefreshToken
108- op .MustSaveDriverStorage (d )
109- } else if d .ClientSecret != "" {
110- var resp AccessTokenResp
111- _ , err := d .Request (AccessToken , http .MethodPost , func (req * resty.Request ) {
112- req .SetBody (base.Json {
113- "clientID" : d .ClientID ,
114- "clientSecret" : d .ClientSecret ,
115- })
116- }, & resp )
117- if err != nil {
118- return err
119- }
120- d .AccessToken = resp .Data .AccessToken
121- op .MustSaveDriverStorage (d )
122- }
123- }
124- return nil
125- }
126-
12791func (d * Open123 ) SignURL (originURL , privateKey string , uid uint64 , validDuration time.Duration ) (newURL string , err error ) {
12892 // 生成Unix时间戳
12993 ts := time .Now ().Add (validDuration ).Unix ()
0 commit comments