@@ -45,26 +45,29 @@ func (x *Thunder) Init(ctx context.Context) (err error) {
45
45
Common : & Common {
46
46
client : base .NewRestyClient (),
47
47
Algorithms : []string {
48
- "HPxr4BVygTQVtQkIMwQH33ywbgYG5l4JoR" ,
49
- "GzhNkZ8pOBsCY+7" ,
50
- "v+l0ImTpG7c7/" ,
51
- "e5ztohgVXNP" ,
52
- "t" ,
53
- "EbXUWyVVqQbQX39Mbjn2geok3/0WEkAVxeqhtx857++kjJiRheP8l77gO" ,
54
- "o7dvYgbRMOpHXxCs" ,
55
- "6MW8TD8DphmakaxCqVrfv7NReRRN7ck3KLnXBculD58MvxjFRqT+" ,
56
- "kmo0HxCKVfmxoZswLB4bVA/dwqbVAYghSb" ,
57
- "j" ,
58
- "4scKJNdd7F27Hv7tbt" ,
48
+ "9uJNVj/wLmdwKrJaVj/omlQ" ,
49
+ "Oz64Lp0GigmChHMf/6TNfxx7O9PyopcczMsnf" ,
50
+ "Eb+L7Ce+Ej48u" ,
51
+ "jKY0" ,
52
+ "ASr0zCl6v8W4aidjPK5KHd1Lq3t+vBFf41dqv5+fnOd" ,
53
+ "wQlozdg6r1qxh0eRmt3QgNXOvSZO6q/GXK" ,
54
+ "gmirk+ciAvIgA/cxUUCema47jr/YToixTT+Q6O" ,
55
+ "5IiCoM9B1/788ntB" ,
56
+ "P07JH0h6qoM6TSUAK2aL9T5s2QBVeY9JWvalf" ,
57
+ "+oK0AN" ,
59
58
},
60
- DeviceID : utils .GetMD5EncodeStr (x .Username + x .Password ),
59
+ DeviceID : func () string {
60
+ if len (x .DeviceID ) != 32 {
61
+ return utils .GetMD5EncodeStr (x .DeviceID )
62
+ }
63
+ return x .DeviceID
64
+ }(),
61
65
ClientID : "Xp6vsxz_7IYVw2BB" ,
62
66
ClientSecret : "Xp6vsy4tN9toTVdMSpomVdXpRmES" ,
63
- ClientVersion : "7.51 .0.8196 " ,
67
+ ClientVersion : "8.31 .0.9726 " ,
64
68
PackageName : "com.xunlei.downloadprovider" ,
65
- 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)" ,
69
+ UserAgent : "ANDROID-com.xunlei.downloadprovider/8.31 .0.9726 netWorkType/5G appid/40 deviceName/Xiaomi_M2004j7ac deviceModel/M2004J7AC OSVersion/12 protocolVersion/301 platformVersion/10 sdkVersion/512000 Oauth2Client/0.9 (Linux 4_14_186-perf-gddfs8vbb238b) (JAVA 0)" ,
66
70
DownloadUserAgent : "Dalvik/2.1.0 (Linux; U; Android 12; M2004J7AC Build/SP1A.210812.016)" ,
67
-
68
71
refreshCTokenCk : func (token string ) {
69
72
x .CaptchaToken = token
70
73
op .MustSaveDriverStorage (x )
@@ -80,6 +83,8 @@ func (x *Thunder) Init(ctx context.Context) (err error) {
80
83
x .GetStorage ().SetStatus (fmt .Sprintf ("%+v" , err .Error ()))
81
84
op .MustSaveDriverStorage (x )
82
85
}
86
+ // 清空 信任密钥
87
+ x .Addition .CreditKey = ""
83
88
}
84
89
x .SetTokenResp (token )
85
90
return err
@@ -93,6 +98,17 @@ func (x *Thunder) Init(ctx context.Context) (err error) {
93
98
x .SetCaptchaToken (ctoekn )
94
99
}
95
100
101
+ if x .Addition .CreditKey != "" {
102
+ x .SetCreditKey (x .Addition .CreditKey )
103
+ }
104
+
105
+ if x .Addition .DeviceID != "" {
106
+ x .Common .DeviceID = x .Addition .DeviceID
107
+ } else {
108
+ x .Addition .DeviceID = x .Common .DeviceID
109
+ op .MustSaveDriverStorage (x )
110
+ }
111
+
96
112
// 防止重复登录
97
113
identity := x .GetIdentity ()
98
114
if x .identity != identity || ! x .IsLogin () {
@@ -102,6 +118,8 @@ func (x *Thunder) Init(ctx context.Context) (err error) {
102
118
if err != nil {
103
119
return err
104
120
}
121
+ // 清空 信任密钥
122
+ x .Addition .CreditKey = ""
105
123
x .SetTokenResp (token )
106
124
}
107
125
return nil
@@ -161,6 +179,17 @@ func (x *ThunderExpert) Init(ctx context.Context) (err error) {
161
179
x .SetCaptchaToken (x .CaptchaToken )
162
180
}
163
181
182
+ if x .ExpertAddition .CreditKey != "" {
183
+ x .SetCreditKey (x .ExpertAddition .CreditKey )
184
+ }
185
+
186
+ if x .ExpertAddition .DeviceID != "" {
187
+ x .Common .DeviceID = x .ExpertAddition .DeviceID
188
+ } else {
189
+ x .ExpertAddition .DeviceID = x .Common .DeviceID
190
+ op .MustSaveDriverStorage (x )
191
+ }
192
+
164
193
// 签名方法
165
194
if x .SignType == "captcha_sign" {
166
195
x .Common .Timestamp = x .Timestamp
@@ -194,6 +223,8 @@ func (x *ThunderExpert) Init(ctx context.Context) (err error) {
194
223
if err != nil {
195
224
return err
196
225
}
226
+ // 清空 信任密钥
227
+ x .ExpertAddition .CreditKey = ""
197
228
x .SetTokenResp (token )
198
229
x .SetRefreshTokenFunc (func () error {
199
230
token , err := x .XunLeiCommon .RefreshToken (x .TokenResp .RefreshToken )
@@ -202,6 +233,8 @@ func (x *ThunderExpert) Init(ctx context.Context) (err error) {
202
233
if err != nil {
203
234
x .GetStorage ().SetStatus (fmt .Sprintf ("%+v" , err .Error ()))
204
235
}
236
+ // 清空 信任密钥
237
+ x .ExpertAddition .CreditKey = ""
205
238
}
206
239
x .SetTokenResp (token )
207
240
op .MustSaveDriverStorage (x )
@@ -233,7 +266,8 @@ func (x *ThunderExpert) SetTokenResp(token *TokenResp) {
233
266
234
267
type XunLeiCommon struct {
235
268
* Common
236
- * TokenResp // 登录信息
269
+ * TokenResp // 登录信息
270
+ * CoreLoginResp // core登录信息
237
271
238
272
refreshTokenFunc func () error
239
273
}
@@ -433,6 +467,10 @@ func (xc *XunLeiCommon) SetTokenResp(tr *TokenResp) {
433
467
xc .TokenResp = tr
434
468
}
435
469
470
+ func (xc * XunLeiCommon ) SetCoreTokenResp (tr * CoreLoginResp ) {
471
+ xc .CoreLoginResp = tr
472
+ }
473
+
436
474
// 携带Authorization和CaptchaToken的请求
437
475
func (xc * XunLeiCommon ) Request (url string , method string , callback base.ReqCallback , resp interface {}) ([]byte , error ) {
438
476
data , err := xc .Common .Request (url , method , func (req * resty.Request ) {
@@ -461,7 +499,7 @@ func (xc *XunLeiCommon) Request(url string, method string, callback base.ReqCall
461
499
}
462
500
return nil , err
463
501
case 9 : // 验证码token过期
464
- if err = xc .RefreshCaptchaTokenAtLogin (GetAction (method , url ), xc .UserID ); err != nil {
502
+ if err = xc .RefreshCaptchaTokenAtLogin (GetAction (method , url ), xc .TokenResp . UserID ); err != nil {
465
503
return nil , err
466
504
}
467
505
default :
@@ -493,20 +531,25 @@ func (xc *XunLeiCommon) RefreshToken(refreshToken string) (*TokenResp, error) {
493
531
494
532
// 登录
495
533
func (xc * XunLeiCommon ) Login (username , password string ) (* TokenResp , error ) {
496
- url := XLUSER_API_URL + "/auth/signin"
497
- err := xc .RefreshCaptchaTokenInLogin ( GetAction ( http . MethodPost , url ), username )
534
+ //v3 login拿到 sessionID
535
+ sessionID , err := xc .CoreLogin ( username , password )
498
536
if err != nil {
499
537
return nil , err
500
538
}
539
+ //v1 login拿到令牌
540
+ url := XLUSER_API_URL + "/auth/signin/token"
541
+ if err = xc .RefreshCaptchaTokenInLogin (GetAction (http .MethodPost , url ), username ); err != nil {
542
+ return nil , err
543
+ }
501
544
502
545
var resp TokenResp
503
546
_ , err = xc .Common .Request (url , http .MethodPost , func (req * resty.Request ) {
547
+ req .SetPathParam ("client_id" , xc .ClientID )
504
548
req .SetBody (& SignInRequest {
505
- CaptchaToken : xc .GetCaptchaToken (),
506
549
ClientID : xc .ClientID ,
507
550
ClientSecret : xc .ClientSecret ,
508
- Username : username ,
509
- Password : password ,
551
+ Provider : SignProvider ,
552
+ SigninToken : sessionID ,
510
553
})
511
554
}, & resp )
512
555
if err != nil {
@@ -582,3 +625,48 @@ func (xc *XunLeiCommon) DeleteOfflineTasks(ctx context.Context, taskIDs []string
582
625
}
583
626
return nil
584
627
}
628
+
629
+ func (xc * XunLeiCommon ) CoreLogin (username string , password string ) (sessionID string , err error ) {
630
+ url := XLUSER_API_BASE_URL + "/xluser.core.login/v3/login"
631
+ var resp CoreLoginResp
632
+ res , err := xc .Common .Request (url , http .MethodPost , func (req * resty.Request ) {
633
+ req .SetHeader ("User-Agent" , "android-ok-http-client/xl-acc-sdk/version-5.0.12.512000" )
634
+ req .SetBody (& CoreLoginRequest {
635
+ ProtocolVersion : "301" ,
636
+ SequenceNo : "1000012" ,
637
+ PlatformVersion : "10" ,
638
+ IsCompressed : "0" ,
639
+ Appid : APPID ,
640
+ ClientVersion : "8.31.0.9726" ,
641
+ PeerID : "00000000000000000000000000000000" ,
642
+ AppName : "ANDROID-com.xunlei.downloadprovider" ,
643
+ SdkVersion : "512000" ,
644
+ Devicesign : generateDeviceSign (xc .DeviceID , xc .PackageName ),
645
+ NetWorkType : "WIFI" ,
646
+ ProviderName : "NONE" ,
647
+ DeviceModel : "M2004J7AC" ,
648
+ DeviceName : "Xiaomi_M2004j7ac" ,
649
+ OSVersion : "12" ,
650
+ Creditkey : xc .GetCreditKey (),
651
+ Hl : "zh-CN" ,
652
+ UserName : username ,
653
+ PassWord : password ,
654
+ VerifyKey : "" ,
655
+ VerifyCode : "" ,
656
+ IsMd5Pwd : "0" ,
657
+ })
658
+ }, nil )
659
+ if err != nil {
660
+ return "" , err
661
+ }
662
+
663
+ if err = utils .Json .Unmarshal (res , & resp ); err != nil {
664
+ return "" , err
665
+ }
666
+
667
+ xc .SetCoreTokenResp (& resp )
668
+
669
+ sessionID = resp .SessionID
670
+
671
+ return sessionID , nil
672
+ }
0 commit comments