| package kodbox | |
| import ( | |
| "fmt" | |
| "github.com/alist-org/alist/v3/drivers/base" | |
| "github.com/alist-org/alist/v3/pkg/utils" | |
| "github.com/go-resty/resty/v2" | |
| "strings" | |
| ) | |
| func (d *KodBox) getToken() error { | |
| var authResp CommonResp | |
| res, err := base.RestyClient.R(). | |
| SetResult(&authResp). | |
| SetQueryParams(map[string]string{ | |
| "name": d.UserName, | |
| "password": d.Password, | |
| }). | |
| Post(d.Address + "/?user/index/loginSubmit") | |
| if err != nil { | |
| return err | |
| } | |
| if res.StatusCode() >= 400 { | |
| return fmt.Errorf("get token failed: %s", res.String()) | |
| } | |
| if res.StatusCode() == 200 && authResp.Code.(bool) == false { | |
| return fmt.Errorf("get token failed: %s", res.String()) | |
| } | |
| d.authorization = fmt.Sprintf("%s", authResp.Info) | |
| return nil | |
| } | |
| func (d *KodBox) request(method string, pathname string, callback base.ReqCallback, noRedirect ...bool) ([]byte, error) { | |
| full := pathname | |
| if !strings.HasPrefix(pathname, "http") { | |
| full = d.Address + pathname | |
| } | |
| req := base.RestyClient.R() | |
| if len(noRedirect) > 0 && noRedirect[0] { | |
| req = base.NoRedirectClient.R() | |
| } | |
| req.SetFormData(map[string]string{ | |
| "accessToken": d.authorization, | |
| }) | |
| callback(req) | |
| var ( | |
| res *resty.Response | |
| commonResp *CommonResp | |
| err error | |
| skip bool | |
| ) | |
| for i := 0; i < 2; i++ { | |
| if skip { | |
| break | |
| } | |
| res, err = req.Execute(method, full) | |
| if err != nil { | |
| return nil, err | |
| } | |
| err := utils.Json.Unmarshal(res.Body(), &commonResp) | |
| if err != nil { | |
| return nil, err | |
| } | |
| switch commonResp.Code.(type) { | |
| case bool: | |
| skip = true | |
| case string: | |
| if commonResp.Code.(string) == "10001" { | |
| err = d.getToken() | |
| if err != nil { | |
| return nil, err | |
| } | |
| req.SetFormData(map[string]string{"accessToken": d.authorization}) | |
| } | |
| } | |
| } | |
| if commonResp.Code.(bool) == false { | |
| return nil, fmt.Errorf("request failed: %s", commonResp.Data) | |
| } | |
| return res.Body(), nil | |
| } | |