-
-
Notifications
You must be signed in to change notification settings - Fork 5.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(189): adapt new login method (close #4378)
- Loading branch information
Showing
4 changed files
with
242 additions
and
117 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
package _189 | ||
|
||
import ( | ||
"errors" | ||
"strconv" | ||
|
||
"github.com/alist-org/alist/v3/pkg/utils" | ||
log "github.com/sirupsen/logrus" | ||
) | ||
|
||
type AppConf struct { | ||
Data struct { | ||
AccountType string `json:"accountType"` | ||
AgreementCheck string `json:"agreementCheck"` | ||
AppKey string `json:"appKey"` | ||
ClientType int `json:"clientType"` | ||
IsOauth2 bool `json:"isOauth2"` | ||
LoginSort string `json:"loginSort"` | ||
MailSuffix string `json:"mailSuffix"` | ||
PageKey string `json:"pageKey"` | ||
ParamId string `json:"paramId"` | ||
RegReturnUrl string `json:"regReturnUrl"` | ||
ReqId string `json:"reqId"` | ||
ReturnUrl string `json:"returnUrl"` | ||
ShowFeedback string `json:"showFeedback"` | ||
ShowPwSaveName string `json:"showPwSaveName"` | ||
ShowQrSaveName string `json:"showQrSaveName"` | ||
ShowSmsSaveName string `json:"showSmsSaveName"` | ||
Sso string `json:"sso"` | ||
} `json:"data"` | ||
Msg string `json:"msg"` | ||
Result string `json:"result"` | ||
} | ||
|
||
type EncryptConf struct { | ||
Result int `json:"result"` | ||
Data struct { | ||
UpSmsOn string `json:"upSmsOn"` | ||
Pre string `json:"pre"` | ||
PreDomain string `json:"preDomain"` | ||
PubKey string `json:"pubKey"` | ||
} `json:"data"` | ||
} | ||
|
||
func (d *Cloud189) newLogin() error { | ||
url := "https://cloud.189.cn/api/portal/loginUrl.action?redirectURL=https%3A%2F%2Fcloud.189.cn%2Fmain.action" | ||
res, err := d.client.R().Get(url) | ||
if err != nil { | ||
return err | ||
} | ||
// Is logged in | ||
redirectURL := res.RawResponse.Request.URL | ||
if redirectURL.String() == "https://cloud.189.cn/web/main" { | ||
return nil | ||
} | ||
lt := redirectURL.Query().Get("lt") | ||
reqId := redirectURL.Query().Get("reqId") | ||
appId := redirectURL.Query().Get("appId") | ||
headers := map[string]string{ | ||
"lt": lt, | ||
"reqid": reqId, | ||
"referer": redirectURL.String(), | ||
"origin": "https://open.e.189.cn", | ||
} | ||
// get app Conf | ||
var appConf AppConf | ||
res, err = d.client.R().SetHeaders(headers).SetFormData(map[string]string{ | ||
"version": "2.0", | ||
"appKey": appId, | ||
}).SetResult(&appConf).Post("https://open.e.189.cn/api/logbox/oauth2/appConf.do") | ||
if err != nil { | ||
return err | ||
} | ||
log.Debugf("189 AppConf resp body: %s", res.String()) | ||
if appConf.Result != "0" { | ||
return errors.New(appConf.Msg) | ||
} | ||
// get encrypt conf | ||
var encryptConf EncryptConf | ||
res, err = d.client.R().SetHeaders(headers).SetFormData(map[string]string{ | ||
"appId": appId, | ||
}).Post("https://open.e.189.cn/api/logbox/config/encryptConf.do") | ||
if err != nil { | ||
return err | ||
} | ||
err = utils.Json.Unmarshal(res.Body(), &encryptConf) | ||
if err != nil { | ||
return err | ||
} | ||
log.Debugf("189 EncryptConf resp body: %s\n%+v", res.String(), encryptConf) | ||
if encryptConf.Result != 0 { | ||
return errors.New("get EncryptConf error:" + res.String()) | ||
} | ||
// TODO: getUUID? needcaptcha | ||
// login | ||
loginData := map[string]string{ | ||
"version": "v2.0", | ||
"apToken": "", | ||
"appKey": appId, | ||
"accountType": appConf.Data.AccountType, | ||
"userName": encryptConf.Data.Pre + RsaEncode([]byte(d.Username), encryptConf.Data.PubKey, true), | ||
"epd": encryptConf.Data.Pre + RsaEncode([]byte(d.Password), encryptConf.Data.PubKey, true), | ||
"captchaType": "", | ||
"validateCode": "", | ||
"smsValidateCode": "", | ||
"captchaToken": "", | ||
"returnUrl": appConf.Data.ReturnUrl, | ||
"mailSuffix": appConf.Data.MailSuffix, | ||
"dynamicCheck": "FALSE", | ||
"clientType": strconv.Itoa(appConf.Data.ClientType), | ||
"cb_SaveName": "3", | ||
"isOauth2": strconv.FormatBool(appConf.Data.IsOauth2), | ||
"state": "", | ||
"paramId": appConf.Data.ParamId, | ||
} | ||
res, err = d.client.R().SetHeaders(headers).SetFormData(loginData).Post("https://open.e.189.cn/api/logbox/oauth2/loginSubmit.do") | ||
if err != nil { | ||
return err | ||
} | ||
log.Debugf("189 login resp body: %s", res.String()) | ||
loginResult := utils.Json.Get(res.Body(), "result").ToInt() | ||
if loginResult != 0 { | ||
return errors.New(utils.Json.Get(res.Body(), "msg").ToString()) | ||
} | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.