Skip to content

Commit 8084db0

Browse files
committed
Merge remote-tracking branch 'upstream/main'
# Conflicts: # drivers/pikpak/meta.go
2 parents b29f521 + ba716ae commit 8084db0

File tree

3 files changed

+90
-69
lines changed

3 files changed

+90
-69
lines changed

Diff for: drivers/pikpak/driver.go

+17-24
Original file line numberDiff line numberDiff line change
@@ -98,43 +98,36 @@ func (d *PikPak) Init(ctx context.Context) (err error) {
9898

9999
// 如果已经有RefreshToken,直接获取AccessToken
100100
if d.Addition.RefreshToken != "" {
101-
// 使用 oauth2 刷新令牌
102-
// 初始化 oauth2Token
103-
d.oauth2Token = oauth2.ReuseTokenSource(nil, utils.TokenSource(func() (*oauth2.Token, error) {
104-
return oauth2Config.TokenSource(ctx, &oauth2.Token{
105-
RefreshToken: d.Addition.RefreshToken,
106-
}).Token()
107-
}))
101+
if d.RefreshTokenMethod == "oauth2" {
102+
// 使用 oauth2 刷新令牌
103+
// 初始化 oauth2Token
104+
d.initializeOAuth2Token(ctx, oauth2Config, d.Addition.RefreshToken)
105+
if err := d.refreshTokenByOAuth2(); err != nil {
106+
return err
107+
}
108+
} else {
109+
if err := d.refreshToken(d.Addition.RefreshToken); err != nil {
110+
return err
111+
}
112+
}
113+
108114
} else {
109115
// 如果没有填写RefreshToken,尝试登录 获取 refreshToken
110116
if err := d.login(); err != nil {
111117
return err
112118
}
113-
d.oauth2Token = oauth2.ReuseTokenSource(nil, utils.TokenSource(func() (*oauth2.Token, error) {
114-
return oauth2Config.TokenSource(ctx, &oauth2.Token{
115-
RefreshToken: d.RefreshToken,
116-
}).Token()
117-
}))
118-
}
119+
if d.RefreshTokenMethod == "oauth2" {
120+
d.initializeOAuth2Token(ctx, oauth2Config, d.RefreshToken)
121+
}
119122

120-
token, err := d.oauth2Token.Token()
121-
if err != nil {
122-
return err
123123
}
124-
d.RefreshToken = token.RefreshToken
125-
d.AccessToken = token.AccessToken
126124

127125
// 获取CaptchaToken
128-
err = d.RefreshCaptchaTokenAtLogin(GetAction(http.MethodGet, "https://api-drive.mypikpak.com/drive/v1/files"), d.Username)
126+
err = d.RefreshCaptchaTokenAtLogin(GetAction(http.MethodGet, "https://api-drive.mypikpak.com/drive/v1/files"), d.Common.GetUserID())
129127
if err != nil {
130128
return err
131129
}
132130

133-
// 获取用户ID
134-
userID := token.Extra("sub").(string)
135-
if userID != "" {
136-
d.Common.SetUserID(userID)
137-
}
138131
// 更新UserAgent
139132
if d.Platform == "android" {
140133
d.Common.UserAgent = BuildCustomUserAgent(utils.GetMD5EncodeStr(d.Username+d.Password), AndroidClientID, AndroidPackageName, AndroidSdkVersion, AndroidClientVersion, AndroidPackageName, d.Common.UserID)

Diff for: drivers/pikpak/meta.go

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ type Addition struct {
1313
LinkIndex uint `json:"link_index" type:"number" default:"0"`
1414
Platform string `json:"platform" required:"true" type:"select" options:"android,web"`
1515
RefreshToken string `json:"refresh_token" required:"true" default:""`
16+
RefreshTokenMethod string `json:"refresh_token_method" required:"true" type:"select" options:"oauth2,http"`
1617
CaptchaToken string `json:"captcha_token" default:""`
1718
DeviceID string `json:"device_id" required:"false" default:""`
1819
DisableMediaLink bool `json:"disable_media_link" default:"true"`

Diff for: drivers/pikpak/util.go

+72-45
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package pikpak
22

33
import (
44
"bytes"
5+
"context"
56
"crypto/md5"
67
"crypto/sha1"
78
"encoding/hex"
@@ -13,6 +14,7 @@ import (
1314
"github.com/aliyun/aliyun-oss-go-sdk/oss"
1415
jsoniter "github.com/json-iterator/go"
1516
"github.com/pkg/errors"
17+
"golang.org/x/oauth2"
1618
"io"
1719
"net/http"
1820
"path/filepath"
@@ -112,39 +114,63 @@ func (d *PikPak) login() error {
112114
return nil
113115
}
114116

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+
}
148174

149175
func (d *PikPak) request(url string, method string, callback base.ReqCallback, resp interface{}) ([]byte, error) {
150176
req := base.RestyClient.R()
@@ -181,22 +207,19 @@ func (d *PikPak) request(url string, method string, callback base.ReqCallback, r
181207
return res.Body(), nil
182208
case 4122, 4121, 16:
183209
// 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+
}
191218
}
192-
d.AccessToken = t.AccessToken
193-
d.RefreshToken = t.RefreshToken
194-
d.Addition.RefreshToken = t.RefreshToken
195-
op.MustSaveDriverStorage(d)
196219

197220
return d.request(url, method, callback, resp)
198221
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 {
200223
return nil, err
201224
}
202225
return d.request(url, method, callback, resp)
@@ -349,6 +372,10 @@ func (c *Common) GetDeviceID() string {
349372
return c.DeviceID
350373
}
351374

375+
func (c *Common) GetUserID() string {
376+
return c.UserID
377+
}
378+
352379
// RefreshCaptchaTokenAtLogin 刷新验证码token(登录后)
353380
func (d *PikPak) RefreshCaptchaTokenAtLogin(action, userID string) error {
354381
metas := map[string]string{

0 commit comments

Comments
 (0)