func rtRoot(w http.ResponseWriter, r *http.Request, args []string) error { sess := getSession(r) if sess == nil || sess.token == nil { http.Redirect(w, r, "/oauth2/login", http.StatusFound) return nil } t := oauth.Transport{ Config: oauthConfig, Token: sess.token, } if er := t.Refresh(); er != nil { return er } res, er := t.Client().Get("https://api.guildwars2.com/v2/account") if er != nil { return er } w.Header().Set("Content-Type", "application/json") io.Copy(w, res.Body) return nil }
func initTransport(transport *oauth.Transport) error { // First: check the cache. if token, err := transport.Config.TokenCache.Token(); err == nil { // We have a token, refresh it. The lifetime is 1h, so we always // refresh to ensure lengthy commands do not time out. transport.Token = token err := transport.Refresh() if err == nil { return nil } log.Infof("token refresh failed, requesting new one") } // Get a new token. Pops up a browser window (hopefully). randState := fmt.Sprintf("st%d", time.Now().UnixNano()) authURL := transport.Config.AuthCodeURL(randState) log.Infof("Opening auth URL in browser: %s", authURL) log.Infof("If the URL doesn't open please open it manually and copy the code here.") openURL(authURL) code := getCodeFromStdin() _, err := transport.Exchange(code) if err != nil { log.Infof("problem exchanging code: %v", err) return err } return nil }
// Returns true if we have a valid cached token func hasValidToken(cacheFile oauth.CacheFile, transport *oauth.Transport) bool { // Check if we have a cached token token, err := cacheFile.Token() if err != nil { return false } // Refresh token if its expired if token.Expired() { transport.Token = token err = transport.Refresh() if err != nil { fmt.Println(err) return false } } return true }