Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/drivers/aliyundrive_share/util.go
1987 views
1
package aliyundrive_share
2
3
import (
4
"errors"
5
"fmt"
6
7
"github.com/alist-org/alist/v3/drivers/base"
8
"github.com/alist-org/alist/v3/internal/op"
9
log "github.com/sirupsen/logrus"
10
)
11
12
const (
13
// CanaryHeaderKey CanaryHeaderValue for lifting rate limit restrictions
14
CanaryHeaderKey = "X-Canary"
15
CanaryHeaderValue = "client=web,app=share,version=v2.3.1"
16
)
17
18
func (d *AliyundriveShare) refreshToken() error {
19
url := "https://auth.alipan.com/v2/account/token"
20
var resp base.TokenResp
21
var e ErrorResp
22
_, err := base.RestyClient.R().
23
SetBody(base.Json{"refresh_token": d.RefreshToken, "grant_type": "refresh_token"}).
24
SetResult(&resp).
25
SetError(&e).
26
Post(url)
27
if err != nil {
28
return err
29
}
30
if e.Code != "" {
31
return fmt.Errorf("failed to refresh token: %s", e.Message)
32
}
33
d.RefreshToken, d.AccessToken = resp.RefreshToken, resp.AccessToken
34
op.MustSaveDriverStorage(d)
35
return nil
36
}
37
38
// do others that not defined in Driver interface
39
func (d *AliyundriveShare) getShareToken() error {
40
data := base.Json{
41
"share_id": d.ShareId,
42
}
43
if d.SharePwd != "" {
44
data["share_pwd"] = d.SharePwd
45
}
46
var e ErrorResp
47
var resp ShareTokenResp
48
_, err := base.RestyClient.R().
49
SetResult(&resp).SetError(&e).SetBody(data).
50
Post("https://api.alipan.com/v2/share_link/get_share_token")
51
if err != nil {
52
return err
53
}
54
if e.Code != "" {
55
return errors.New(e.Message)
56
}
57
d.ShareToken = resp.ShareToken
58
return nil
59
}
60
61
func (d *AliyundriveShare) request(url, method string, callback base.ReqCallback) ([]byte, error) {
62
var e ErrorResp
63
req := base.RestyClient.R().
64
SetError(&e).
65
SetHeader("content-type", "application/json").
66
SetHeader("Authorization", "Bearer\t"+d.AccessToken).
67
SetHeader(CanaryHeaderKey, CanaryHeaderValue).
68
SetHeader("x-share-token", d.ShareToken)
69
if callback != nil {
70
callback(req)
71
} else {
72
req.SetBody("{}")
73
}
74
resp, err := req.Execute(method, url)
75
if err != nil {
76
return nil, err
77
}
78
if e.Code != "" {
79
if e.Code == "AccessTokenInvalid" || e.Code == "ShareLinkTokenInvalid" {
80
if e.Code == "AccessTokenInvalid" {
81
err = d.refreshToken()
82
} else {
83
err = d.getShareToken()
84
}
85
if err != nil {
86
return nil, err
87
}
88
return d.request(url, method, callback)
89
} else {
90
return nil, errors.New(e.Code + ": " + e.Message)
91
}
92
}
93
return resp.Body(), nil
94
}
95
96
func (d *AliyundriveShare) getFiles(fileId string) ([]File, error) {
97
files := make([]File, 0)
98
data := base.Json{
99
"image_thumbnail_process": "image/resize,w_160/format,jpeg",
100
"image_url_process": "image/resize,w_1920/format,jpeg",
101
"limit": 200,
102
"order_by": d.OrderBy,
103
"order_direction": d.OrderDirection,
104
"parent_file_id": fileId,
105
"share_id": d.ShareId,
106
"video_thumbnail_process": "video/snapshot,t_1000,f_jpg,ar_auto,w_300",
107
"marker": "first",
108
}
109
for data["marker"] != "" {
110
if data["marker"] == "first" {
111
data["marker"] = ""
112
}
113
var e ErrorResp
114
var resp ListResp
115
res, err := base.RestyClient.R().
116
SetHeader("x-share-token", d.ShareToken).
117
SetHeader(CanaryHeaderKey, CanaryHeaderValue).
118
SetResult(&resp).SetError(&e).SetBody(data).
119
Post("https://api.alipan.com/adrive/v3/file/list")
120
if err != nil {
121
return nil, err
122
}
123
log.Debugf("aliyundrive share get files: %s", res.String())
124
if e.Code != "" {
125
if e.Code == "AccessTokenInvalid" || e.Code == "ShareLinkTokenInvalid" {
126
err = d.getShareToken()
127
if err != nil {
128
return nil, err
129
}
130
return d.getFiles(fileId)
131
}
132
return nil, errors.New(e.Message)
133
}
134
data["marker"] = resp.NextMarker
135
files = append(files, resp.Items...)
136
}
137
if len(files) > 0 && d.DriveId == "" {
138
d.DriveId = files[0].DriveId
139
}
140
return files, nil
141
}
142
143