Factor out Client::post_token
This commit is contained in:
parent
d31ccaf473
commit
4fbe31693f
|
@ -111,6 +111,36 @@ impl<P: Provider> Client<P> {
|
||||||
Ok(uri.serialize())
|
Ok(uri.serialize())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn post_token(&self, body_pairs: Vec<(&str, &str)>) -> Result<Json, ClientError> {
|
||||||
|
let body = form_urlencoded::serialize(body_pairs);
|
||||||
|
let auth_header = header::Authorization(
|
||||||
|
header::Basic {
|
||||||
|
username: self.client_id.clone(),
|
||||||
|
password: Some(self.client_secret.clone()),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
let accept_header = header::Accept(vec![
|
||||||
|
header::qitem(mime::Mime(mime::TopLevel::Application, mime::SubLevel::Json, vec![])),
|
||||||
|
]);
|
||||||
|
|
||||||
|
let request = self.http_client.post(P::token_uri())
|
||||||
|
.header(auth_header)
|
||||||
|
.header(accept_header)
|
||||||
|
.header(header::ContentType::form_url_encoded())
|
||||||
|
.body(&body);
|
||||||
|
|
||||||
|
let mut response = try!(request.send());
|
||||||
|
let json = try!(Json::from_reader(&mut response));
|
||||||
|
|
||||||
|
let error = OAuth2Error::from_response(&json);
|
||||||
|
|
||||||
|
if let Ok(error) = error {
|
||||||
|
Err(ClientError::from(error))
|
||||||
|
} else {
|
||||||
|
Ok(json)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Requests an access token using an authorization code.
|
/// Requests an access token using an authorization code.
|
||||||
///
|
///
|
||||||
/// See [RFC 6749, section 4.1.3](http://tools.ietf.org/html/rfc6749#section-4.1.3).
|
/// See [RFC 6749, section 4.1.3](http://tools.ietf.org/html/rfc6749#section-4.1.3).
|
||||||
|
@ -123,36 +153,7 @@ impl<P: Provider> Client<P> {
|
||||||
body_pairs.push(("redirect_uri", redirect_uri));
|
body_pairs.push(("redirect_uri", redirect_uri));
|
||||||
}
|
}
|
||||||
|
|
||||||
let post_body = form_urlencoded::serialize(body_pairs);
|
let json = try!(self.post_token(body_pairs));
|
||||||
let request = self.http_client.post(P::token_uri())
|
|
||||||
.header(
|
|
||||||
header::Authorization(header::Basic {
|
|
||||||
username: self.client_id.clone(),
|
|
||||||
password: Some(self.client_secret.clone()),
|
|
||||||
})
|
|
||||||
)
|
|
||||||
.header(
|
|
||||||
header::Accept(vec![
|
|
||||||
header::qitem(
|
|
||||||
mime::Mime(
|
|
||||||
mime::TopLevel::Application,
|
|
||||||
mime::SubLevel::Json,
|
|
||||||
vec![]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
])
|
|
||||||
)
|
|
||||||
.header(header::ContentType::form_url_encoded())
|
|
||||||
.body(&post_body);
|
|
||||||
|
|
||||||
let mut response = try!(request.send());
|
|
||||||
let json = try!(Json::from_reader(&mut response));
|
|
||||||
|
|
||||||
let error = OAuth2Error::from_response(&json);
|
|
||||||
if let Ok(error) = error {
|
|
||||||
return Err(ClientError::from(error));
|
|
||||||
}
|
|
||||||
|
|
||||||
let token = try!(P::Token::from_response(&json));
|
let token = try!(P::Token::from_response(&json));
|
||||||
Ok(token)
|
Ok(token)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue