From 4b95846fbe2af19215089241f00d9d328131346d Mon Sep 17 00:00:00 2001 From: shouko Date: Sun, 21 Jan 2024 17:55:57 +0900 Subject: [PATCH] feat(dropbox): add root_namespace_id to access teams folder --- drivers/dropbox/driver.go | 15 ++++++++++++++- drivers/dropbox/meta.go | 1 + drivers/dropbox/util.go | 7 +++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/dropbox/driver.go b/drivers/dropbox/driver.go index 95148b94e96d..2dd85367da9d 100644 --- a/drivers/dropbox/driver.go +++ b/drivers/dropbox/driver.go @@ -45,7 +45,20 @@ func (d *Dropbox) Init(ctx context.Context) error { if result != query { return fmt.Errorf("failed to check user: %s", string(res)) } - return nil + d.rootNamespaceID, err := d.GetRootNamespaceId(ctx) + + return err +} + +func (d *Dropbox) GetRootNamespaceId(ctx context.Context) (string, error) { + res, err := d.request("/2/users/get_current_account", http.MethodPost, func(req *resty.Request) { + req.SetContext(ctx) + }) + if err != nil { + return "", err + } + rootNamespaceID := utils.Json.Get(res, "root_info.root_namespace_id").ToString() + return rootNamespaceID, nil } func (d *Dropbox) Drop(ctx context.Context) error { diff --git a/drivers/dropbox/meta.go b/drivers/dropbox/meta.go index 07ab44695c1c..50b0c34dcd17 100644 --- a/drivers/dropbox/meta.go +++ b/drivers/dropbox/meta.go @@ -18,6 +18,7 @@ type Addition struct { ClientSecret string `json:"client_secret" required:"false" help:"Keep it empty if you don't have one"` AccessToken string + RootNamespaceId string } var config = driver.Config{ diff --git a/drivers/dropbox/util.go b/drivers/dropbox/util.go index 14a5c6c6fc66..85134915c4cc 100644 --- a/drivers/dropbox/util.go +++ b/drivers/dropbox/util.go @@ -46,6 +46,13 @@ func (d *Dropbox) refreshToken() error { func (d *Dropbox) request(uri, method string, callback base.ReqCallback, retry ...bool) ([]byte, error) { req := base.RestyClient.R() req.SetHeader("Authorization", "Bearer "+d.AccessToken) + if d.RootNamespaceId != nil { + rootHeader := map[string]interface{}{ + ".tag": "root", + "root": *d.RootNamespaceId, + } + req.SetHeader("Dropbox-API-Path-Root", utils.JsonMarshalToString(rootHeader)) + } if method == http.MethodPost { req.SetHeader("Content-Type", "application/json") }