public static async Task<TwitterCredentials> ConfirmPin(this IUserSession session, string pinAuthorizationCode, string oAuthToken)
{
if (string.IsNullOrWhiteSpace(pinAuthorizationCode))
throw new ArgumentException("pin AuthorizationCode must be specified", pinAuthorizationCode);
var sinceEpoch = session.GenerateTimestamp();
var nonce = session.GenerateNoonce();
var dataToPost = string.Format(
"OAuth realm=\"\", oauth_nonce=\"{0}\", oauth_timestamp=\"{1}\", oauth_consumer_key=\"{2}\", oauth_signature_method=\"HMAC-SHA1\", oauth_version=\"1.0\", oauth_verifier=\"{3}\", oauth_token=\"{4}\"",
nonce,
sinceEpoch,
session.clientID,
pinAuthorizationCode,
oAuthToken);
var response = await PostData(TwitterApi.AuthorizeTokenUrl(), dataToPost);
if (string.IsNullOrWhiteSpace(response))
return TwitterCredentials.Null; //oops something wrong here
var accessToken = "";
var accessTokenSecret = "";
var userId = "";
var screenName = "";
foreach (var splits in response.Split('&').Select(t => t.Split('=')))
{
switch (splits[0])
{
case "oauth_token": //these tokens are request tokens, first step before getting access tokens
accessToken = splits[1];
break;
case "oauth_token_secret":
accessTokenSecret = splits[1];
break;
case "user_id":
userId = splits[1];
break;
case "screen_name":
screenName = splits[1];
break;
}
}
if (accessToken != null && accessTokenSecret != null && userId != null && screenName != null)
{
if (await session.StartApplicationOnlyAuth())
{
var twitterCreds = new TwitterCredentials()
{
ConsumerKey = session.clientID,
ConsumerSecret = session.clientSecret,
BearerToken = session.bearerToken,
ScreenName = screenName,
Token = accessToken,
TokenSecret = accessTokenSecret,
UserID = Int64.Parse(userId),
Valid = true
};
session.IsActive = true;
return twitterCreds;
}
}
return TwitterCredentials.Null;
}