code: func (user *User) OAuthHTTPClient() *http.Client {
  
  	ps, _ := user.protectedSettings()
  
  	if ps == nil {
  		return nil
  	}
  
  	if ps.OAuthToken == "" {
  		return nil
  	}
  
  	if user.ctx.Service().DefaultOAuth2 != nil {
  		ts := user.ctx.OAuthProvider().OAuth2Client(user.ctx).TokenSource(oauth2.NoContext, &oauth2.Token{AccessToken: ps.OAuthToken, RefreshToken: ps.OAuthRefreshToken, Expiry: *ps.OAuthExpireDate, TokenType: "Bearer"})
  		if ps.OAuthExpireDate != nil && ps.OAuthExpireDate.Before(time.Now().Add(time.Second*5)) {
  			token, err := ts.Token()
  			if err != nil {
  				if strings.Contains(err.Error(), "revoked") || strings.Contains(err.Error(), "invalid_grant") {
  					ps.OAuthToken = ""
  					ps.OAuthExpireDate = nil
  					user.saveProtectedSettings()
  					//todo: provide revoked callback
  				}
  				user.ctx.Log().WithError(err).Error("OAuth token refresh failed")
  				return nil
  			}
  
  			if token != nil {
  				ps.OAuthToken = token.AccessToken
  				if token.RefreshToken != "" {
  					ps.OAuthRefreshToken = token.RefreshToken
  				}
  				ps.OAuthExpireDate = &token.Expiry
  				user.saveProtectedSettings()
  			}
  		}
  		return oauth2.NewClient(oauth2.NoContext, ts)
  	} else if user.ctx.Service().DefaultOAuth1 != nil {
  		//todo make a correct httpclient
  		return http.DefaultClient
  	}
  	return nil
  }
docs: // OAuthHTTPClient returns HTTP client with Bearer authorization headers