Add offline token option

Login needs to add an offline token flag to ensure a refresh token is returned by the token endpoint.

Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
This commit is contained in:
Derek McGowan 2016-03-04 14:32:51 -08:00
parent 6d3a70430b
commit e0420f4045

View file

@ -116,9 +116,10 @@ type tokenHandler struct {
transport http.RoundTripper transport http.RoundTripper
clock clock clock clock
forceOAuth bool offlineAccess bool
clientID string forceOAuth bool
scopes []Scope clientID string
scopes []Scope
tokenLock sync.Mutex tokenLock sync.Mutex
tokenCache string tokenCache string
@ -149,9 +150,10 @@ type TokenHandlerOptions struct {
Transport http.RoundTripper Transport http.RoundTripper
Credentials CredentialStore Credentials CredentialStore
ForceOAuth bool OfflineAccess bool
ClientID string ForceOAuth bool
Scopes []Scope ClientID string
Scopes []Scope
} }
// An implementation of clock for providing real time data. // An implementation of clock for providing real time data.
@ -180,12 +182,13 @@ func NewTokenHandler(transport http.RoundTripper, creds CredentialStore, scope s
// options structure. // options structure.
func NewTokenHandlerWithOptions(options TokenHandlerOptions) AuthenticationHandler { func NewTokenHandlerWithOptions(options TokenHandlerOptions) AuthenticationHandler {
handler := &tokenHandler{ handler := &tokenHandler{
transport: options.Transport, transport: options.Transport,
creds: options.Credentials, creds: options.Credentials,
forceOAuth: options.ForceOAuth, offlineAccess: options.OfflineAccess,
clientID: options.ClientID, forceOAuth: options.ForceOAuth,
scopes: options.Scopes, clientID: options.ClientID,
clock: realClock{}, scopes: options.Scopes,
clock: realClock{},
} }
return handler return handler
@ -346,6 +349,10 @@ func (th *tokenHandler) fetchTokenWithBasicAuth(realm *url.URL, service string,
reqParams.Add("scope", scope) reqParams.Add("scope", scope)
} }
if th.offlineAccess {
reqParams.Add("offline_token", "true")
}
if th.creds != nil { if th.creds != nil {
username, password := th.creds.Basic(realm) username, password := th.creds.Basic(realm)
if username != "" && password != "" { if username != "" && password != "" {