123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package dropbox
- import (
- "fmt"
- "net/http"
- "github.com/IceWhaleTech/CasaOS-Common/utils/logger"
- "github.com/IceWhaleTech/CasaOS/drivers/base"
- "github.com/go-resty/resty/v2"
- "go.uber.org/zap"
- )
- func (d *Dropbox) getRefreshToken() error {
- url := "https://api.dropbox.com/oauth2/token"
- var resp base.TokenResp
- var e TokenError
- res, err := base.RestyClient.R().SetResult(&resp).SetError(&e).
- SetFormData(map[string]string{
- "code": d.Code,
- "grant_type": "authorization_code",
- "redirect_uri": "https://cloudoauth.files.casaos.app",
- }).SetBasicAuth(d.Addition.AppKey, d.Addition.AppSecret).SetHeader("Content-Type", "application/x-www-form-urlencoded").Post(url)
- if err != nil {
- return err
- }
- logger.Info("get refresh token", zap.String("res", res.String()))
- if e.Error != "" {
- return fmt.Errorf(e.Error)
- }
- d.RefreshToken = resp.RefreshToken
- return nil
- }
- func (d *Dropbox) refreshToken() error {
- url := "https://api.dropbox.com/oauth2/token"
- var resp base.TokenResp
- var e TokenError
- res, err := base.RestyClient.R().SetResult(&resp).SetError(&e).
- SetFormData(map[string]string{
- "refresh_token": d.RefreshToken,
- "grant_type": "refresh_token",
- }).SetBasicAuth(d.Addition.AppKey, d.Addition.AppSecret).SetHeader("Content-Type", "application/x-www-form-urlencoded").Post(url)
- if err != nil {
- return err
- }
- logger.Info("get refresh token", zap.String("res", res.String()))
- if e.Error != "" {
- return fmt.Errorf(e.Error)
- }
- d.AccessToken = resp.AccessToken
- return nil
- }
- func (d *Dropbox) request(url string, method string, callback base.ReqCallback, resp interface{}) ([]byte, error) {
- req := base.RestyClient.R()
- req.SetHeader("Authorization", "Bearer "+d.AccessToken)
- req.SetHeader("Content-Type", "application/json")
- if callback != nil {
- callback(req)
- }
- if resp != nil {
- req.SetResult(resp)
- }
- var e Error
- req.SetError(&e)
- res, err := req.Execute(method, url)
- if err != nil {
- return nil, err
- }
- if e.Error.Code != 0 {
- if e.Error.Code == 401 {
- err = d.refreshToken()
- if err != nil {
- return nil, err
- }
- return d.request(url, method, callback, resp)
- }
- return nil, fmt.Errorf("%s: %v", e.Error.Message, e.Error.Errors)
- }
- return res.Body(), nil
- }
- func (d *Dropbox) getFiles(path string) ([]File, error) {
- res := make([]File, 0)
- var resp Files
- body := base.Json{
- "limit": 2000,
- "path": path,
- }
- _, err := d.request("https://api.dropboxapi.com/2/files/list_folder", http.MethodPost, func(req *resty.Request) {
- req.SetBody(body)
- }, &resp)
- if err != nil {
- return nil, err
- }
- res = append(res, resp.Files...)
- return res, nil
- }
|