// serveLogout clears the authentication cookie. func serveLogout(w http.ResponseWriter, r *http.Request) { s := session.Get(r) delete(s, tokenCredKey) if err := session.Save(w, r, s); err != nil { http.Error(w, "Error saving session , "+err.Error(), 500) return } http.Redirect(w, r, "/", 302) }
// serveAuthorize gets the OAuth temp credentials and redirects the user to the // Twitter's authorization page. func serveAuthorize(w http.ResponseWriter, r *http.Request) { callback := "http://" + r.Host + "/callback" tempCred, err := oauthClient.RequestTemporaryCredentials(nil, callback, nil) if err != nil { http.Error(w, "Error getting temp cred, "+err.Error(), 500) return } s := session.Get(r) s[tempCredKey] = tempCred if err := session.Save(w, r, s); err != nil { http.Error(w, "Error saving session , "+err.Error(), 500) return } http.Redirect(w, r, oauthClient.AuthorizationURL(tempCred, nil), 302) }
// serveLogin gets the OAuth temp credentials and redirects the user to the // OAuth server's authorization page. func serveLogin(w http.ResponseWriter, r *http.Request) { // Dropbox supports the older OAuth 1.0 specification where the callback URL // is passed to the authorization endpoint. callback := "http://" + r.Host + "/callback" tempCred, err := oauthClient.RequestTemporaryCredentials(nil, "", nil) if err != nil { http.Error(w, "Error getting temp cred, "+err.Error(), 500) return } s := session.Get(r) s[tempCredKey] = tempCred if err := session.Save(w, r, s); err != nil { http.Error(w, "Error saving session , "+err.Error(), 500) return } http.Redirect(w, r, oauthClient.AuthorizationURL(tempCred, url.Values{"oauth_callback": {callback}}), 302) }
// serveOAuthCallback handles callbacks from the OAuth server. func serveOAuthCallback(w http.ResponseWriter, r *http.Request) { s := session.Get(r) tempCred, _ := s[tempCredKey].(*oauth.Credentials) if tempCred == nil || tempCred.Token != r.FormValue("oauth_token") { http.Error(w, "Unknown oauth_token.", 500) return } tokenCred, _, err := oauthClient.RequestToken(nil, tempCred, r.FormValue("oauth_verifier")) if err != nil { http.Error(w, "Error getting request token, "+err.Error(), 500) return } delete(s, tempCredKey) s[tokenCredKey] = tokenCred if err := session.Save(w, r, s); err != nil { http.Error(w, "Error saving session , "+err.Error(), 500) return } http.Redirect(w, r, "/", 302) }