From 53400d7edcfe0f8b78584e888dd336bc88fdc651 Mon Sep 17 00:00:00 2001 From: Ovidiu Victor Tatar Date: Wed, 3 Mar 2021 11:33:29 +0100 Subject: [PATCH] oauthlib: add method to set a token as expired This can be used by backends to trigger a refresh of an access token if they detect an invalid token. --- lib/oauthutil/oauthutil.go | 17 +++++++++++++++++ lib/oauthutil/renew.go | 5 +++++ 2 files changed, 22 insertions(+) diff --git a/lib/oauthutil/oauthutil.go b/lib/oauthutil/oauthutil.go index 53a08900c..2033ac5f5 100644 --- a/lib/oauthutil/oauthutil.go +++ b/lib/oauthutil/oauthutil.go @@ -269,6 +269,23 @@ func (ts *TokenSource) Invalidate() { ts.mu.Unlock() } +// Expire marks the token as expired +// +// This also marks the token in the config file as expired, if it is the same one +func (ts *TokenSource) Expire() error { + ts.mu.Lock() + defer ts.mu.Unlock() + ts.token.Expiry = time.Now().Add(time.Hour * (-1)) // expire token + t, err := GetToken(ts.name, ts.m) + if err != nil { + return err + } + if t.AccessToken == ts.token.AccessToken { + err = PutToken(ts.name, ts.m, ts.token, false) + } + return err +} + // timeToExpiry returns how long until the token expires // // Call with the lock held diff --git a/lib/oauthutil/renew.go b/lib/oauthutil/renew.go index 1fb96e771..29786cf69 100644 --- a/lib/oauthutil/renew.go +++ b/lib/oauthutil/renew.go @@ -67,3 +67,8 @@ func (r *Renew) Stop() { func (r *Renew) Invalidate() { r.ts.Invalidate() } + +// Expire expires the token source +func (r *Renew) Expire() error { + return r.ts.Expire() +}