fix(aliyundrive_share): get share link download url directly (close #2472)

pull/2504/head
Noah Hsu 2022-11-24 18:50:04 +08:00
parent 2383e851e2
commit bb969d8dc6
1 changed files with 18 additions and 40 deletions

View File

@ -82,35 +82,14 @@ func (d *AliyundriveShare) Link(ctx context.Context, file model.Obj, args model.
data := base.Json{ data := base.Json{
"drive_id": d.DriveId, "drive_id": d.DriveId,
"file_id": file.GetID(), "file_id": file.GetID(),
"expire_sec": 14400, // // Only ten minutes lifetime
}
var e ErrorResp
res, err := base.RestyClient.R().
SetError(&e).SetBody(data).
SetHeader("content-type", "application/json").
SetHeader("Authorization", "Bearer\t"+d.AccessToken).
Post("https://api.aliyundrive.com/v2/file/get_download_url")
if err != nil {
return nil, err
}
var u string
if e.Code != "" {
if e.Code == "AccessTokenInvalid" {
err = d.refreshToken()
if err != nil {
return nil, err
}
return d.Link(ctx, file, args)
} else if e.Code == "ForbiddenNoPermission.File" {
data = utils.MergeMap(data, base.Json{
// Only ten minutes valid
"expire_sec": 600, "expire_sec": 600,
"share_id": d.ShareId, "share_id": d.ShareId,
}) }
var resp ShareLinkResp var resp ShareLinkResp
var e2 ErrorResp var e ErrorResp
_, err = base.RestyClient.R(). _, err := base.RestyClient.R().
SetError(&e2).SetBody(data).SetResult(&resp). SetError(&e).SetBody(data).SetResult(&resp).
SetHeader("content-type", "application/json"). SetHeader("content-type", "application/json").
SetHeader("Authorization", "Bearer\t"+d.AccessToken). SetHeader("Authorization", "Bearer\t"+d.AccessToken).
SetHeader("x-share-token", d.ShareToken). SetHeader("x-share-token", d.ShareToken).
@ -118,25 +97,24 @@ func (d *AliyundriveShare) Link(ctx context.Context, file model.Obj, args model.
if err != nil { if err != nil {
return nil, err return nil, err
} }
if e2.Code != "" { var u string
if e2.Code == "AccessTokenInvalid" || e2.Code == "ShareLinkTokenInvalid" { if e.Code != "" {
if e.Code == "AccessTokenInvalid" || e.Code == "ShareLinkTokenInvalid" {
if e.Code == "AccessTokenInvalid" {
err = d.refreshToken()
} else {
err = d.getShareToken() err = d.getShareToken()
}
if err != nil { if err != nil {
return nil, err return nil, err
} }
return d.Link(ctx, file, args) return d.Link(ctx, file, args)
} else { } else {
return nil, errors.New(e2.Code + ":" + e2.Message) return nil, errors.New(e.Code + ": " + e.Message)
} }
} else { } else {
u = resp.DownloadUrl u = resp.DownloadUrl
} }
} else {
return nil, errors.New(e.Code + ":" + e.Message)
}
} else {
u = utils.Json.Get(res.Body(), "url").ToString()
}
return &model.Link{ return &model.Link{
Header: http.Header{ Header: http.Header{
"Referer": []string{"https://www.aliyundrive.com/"}, "Referer": []string{"https://www.aliyundrive.com/"},