From d09af74a75996e53affe425fd2797fb3a7b5ec85 Mon Sep 17 00:00:00 2001 From: YourLi <38151322+Vurliy@users.noreply.github.com> Date: Fri, 6 Nov 2026 12:42:33 +0800 Subject: [PATCH] fix(drivers/onedrive): refresh token on drive quota query and retry only once (#3335) fix(onedrive): refresh token on drive quota query and retry only once getDrive (used for storage capacity) was the only request that opted out of the InvalidAuthenticationToken refresh, so an expired token made the capacity query fail until another request happened to refresh it. Let it refresh like every other request. The retry after a refresh did not pass noRetry, so a token that stayed invalid after a successful refresh recursed without bound. Retry once. Claude-Session: https://claude.ai/code/session_01U5btuswaVrY7Lp7FWWVEHh Co-authored-by: Vurliy Co-authored-by: Claude Opus 5.5 --- drivers/onedrive/util.go | 5 +++-- drivers/onedrive_app/util.go | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/onedrive/util.go b/drivers/onedrive/util.go index ad300af4..945f5fee 100644 --- a/drivers/onedrive/util.go +++ b/drivers/onedrive/util.go @@ -156,7 +156,8 @@ func (d *Onedrive) Request(url string, method string, callback base.ReqCallback, if err != nil { return nil, err } - return d.Request(url, method, callback, resp) + // retry once with the refreshed token, never loop on a bad token + return d.Request(url, method, callback, resp, true) } return nil, errors.New(e.Error.Message) } @@ -310,7 +311,7 @@ func (d *Onedrive) getDrive(ctx context.Context) (*DriveResp, error) { var resp DriveResp _, err := d.Request(api, http.MethodGet, func(req *resty.Request) { req.SetContext(ctx) - }, &resp, true) + }, &resp) if err != nil { return nil, err } diff --git a/drivers/onedrive_app/util.go b/drivers/onedrive_app/util.go index 896b95b7..0331f456 100644 --- a/drivers/onedrive_app/util.go +++ b/drivers/onedrive_app/util.go @@ -182,7 +182,8 @@ func (d *OnedriveAPP) Request(url string, method string, callback base.ReqCallba if err != nil { return nil, err } - return d.Request(url, method, callback, resp) + // retry once with the refreshed token, never loop on a bad token + return d.Request(url, method, callback, resp, true) } return nil, errors.New(e.Error.Message) } @@ -295,7 +296,7 @@ func (d *OnedriveAPP) getDrive(ctx context.Context) (*DriveResp, error) { var resp DriveResp _, err := d.Request(api, http.MethodGet, func(req *resty.Request) { req.SetContext(ctx) - }, &resp, true) + }, &resp) if err != nil { return nil, err }