From 24cc5d1fd1e1f04ddcc0e1ce18cf4627edd2faf3 Mon Sep 17 00:00:00 2001 From: jerrita Date: Mon, 6 Oct 2025 23:45:32 +0800 Subject: [PATCH 1/2] feat(onedrive): add ref support --- drivers/onedrive/driver.go | 15 +++++++++++++++ drivers/onedrive/util.go | 18 +++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/drivers/onedrive/driver.go b/drivers/onedrive/driver.go index 0af2f8374..efce767e0 100644 --- a/drivers/onedrive/driver.go +++ b/drivers/onedrive/driver.go @@ -22,6 +22,7 @@ type Onedrive struct { AccessToken string root *Object mutex sync.Mutex + ref *Onedrive } func (d *Onedrive) Config() driver.Config { @@ -36,10 +37,24 @@ func (d *Onedrive) Init(ctx context.Context) error { if d.ChunkSize < 1 { d.ChunkSize = 5 } + if d.ref != nil { + d.AccessToken = d.ref.AccessToken + d.RefreshToken = d.ref.RefreshToken + return nil + } return d.refreshToken() } +func (d *Onedrive) InitReference(refStorage driver.Driver) error { + if ref, ok := refStorage.(*Onedrive); ok { + d.ref = ref + return nil + } + return errs.NotSupport +} + func (d *Onedrive) Drop(ctx context.Context) error { + d.ref = nil return nil } diff --git a/drivers/onedrive/util.go b/drivers/onedrive/util.go index 49b5f074d..7fa233dd7 100644 --- a/drivers/onedrive/util.go +++ b/drivers/onedrive/util.go @@ -73,6 +73,16 @@ func (d *Onedrive) refreshToken() error { } func (d *Onedrive) _refreshToken() error { + if d.ref != nil { + err := d.ref._refreshToken() + if err != nil { + return err + } + d.AccessToken = d.ref.AccessToken + d.RefreshToken = d.ref.RefreshToken + return nil + } + // 使用在线API刷新Token,无需ClientID和ClientSecret if d.UseOnlineAPI && len(d.APIAddress) > 0 { u := d.APIAddress @@ -135,7 +145,13 @@ func (d *Onedrive) _refreshToken() error { func (d *Onedrive) Request(url string, method string, callback base.ReqCallback, resp interface{}) ([]byte, error) { req := base.RestyClient.R() - req.SetHeader("Authorization", "Bearer "+d.AccessToken) + + token := d.AccessToken + if d.ref != nil { + token = d.ref.AccessToken + } + + req.SetHeader("Authorization", "Bearer "+token) if callback != nil { callback(req) } From 03527ece5eebac3524836f5994d53218187875e6 Mon Sep 17 00:00:00 2001 From: j2rong4cn Date: Fri, 10 Oct 2025 09:53:40 +0800 Subject: [PATCH 2/2] fix(onedrive): remove redundant token assignment from reference --- drivers/onedrive/driver.go | 2 -- drivers/onedrive/util.go | 19 +++---------------- 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/drivers/onedrive/driver.go b/drivers/onedrive/driver.go index efce767e0..c3a3020b3 100644 --- a/drivers/onedrive/driver.go +++ b/drivers/onedrive/driver.go @@ -38,8 +38,6 @@ func (d *Onedrive) Init(ctx context.Context) error { d.ChunkSize = 5 } if d.ref != nil { - d.AccessToken = d.ref.AccessToken - d.RefreshToken = d.ref.RefreshToken return nil } return d.refreshToken() diff --git a/drivers/onedrive/util.go b/drivers/onedrive/util.go index 7fa233dd7..919e03089 100644 --- a/drivers/onedrive/util.go +++ b/drivers/onedrive/util.go @@ -73,16 +73,6 @@ func (d *Onedrive) refreshToken() error { } func (d *Onedrive) _refreshToken() error { - if d.ref != nil { - err := d.ref._refreshToken() - if err != nil { - return err - } - d.AccessToken = d.ref.AccessToken - d.RefreshToken = d.ref.RefreshToken - return nil - } - // 使用在线API刷新Token,无需ClientID和ClientSecret if d.UseOnlineAPI && len(d.APIAddress) > 0 { u := d.APIAddress @@ -144,14 +134,11 @@ func (d *Onedrive) _refreshToken() error { } func (d *Onedrive) Request(url string, method string, callback base.ReqCallback, resp interface{}) ([]byte, error) { - req := base.RestyClient.R() - - token := d.AccessToken if d.ref != nil { - token = d.ref.AccessToken + return d.ref.Request(url, method, callback, resp) } - - req.SetHeader("Authorization", "Bearer "+token) + req := base.RestyClient.R() + req.SetHeader("Authorization", "Bearer "+d.AccessToken) if callback != nil { callback(req) }