public Task<Tuple<OAuthToken, UserInfos>> AcquireAccessToken(OAuthToken requestToken, string tokenVerifier)
{
var headers = new Dictionary<string,string> () {
{ "oauth_consumer_key", config.ConsumerKey },
{ "oauth_nonce", MakeNonce () },
{ "oauth_signature_method", "HMAC-SHA1" },
{ "oauth_timestamp", MakeTimestamp () },
{ "oauth_version", "1.0" }};
var content = string.Empty;
headers.Add ("oauth_token", requestToken.Token);
headers.Add ("oauth_verifier", tokenVerifier);
string signature = MakeSignature ("POST", AccessUrl, headers);
string compositeSigningKey = MakeSigningKey (config.ConsumerSecret, requestToken.TokenSecret);
string oauth_signature = MakeOAuthSignature (compositeSigningKey, signature);
var wc = new WebClient ();
headers.Add ("oauth_signature", OAuth.PercentEncode (oauth_signature));
wc.Headers [HttpRequestHeader.Authorization] = HeadersToOAuth (headers);
return Task<Tuple<OAuthToken, UserInfos>>.Factory.StartNew (() => {
try {
ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true;
ServicePointManager.Expect100Continue = false;
var result = HttpUtility.ParseQueryString (wc.UploadString (new Uri (AccessUrl), content));
OAuthToken token = new OAuthToken (result["oauth_token"], result["oauth_token_secret"]);
UserInfos infos = new UserInfos (result["user_id"],
result["screen_name"]);
return Tuple.Create (token, infos);
} catch (WebException e) {
Console.WriteLine ("Access token error");
var x = e.Response.GetResponseStream ();
var j = new System.IO.StreamReader (x);
Console.WriteLine (j.ReadToEnd ());
Console.WriteLine (e);
throw e;
// fallthrough for errors
}
});
}