diff --git a/drivers/189pc/meta.go b/drivers/189pc/meta.go
index 29bc1311..06861d4c 100644
--- a/drivers/189pc/meta.go
+++ b/drivers/189pc/meta.go
@@ -15,6 +15,7 @@ type Addition struct {
Type string `json:"type" type:"select" options:"personal,family" default:"personal"`
FamilyID string `json:"family_id"`
RapidUpload bool `json:"rapid_upload"`
+ NonuseOrc bool `json:"nonuse_orc"`
}
var config = driver.Config{
diff --git a/drivers/189pc/utils.go b/drivers/189pc/utils.go
index 03144a52..a4cba6bd 100644
--- a/drivers/189pc/utils.go
+++ b/drivers/189pc/utils.go
@@ -186,20 +186,19 @@ func (y *Yun189PC) getFiles(ctx context.Context, fileId string) ([]model.Obj, er
func (y *Yun189PC) login() (err error) {
// 初始化登陆所需参数
- if y.loginParam == nil {
+ if y.loginParam == nil || !y.NonuseOrc {
if err = y.initLoginParam(); err != nil {
// 验证码也通过错误返回
return err
}
}
-
defer func() {
// 销毁验证码
y.VCode = ""
// 销毁登陆参数
y.loginParam = nil
// 遇到错误,重新加载登陆参数
- if err != nil {
+ if err != nil && y.NonuseOrc {
if err1 := y.initLoginParam(); err1 != nil {
err = fmt.Errorf("err1: %s \nerr2: %s", err, err1)
}
@@ -303,44 +302,34 @@ func (y *Yun189PC) initLoginParam() error {
param.jRsaKey = fmt.Sprintf("-----BEGIN PUBLIC KEY-----\n%s\n-----END PUBLIC KEY-----", encryptConf.Data.PubKey)
param.RsaUsername = encryptConf.Data.Pre + RsaEncrypt(param.jRsaKey, y.Username)
param.RsaPassword = encryptConf.Data.Pre + RsaEncrypt(param.jRsaKey, y.Password)
-
- // 判断是否需要验证码
- res, err = y.client.R().
- SetFormData(map[string]string{
- "appKey": APP_ID,
- "accountType": ACCOUNT_TYPE,
- "userName": param.RsaUsername,
- }).
- Post(AUTH_URL + "/api/logbox/oauth2/needcaptcha.do")
- if err != nil {
- return err
- }
-
y.loginParam = ¶m
- if res.String() != "0" {
- imgRes, err := y.client.R().
- SetQueryParams(map[string]string{
- "token": param.CaptchaToken,
- "REQID": param.ReqId,
- "rnd": fmt.Sprint(timestamp()),
- }).
- Get(AUTH_URL + "/api/logbox/oauth2/picCaptcha.do")
- if err != nil {
- return fmt.Errorf("failed to obtain verification code")
+
+ imgRes, err := y.client.R().
+ SetQueryParams(map[string]string{
+ "token": param.CaptchaToken,
+ "REQID": param.ReqId,
+ "rnd": fmt.Sprint(timestamp()),
+ }).
+ Get(AUTH_URL + "/api/logbox/oauth2/picCaptcha.do")
+ if err != nil {
+ return fmt.Errorf("failed to obtain verification code")
+ }
+ if imgRes.Size() > 0 {
+ if setting.GetStr(conf.OcrApi) != "" && !y.NonuseOrc {
+ vRes, err := base.RestyClient.R().
+ SetMultipartField("image", "validateCode.png", "image/png", bytes.NewReader(imgRes.Body())).
+ Post(setting.GetStr(conf.OcrApi))
+ if err != nil {
+ return err
+ }
+ if jsoniter.Get(vRes.Body(), "status").ToInt() == 200 {
+ y.VCode = jsoniter.Get(vRes.Body(), "result").ToString()
+ return nil
+ }
}
- // 尝试使用ocr
- vRes, err := base.RestyClient.R().
- SetMultipartField("image", "validateCode.png", "image/png", bytes.NewReader(imgRes.Body())).
- Post(setting.GetStr(conf.OcrApi))
- if err == nil && jsoniter.Get(vRes.Body(), "status").ToInt() == 200 {
- y.VCode = jsoniter.Get(vRes.Body(), "result").ToString()
- }
-
- // ocr无法处理,返回验证码图片给前端
- if len(y.VCode) != 4 {
- return fmt.Errorf("need validate code: data:image/png;base64,%s", base64.StdEncoding.EncodeToString(res.Body()))
- }
+ // 返回验证码图片给前端
+ return fmt.Errorf(`need img validate code:
`, base64.StdEncoding.EncodeToString(imgRes.Body()))
}
return nil
}
diff --git a/drivers/thunder/driver.go b/drivers/thunder/driver.go
index f75eb991..b868f994 100644
--- a/drivers/thunder/driver.go
+++ b/drivers/thunder/driver.go
@@ -59,13 +59,18 @@ func (x *Thunder) Init(ctx context.Context, storage model.Storage) (err error) {
"j",
"4scKJNdd7F27Hv7tbt",
},
- DeviceID: "9aa5c268e7bcfc197a9ad88e2fb330e5",
+ DeviceID: utils.GetMD5Encode(x.Username + x.Password),
ClientID: "Xp6vsxz_7IYVw2BB",
ClientSecret: "Xp6vsy4tN9toTVdMSpomVdXpRmES",
ClientVersion: "7.51.0.8196",
PackageName: "com.xunlei.downloadprovider",
UserAgent: "ANDROID-com.xunlei.downloadprovider/7.51.0.8196 netWorkType/5G appid/40 deviceName/Xiaomi_M2004j7ac deviceModel/M2004J7AC OSVersion/12 protocolVersion/301 platformVersion/10 sdkVersion/220200 Oauth2Client/0.9 (Linux 4_14_186-perf-gddfs8vbb238b) (JAVA 0)",
DownloadUserAgent: "Dalvik/2.1.0 (Linux; U; Android 12; M2004J7AC Build/SP1A.210812.016)",
+
+ refreshCTokenCk: func(token string) {
+ x.CaptchaToken = token
+ op.MustSaveDriverStorage(x)
+ },
},
refreshTokenFunc: func() error {
// 通过RefreshToken刷新
@@ -88,7 +93,6 @@ func (x *Thunder) Init(ctx context.Context, storage model.Storage) (err error) {
ctoekn := strings.TrimSpace(x.CaptchaToken)
if ctoekn != "" {
x.SetCaptchaToken(ctoekn)
- x.CaptchaToken = ""
}
// 防止重复登录
@@ -139,7 +143,7 @@ func (x *ThunderExpert) Init(ctx context.Context, storage model.Storage) (err er
Common: &Common{
client: base.NewRestyClient(),
- DeviceID: x.DeviceID,
+ DeviceID: utils.GetMD5Encode(x.DeviceID),
ClientID: x.ClientID,
ClientSecret: x.ClientSecret,
ClientVersion: x.ClientVersion,
@@ -147,12 +151,16 @@ func (x *ThunderExpert) Init(ctx context.Context, storage model.Storage) (err er
UserAgent: x.UserAgent,
DownloadUserAgent: x.DownloadUserAgent,
UseVideoUrl: x.UseVideoUrl,
+
+ refreshCTokenCk: func(token string) {
+ x.CaptchaToken = token
+ op.MustSaveDriverStorage(x)
+ },
},
}
if x.CaptchaToken != "" {
x.SetCaptchaToken(x.CaptchaToken)
- x.CaptchaToken = ""
}
// 签名方法
@@ -206,7 +214,6 @@ func (x *ThunderExpert) Init(ctx context.Context, storage model.Storage) (err er
// 仅修改验证码token
if x.CaptchaToken != "" {
x.SetCaptchaToken(x.CaptchaToken)
- x.CaptchaToken = ""
}
x.XunLeiCommon.UserAgent = x.UserAgent
x.XunLeiCommon.DownloadUserAgent = x.DownloadUserAgent
diff --git a/drivers/thunder/util.go b/drivers/thunder/util.go
index 3c586b99..5c8ed3b8 100644
--- a/drivers/thunder/util.go
+++ b/drivers/thunder/util.go
@@ -53,6 +53,9 @@ type Common struct {
UserAgent string
DownloadUserAgent string
UseVideoUrl bool
+
+ // 验证码token刷新成功回调
+ refreshCTokenCk func(token string)
}
func (c *Common) SetCaptchaToken(captchaToken string) {
@@ -125,13 +128,16 @@ func (c *Common) refreshCaptchaToken(action string, metas map[string]string) err
}
if resp.Url != "" {
- return fmt.Errorf("need verify:%s", resp.Url)
+ return fmt.Errorf(`need verify: Click Here`, resp.Url)
}
if resp.CaptchaToken == "" {
return fmt.Errorf("empty captchaToken")
}
+ if c.refreshCTokenCk != nil {
+ c.refreshCTokenCk(resp.CaptchaToken)
+ }
c.SetCaptchaToken(resp.CaptchaToken)
return nil
}