@@ -2,6 +2,7 @@ package pikpak
2
2
3
3
import (
4
4
"bytes"
5
+ "context"
5
6
"crypto/md5"
6
7
"crypto/sha1"
7
8
"encoding/hex"
@@ -13,6 +14,7 @@ import (
13
14
"github.com/aliyun/aliyun-oss-go-sdk/oss"
14
15
jsoniter "github.com/json-iterator/go"
15
16
"github.com/pkg/errors"
17
+ "golang.org/x/oauth2"
16
18
"io"
17
19
"net/http"
18
20
"path/filepath"
@@ -112,39 +114,63 @@ func (d *PikPak) login() error {
112
114
return nil
113
115
}
114
116
115
- //func (d *PikPak) refreshToken() error {
116
- // url := "https://user.mypikpak.com/v1/auth/token"
117
- // var e ErrResp
118
- // res, err := base.RestyClient.SetRetryCount(1).R().SetError(&e).
119
- // SetHeader("user-agent", "").SetBody(base.Json{
120
- // "client_id": ClientID,
121
- // "client_secret": ClientSecret,
122
- // "grant_type": "refresh_token",
123
- // "refresh_token": d.RefreshToken,
124
- // }).SetQueryParam("client_id", ClientID).Post(url)
125
- // if err != nil {
126
- // d.Status = err.Error()
127
- // op.MustSaveDriverStorage(d)
128
- // return err
129
- // }
130
- // if e.ErrorCode != 0 {
131
- // if e.ErrorCode == 4126 {
132
- // // refresh_token invalid, re-login
133
- // return d.login()
134
- // }
135
- // d.Status = e.Error()
136
- // op.MustSaveDriverStorage(d)
137
- // return errors.New(e.Error())
138
- // }
139
- // data := res.Body()
140
- // d.Status = "work"
141
- // d.RefreshToken = jsoniter.Get(data, "refresh_token").ToString()
142
- // d.AccessToken = jsoniter.Get(data, "access_token").ToString()
143
- // d.Common.SetUserID(jsoniter.Get(data, "sub").ToString())
144
- // d.Addition.RefreshToken = d.RefreshToken
145
- // op.MustSaveDriverStorage(d)
146
- // return nil
147
- //}
117
+ func (d * PikPak ) refreshToken (refreshToken string ) error {
118
+ url := "https://user.mypikpak.com/v1/auth/token"
119
+ var e ErrResp
120
+ res , err := base .RestyClient .SetRetryCount (1 ).R ().SetError (& e ).
121
+ SetHeader ("user-agent" , "" ).SetBody (base.Json {
122
+ "client_id" : d .ClientID ,
123
+ "client_secret" : d .ClientSecret ,
124
+ "grant_type" : "refresh_token" ,
125
+ "refresh_token" : refreshToken ,
126
+ }).SetQueryParam ("client_id" , d .ClientID ).Post (url )
127
+ if err != nil {
128
+ d .Status = err .Error ()
129
+ op .MustSaveDriverStorage (d )
130
+ return err
131
+ }
132
+ if e .ErrorCode != 0 {
133
+ if e .ErrorCode == 4126 {
134
+ // refresh_token invalid, re-login
135
+ return d .login ()
136
+ }
137
+ d .Status = e .Error ()
138
+ op .MustSaveDriverStorage (d )
139
+ return errors .New (e .Error ())
140
+ }
141
+ data := res .Body ()
142
+ d .Status = "work"
143
+ d .RefreshToken = jsoniter .Get (data , "refresh_token" ).ToString ()
144
+ d .AccessToken = jsoniter .Get (data , "access_token" ).ToString ()
145
+ d .Common .SetUserID (jsoniter .Get (data , "sub" ).ToString ())
146
+ d .Addition .RefreshToken = d .RefreshToken
147
+ op .MustSaveDriverStorage (d )
148
+ return nil
149
+ }
150
+
151
+ func (d * PikPak ) initializeOAuth2Token (ctx context.Context , oauth2Config * oauth2.Config , refreshToken string ) {
152
+ d .oauth2Token = oauth2 .ReuseTokenSource (nil , utils .TokenSource (func () (* oauth2.Token , error ) {
153
+ return oauth2Config .TokenSource (ctx , & oauth2.Token {
154
+ RefreshToken : refreshToken ,
155
+ }).Token ()
156
+ }))
157
+ }
158
+
159
+ func (d * PikPak ) refreshTokenByOAuth2 () error {
160
+ token , err := d .oauth2Token .Token ()
161
+ if err != nil {
162
+ return err
163
+ }
164
+ d .Status = "work"
165
+ d .RefreshToken = token .RefreshToken
166
+ d .AccessToken = token .AccessToken
167
+ // 获取用户ID
168
+ userID := token .Extra ("sub" ).(string )
169
+ d .Common .SetUserID (userID )
170
+ d .Addition .RefreshToken = d .RefreshToken
171
+ op .MustSaveDriverStorage (d )
172
+ return nil
173
+ }
148
174
149
175
func (d * PikPak ) request (url string , method string , callback base.ReqCallback , resp interface {}) ([]byte , error ) {
150
176
req := base .RestyClient .R ()
@@ -181,22 +207,19 @@ func (d *PikPak) request(url string, method string, callback base.ReqCallback, r
181
207
return res .Body (), nil
182
208
case 4122 , 4121 , 16 :
183
209
// access_token 过期
184
-
185
- //if err1 := d.refreshToken(); err1 != nil {
186
- // return nil, err1
187
- //}
188
- t , err := d .oauth2Token .Token ()
189
- if err != nil {
190
- return nil , err
210
+ if d .RefreshTokenMethod == "oauth2" {
211
+ if err1 := d .refreshTokenByOAuth2 (); err1 != nil {
212
+ return nil , err1
213
+ }
214
+ } else {
215
+ if err1 := d .refreshToken (d .RefreshToken ); err1 != nil {
216
+ return nil , err1
217
+ }
191
218
}
192
- d .AccessToken = t .AccessToken
193
- d .RefreshToken = t .RefreshToken
194
- d .Addition .RefreshToken = t .RefreshToken
195
- op .MustSaveDriverStorage (d )
196
219
197
220
return d .request (url , method , callback , resp )
198
221
case 9 : // 验证码token过期
199
- if err = d .RefreshCaptchaTokenAtLogin (GetAction (method , url ), d .Common . UserID ); err != nil {
222
+ if err = d .RefreshCaptchaTokenAtLogin (GetAction (method , url ), d .GetUserID () ); err != nil {
200
223
return nil , err
201
224
}
202
225
return d .request (url , method , callback , resp )
@@ -349,6 +372,10 @@ func (c *Common) GetDeviceID() string {
349
372
return c .DeviceID
350
373
}
351
374
375
+ func (c * Common ) GetUserID () string {
376
+ return c .UserID
377
+ }
378
+
352
379
// RefreshCaptchaTokenAtLogin 刷新验证码token(登录后)
353
380
func (d * PikPak ) RefreshCaptchaTokenAtLogin (action , userID string ) error {
354
381
metas := map [string ]string {
0 commit comments