add dropbox api (#295)

This commit is contained in:
Pikachu Ren
2025-06-22 18:28:35 +08:00
committed by GitHub
parent 639b5cf7c2
commit 652e4ba1cb
2 changed files with 36 additions and 7 deletions

View File

@ -10,14 +10,13 @@ const (
) )
type Addition struct { type Addition struct {
RefreshToken string `json:"refresh_token" required:"true"`
driver.RootPath driver.RootPath
UseOnlineAPI bool `json:"use_online_api" default:"true"`
OauthTokenURL string `json:"oauth_token_url" default:"https://api.oplist.org/dropboxs/renewapi"` // TODO: replace APIAddress string `json:"api_url_address" default:"https://api.oplist.org/dropboxs/renewapi"`
ClientID string `json:"client_id" required:"false" help:"Keep it empty if you don't have one"` ClientID string `json:"client_id" required:"false" help:"Keep it empty if you don't have one"`
ClientSecret string `json:"client_secret" required:"false" help:"Keep it empty if you don't have one"` ClientSecret string `json:"client_secret" required:"false" help:"Keep it empty if you don't have one"`
AccessToken string AccessToken string
RefreshToken string `json:"refresh_token" required:"true"`
RootNamespaceId string RootNamespaceId string
} }

View File

@ -15,9 +15,39 @@ import (
) )
func (d *Dropbox) refreshToken() error { func (d *Dropbox) refreshToken() error {
// 使用在线API刷新Token无需ClientID和ClientSecret
if d.UseOnlineAPI && len(d.APIAddress) > 0 {
u := d.APIAddress
var resp struct {
RefreshToken string `json:"refresh_token"`
AccessToken string `json:"access_token"`
ErrorMessage string `json:"text"`
}
_, err := base.RestyClient.R().
SetResult(&resp).
SetQueryParams(map[string]string{
"refresh_ui": d.RefreshToken,
"server_use": "true",
"driver_txt": "baiduyun_go",
}).
Get(u)
if err != nil {
return err
}
if resp.RefreshToken == "" || resp.AccessToken == "" {
if resp.ErrorMessage != "" {
return fmt.Errorf("failed to refresh token: %s", resp.ErrorMessage)
}
return fmt.Errorf("empty token returned from official API")
}
d.AccessToken = resp.AccessToken
d.RefreshToken = resp.RefreshToken
op.MustSaveDriverStorage(d)
return nil
}
url := d.base + "/oauth2/token" url := d.base + "/oauth2/token"
if utils.SliceContains([]string{"", DefaultClientID}, d.ClientID) { if utils.SliceContains([]string{"", DefaultClientID}, d.ClientID) {
url = d.OauthTokenURL url = d.APIAddress
} }
var tokenResp TokenResp var tokenResp TokenResp
resp, err := base.RestyClient.R(). resp, err := base.RestyClient.R().