From 0e99e7e9b95a972ad3d472df7b9473e463573f40 Mon Sep 17 00:00:00 2001 From: foxxorcat Date: Mon, 17 Oct 2022 00:54:39 +0800 Subject: [PATCH] fix(thunder,189pc): some known problems --- drivers/189pc/meta.go | 1 + drivers/189pc/utils.go | 65 ++++++++++++++++----------------------- drivers/thunder/driver.go | 17 +++++++--- drivers/thunder/util.go | 8 ++++- 4 files changed, 47 insertions(+), 44 deletions(-) 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 }