Handle expiry correctly in json response

Go treats json numbers as float64 not int. Previously json response
expiry information was ignored since it was expected to be an int.
This commit is contained in:
Mal Curtis 2014-11-11 08:59:36 +13:00
Родитель 13cbb8b617
Коммит 778494f9ec
2 изменённых файлов: 7 добавлений и 4 удалений

Просмотреть файл

@ -323,14 +323,14 @@ func retrieveToken(o *Options, v url.Values) (*Token, error) {
token.TokenType, _ = b["token_type"].(string)
token.RefreshToken, _ = b["refresh_token"].(string)
token.raw = b
e, ok := b["expires_in"].(int)
e, ok := b["expires_in"].(float64)
if !ok {
// TODO(jbd): Facebook's OAuth2 implementation is broken and
// returns expires_in field in expires. Remove the fallback to expires,
// when Facebook fixes their implementation.
e, _ = b["expires"].(int)
e, _ = b["expires"].(float64)
}
expires = e
expires = int(e)
}
// Don't overwrite `RefreshToken` with an empty value
// if this was a token refreshing request.

Просмотреть файл

@ -115,7 +115,7 @@ func TestExchangeRequest_JSONResponse(t *testing.T) {
t.Errorf("Unexpected exchange payload, %v is found.", string(body))
}
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(`{"access_token": "90d64460d14870c08c81352a05dedd3465940a7c", "scope": "user", "token_type": "bearer"}`))
w.Write([]byte(`{"access_token": "90d64460d14870c08c81352a05dedd3465940a7c", "scope": "user", "token_type": "bearer", "expires_in": 86400}`))
}))
defer ts.Close()
f := newTestFlow(ts.URL)
@ -124,6 +124,9 @@ func TestExchangeRequest_JSONResponse(t *testing.T) {
t.Error(err)
}
tok := tr.Token()
if tok.Expiry.IsZero() {
t.Errorf("Token expiry should not be zero.")
}
if tok.Expired() {
t.Errorf("Token shouldn't be expired.")
}