mirror of https://github.com/Xhofe/alist
				
				
				
			
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
package aliyundrive_open
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
	"fmt"
 | 
						|
	"net/http"
 | 
						|
 | 
						|
	"github.com/alist-org/alist/v3/drivers/base"
 | 
						|
	"github.com/alist-org/alist/v3/internal/op"
 | 
						|
	"github.com/go-resty/resty/v2"
 | 
						|
)
 | 
						|
 | 
						|
// do others that not defined in Driver interface
 | 
						|
 | 
						|
func (d *AliyundriveOpen) refreshToken() error {
 | 
						|
	url := d.base + "/oauth/access_token"
 | 
						|
	if d.OauthTokenURL != "" && d.ClientID == "" {
 | 
						|
		url = d.OauthTokenURL
 | 
						|
	}
 | 
						|
	var resp base.TokenResp
 | 
						|
	var e ErrResp
 | 
						|
	_, err := base.RestyClient.R().
 | 
						|
		ForceContentType("application/json").
 | 
						|
		SetBody(base.Json{
 | 
						|
			"client_id":     d.ClientID,
 | 
						|
			"client_secret": d.ClientSecret,
 | 
						|
			"grant_type":    "refresh_token",
 | 
						|
			"refresh_token": d.RefreshToken,
 | 
						|
		}).
 | 
						|
		SetResult(&resp).
 | 
						|
		SetError(&e).
 | 
						|
		Post(url)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	if e.Code != "" {
 | 
						|
		return fmt.Errorf("failed to refresh token: %s", e.Message)
 | 
						|
	}
 | 
						|
	if resp.RefreshToken == "" {
 | 
						|
		return errors.New("failed to refresh token: refresh token is empty")
 | 
						|
	}
 | 
						|
	d.RefreshToken, d.AccessToken = resp.RefreshToken, resp.AccessToken
 | 
						|
	op.MustSaveDriverStorage(d)
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (d *AliyundriveOpen) request(uri, method string, callback base.ReqCallback) ([]byte, error) {
 | 
						|
	req := base.RestyClient.R()
 | 
						|
	// TODO check whether access_token is expired
 | 
						|
	req.SetHeader("Authorization", "Bearer "+d.AccessToken)
 | 
						|
	if method == http.MethodPost {
 | 
						|
		req.SetHeader("Content-Type", "application/json")
 | 
						|
	}
 | 
						|
	if callback != nil {
 | 
						|
		callback(req)
 | 
						|
	}
 | 
						|
	var e ErrResp
 | 
						|
	req.SetError(&e)
 | 
						|
	res, err := req.Execute(method, d.base+uri)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	if e.Code != "" {
 | 
						|
		return nil, fmt.Errorf("%s:%s", e.Code, e.Message)
 | 
						|
	}
 | 
						|
	return res.Body(), nil
 | 
						|
}
 | 
						|
 | 
						|
func (d *AliyundriveOpen) getFiles(fileId string) ([]File, error) {
 | 
						|
	marker := "first"
 | 
						|
	res := make([]File, 0)
 | 
						|
	for marker != "" {
 | 
						|
		if marker == "first" {
 | 
						|
			marker = ""
 | 
						|
		}
 | 
						|
		var resp Files
 | 
						|
		data := base.Json{
 | 
						|
			"drive_id":        d.DriveId,
 | 
						|
			"limit":           200,
 | 
						|
			"marker":          marker,
 | 
						|
			"order_by":        d.OrderBy,
 | 
						|
			"order_direction": d.OrderDirection,
 | 
						|
			"parent_file_id":  fileId,
 | 
						|
			//"category":              "",
 | 
						|
			//"type":                  "",
 | 
						|
			//"video_thumbnail_time":  120000,
 | 
						|
			//"video_thumbnail_width": 480,
 | 
						|
			//"image_thumbnail_width": 480,
 | 
						|
		}
 | 
						|
		_, err := d.request("/adrive/v1.0/openFile/list", http.MethodPost, func(req *resty.Request) {
 | 
						|
			req.SetBody(data).SetResult(&resp)
 | 
						|
		})
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		marker = resp.NextMarker
 | 
						|
		res = append(res, resp.Items...)
 | 
						|
	}
 | 
						|
	return res, nil
 | 
						|
}
 |