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 }