Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/drivers/189/login.go
1986 views
1
package _189
2
3
import (
4
"errors"
5
"strconv"
6
7
"github.com/alist-org/alist/v3/pkg/utils"
8
log "github.com/sirupsen/logrus"
9
)
10
11
type AppConf struct {
12
Data struct {
13
AccountType string `json:"accountType"`
14
AgreementCheck string `json:"agreementCheck"`
15
AppKey string `json:"appKey"`
16
ClientType int `json:"clientType"`
17
IsOauth2 bool `json:"isOauth2"`
18
LoginSort string `json:"loginSort"`
19
MailSuffix string `json:"mailSuffix"`
20
PageKey string `json:"pageKey"`
21
ParamId string `json:"paramId"`
22
RegReturnUrl string `json:"regReturnUrl"`
23
ReqId string `json:"reqId"`
24
ReturnUrl string `json:"returnUrl"`
25
ShowFeedback string `json:"showFeedback"`
26
ShowPwSaveName string `json:"showPwSaveName"`
27
ShowQrSaveName string `json:"showQrSaveName"`
28
ShowSmsSaveName string `json:"showSmsSaveName"`
29
Sso string `json:"sso"`
30
} `json:"data"`
31
Msg string `json:"msg"`
32
Result string `json:"result"`
33
}
34
35
type EncryptConf struct {
36
Result int `json:"result"`
37
Data struct {
38
UpSmsOn string `json:"upSmsOn"`
39
Pre string `json:"pre"`
40
PreDomain string `json:"preDomain"`
41
PubKey string `json:"pubKey"`
42
} `json:"data"`
43
}
44
45
func (d *Cloud189) newLogin() error {
46
url := "https://cloud.189.cn/api/portal/loginUrl.action?redirectURL=https%3A%2F%2Fcloud.189.cn%2Fmain.action"
47
res, err := d.client.R().Get(url)
48
if err != nil {
49
return err
50
}
51
// Is logged in
52
redirectURL := res.RawResponse.Request.URL
53
if redirectURL.String() == "https://cloud.189.cn/web/main" {
54
return nil
55
}
56
lt := redirectURL.Query().Get("lt")
57
reqId := redirectURL.Query().Get("reqId")
58
appId := redirectURL.Query().Get("appId")
59
headers := map[string]string{
60
"lt": lt,
61
"reqid": reqId,
62
"referer": redirectURL.String(),
63
"origin": "https://open.e.189.cn",
64
}
65
// get app Conf
66
var appConf AppConf
67
res, err = d.client.R().SetHeaders(headers).SetFormData(map[string]string{
68
"version": "2.0",
69
"appKey": appId,
70
}).SetResult(&appConf).Post("https://open.e.189.cn/api/logbox/oauth2/appConf.do")
71
if err != nil {
72
return err
73
}
74
log.Debugf("189 AppConf resp body: %s", res.String())
75
if appConf.Result != "0" {
76
return errors.New(appConf.Msg)
77
}
78
// get encrypt conf
79
var encryptConf EncryptConf
80
res, err = d.client.R().SetHeaders(headers).SetFormData(map[string]string{
81
"appId": appId,
82
}).Post("https://open.e.189.cn/api/logbox/config/encryptConf.do")
83
if err != nil {
84
return err
85
}
86
err = utils.Json.Unmarshal(res.Body(), &encryptConf)
87
if err != nil {
88
return err
89
}
90
log.Debugf("189 EncryptConf resp body: %s\n%+v", res.String(), encryptConf)
91
if encryptConf.Result != 0 {
92
return errors.New("get EncryptConf error:" + res.String())
93
}
94
// TODO: getUUID? needcaptcha
95
// login
96
loginData := map[string]string{
97
"version": "v2.0",
98
"apToken": "",
99
"appKey": appId,
100
"accountType": appConf.Data.AccountType,
101
"userName": encryptConf.Data.Pre + RsaEncode([]byte(d.Username), encryptConf.Data.PubKey, true),
102
"epd": encryptConf.Data.Pre + RsaEncode([]byte(d.Password), encryptConf.Data.PubKey, true),
103
"captchaType": "",
104
"validateCode": "",
105
"smsValidateCode": "",
106
"captchaToken": "",
107
"returnUrl": appConf.Data.ReturnUrl,
108
"mailSuffix": appConf.Data.MailSuffix,
109
"dynamicCheck": "FALSE",
110
"clientType": strconv.Itoa(appConf.Data.ClientType),
111
"cb_SaveName": "3",
112
"isOauth2": strconv.FormatBool(appConf.Data.IsOauth2),
113
"state": "",
114
"paramId": appConf.Data.ParamId,
115
}
116
res, err = d.client.R().SetHeaders(headers).SetFormData(loginData).Post("https://open.e.189.cn/api/logbox/oauth2/loginSubmit.do")
117
if err != nil {
118
return err
119
}
120
log.Debugf("189 login resp body: %s", res.String())
121
loginResult := utils.Json.Get(res.Body(), "result").ToInt()
122
if loginResult != 0 {
123
return errors.New(utils.Json.Get(res.Body(), "msg").ToString())
124
}
125
return nil
126
}
127
128