public void AuthCallback(IManosContext ctx)
{
if (testInstance) {
ctx.Response.SetCookie ("apachai:userId", 1.ToString ());
ctx.Response.SetCookie ("apachai:token", "bar");
store.SetUserInfos (1, "the_test");
store.SetExtraUserInfos (1, "http://neteril.org/img/twitter.png", "The Test", "http://neteril.org", "My Foo Bar Life");
store.SetUserAccessTokens (1, "bar", "bar");
ctx.Response.Redirect ("/Post");
return;
}
string token = ctx.Request.Data["oauth_token"];
string tokenVerifier = ctx.Request.Data["oauth_verifier"];
Log.Info ("Tokens and verifier: {0} and {1}", token, tokenVerifier);
oauth.AcquireAccessToken (new OAuthToken (token, store.GetTempTokenSecret (token)), tokenVerifier)
.ContinueWith (resultTask => {
var result = resultTask.Result;
var userInfos = result.Item2;
var tokens = result.Item1;
Log.Info ("Access token call return: {0} and {1}", userInfos.ToString (), tokens.ToString ());
bool first = false;
if ((first = !store.DoWeKnowUser (userInfos.UserId)))
store.SetUserInfos (userInfos.UserId, userInfos.UserName);
if (first || store.DoesUserNeedInfoUpdate (userInfos.UserId) ) {
Task.Factory.StartNew (() => {
var twitter = new Twitter (oauth);
twitter.Tokens = tokens;
var twitterInfos = twitter.GetUserInformations (userInfos.UserId.ToString ());
Log.Info ("Got twitter json infos for {0}", userInfos.UserId.ToString ());
var retDict = JSON.JsonDecode (twitterInfos) as Dictionary<object, object>;
if (retDict == null)
return;
var pUrl = retDict["profile_image_url"] as string;
pUrl = string.IsNullOrEmpty (pUrl) ? string.Empty : pUrl.Replace ("normal.", "reasonably_small.");
var pageUrl = retDict["url"] as string ?? string.Empty;
var name = retDict["name"] as string ?? string.Empty;
var desc = retDict["description"] as string ?? string.Empty;
store.SetExtraUserInfos (userInfos.UserId,
pUrl,
name,
pageUrl,
desc);
});
}
store.SetUserAccessTokens (userInfos.UserId, tokens.Token, tokens.TokenSecret);
ctx.Response.SetCookie ("apachai:userId", userInfos.UserId.ToString (), TimeSpan.FromDays (30));
ctx.Response.SetCookie ("apachai:token", tokens.Token, TimeSpan.FromDays (30));
ctx.Response.Redirect ("/Post");
}, ExecuteSync);
}