alist/drivers/kodbox/util.go

87 lines
1.9 KiB
Go

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
}