importer/twitter: little fixes

Change-Id: I11ee5c6c5779c5e479120653f4131c0b4edfb2c8
This commit is contained in:
Brad Fitzpatrick 2014-04-23 08:54:35 -07:00
parent cea6b15013
commit bf618fca6c
1 changed files with 32 additions and 11 deletions

View File

@ -25,6 +25,7 @@ import (
"net/url"
"strconv"
"strings"
"sync"
"time"
"camlistore.org/pkg/context"
@ -66,9 +67,22 @@ var (
)
type imp struct {
// cred are the various credentials passed around during OAUTH. First the temporary
// cred are the various credentials passed around during OAuth. First the temporary
// ones, then the access token and secret.
cred *oauth.Credentials
mu sync.Mutex // guards credsVal
credsVal *oauth.Credentials
}
func (im *imp) creds() *oauth.Credentials {
im.mu.Lock()
defer im.mu.Lock()
return im.credsVal
}
func (im *imp) setCreds(v *oauth.Credentials) {
im.mu.Lock()
defer im.mu.Lock()
im.credsVal = v
}
func (im *imp) NeedsAPIKey() bool { return true }
@ -245,7 +259,7 @@ func (im *imp) doAPI(ctx *context.Context, result interface{}, apiPath string, k
panic("Incorrect number of keyval arguments. must be even.")
}
if im.cred == nil {
if im.creds() == nil {
return fmt.Errorf("No authentication creds")
}
@ -269,10 +283,11 @@ func (im *imp) doAPI(ctx *context.Context, result interface{}, apiPath string, k
}
func (im *imp) doGet(ctx *context.Context, url string, form url.Values) (*http.Response, error) {
if im.cred == nil {
return nil, errors.New("No OAUTH credentials. Not logged in?")
creds := im.creds()
if creds == nil {
return nil, errors.New("No OAuth credentials. Not logged in?")
}
res, err := oauthClient.Get(ctx.HTTPClient(), im.cred, url, form)
res, err := oauthClient.Get(ctx.HTTPClient(), creds, url, form)
if err != nil {
return nil, fmt.Errorf("Error fetching %s: %v", url, err)
}
@ -306,7 +321,7 @@ func (im *imp) ServeSetup(w http.ResponseWriter, r *http.Request, ctx *importer.
err = fmt.Errorf("Error getting temp cred: %v", err)
httputil.ServeError(w, r, err)
}
im.cred = tempCred
im.setCreds(tempCred)
authURL := oauthClient.AuthorizationURL(tempCred, nil)
http.Redirect(w, r, authURL, 302)
@ -314,13 +329,19 @@ func (im *imp) ServeSetup(w http.ResponseWriter, r *http.Request, ctx *importer.
}
func (im *imp) ServeCallback(w http.ResponseWriter, r *http.Request, ctx *importer.SetupContext) {
if im.cred.Token != r.FormValue("oauth_token") {
log.Printf("unexpected oauth_token: got %v, want %v", r.FormValue("oauth_token"), im.cred.Token)
creds := im.creds()
if creds == nil {
log.Printf("twitter: nil creds in callback")
httputil.BadRequestError(w, "nil creds in callback")
return
}
if creds.Token != r.FormValue("oauth_token") {
log.Printf("unexpected oauth_token: got %v, want %v", r.FormValue("oauth_token"), creds.Token)
httputil.BadRequestError(w, "unexpected oauth_token")
return
}
tokenCred, vals, err := oauthClient.RequestToken(ctx.Context.HTTPClient(), im.cred, r.FormValue("oauth_verifier"))
tokenCred, vals, err := oauthClient.RequestToken(ctx.Context.HTTPClient(), creds, r.FormValue("oauth_verifier"))
if err != nil {
httputil.ServeError(w, r, fmt.Errorf("Error getting request token: %v ", err))
return
@ -330,7 +351,7 @@ func (im *imp) ServeCallback(w http.ResponseWriter, r *http.Request, ctx *import
httputil.ServeError(w, r, fmt.Errorf("Couldn't get user id: %v", err))
return
}
im.cred = tokenCred
im.setCreds(tokenCred)
u, err := im.getUserInfo(ctx.Context)
if err != nil {