void LoginToLinkedIn()
{
var auth = new OAuth2Authenticator(
clientId: "**",
clientSecret: "**",
scope: "r_basicprofile r_emailaddress",
authorizeUrl: new Uri("https://www.linkedin.com/oauth/v2/authorization"),
redirectUrl: new Uri("https://www.linkedin.com/auth/callback"),
accessTokenUrl: new Uri("https://www.linkedin.com/oauth/v2/accessToken")
);
// If authorization succeeds or is canceled, .Completed will be fired.
auth.AllowCancel = true;
auth.ShowUIErrors = false;
//auth.Error += (sender, e) => auth.OnCancelled();
auth.Completed += async (sender, eventArgs) => {
if (!eventArgs.IsAuthenticated)
{
System.Console.Out.WriteLine("Authentication error");
return;
}
else
{
System.Console.Out.WriteLine("Authentication Succeded");
string dd = eventArgs.Account.Username;
var values = eventArgs.Account.Properties;
foreach (KeyValuePair<string, string> temp in values)
{
System.Console.Out.WriteLine("eventArgs.Account.Properties: Temp.Key: {0}, Temp.Value: {1}", temp.Key, temp.Value);
}
var access_token = values["access_token"];
var request = HttpWebRequest.Create(string.Format(@"https://api.linkedin.com/v1/people/~:(id,firstName,lastName,picture-url)?format=json&oauth2_access_token=" + access_token, ""));
request.ContentType = "application/json";
request.Method = "GET";
using (HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse)
{
System.Console.Out.WriteLine("Entered, Stautus Code is: {0}", response.StatusCode);
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
var content = reader.ReadToEnd();
if (!string.IsNullOrWhiteSpace(content))
{
System.Console.Out.WriteLine(content);
}
var result = JsonConvert.DeserializeObject<Dictionary<string,string>>(content);
var userID = result["id"];
var name = result["firstName"] + " " + result["lastName"];
application.currentUserName = name;
var _access_token = eventArgs.Account.Properties["access_token"];
Java.Net.URL myUri = new Java.Net.URL(result["pictureUrl"]);
imageUrl = myUri;
realName = name;
var authData = new Dictionary<string, string>();
authData.Add("user_id", userID.ToString());
authData.Add("screen_name", name.ToString());
authData.Add("oauth_token", _access_token.ToString());
await ParseLoginOrCreateLinkedIn(authData);
}
}
}
};
var ui = auth.GetUI(this);
StartActivity(ui);
}
public async Task<ParseUser> ParseLoginOrCreateLinkedIn(Dictionary<string, string> authInfo)
{
var rest = new RestSharp.RestClient("https://api.parse.com");
var req = new RestSharp.RestRequest("1/users/", RestSharp.Method.POST);
req.AddHeader("X-Parse-Application-Id", "nDGlfLgW2Ml2AV9jgFOiNVE1sCstKrvVaOOVyGkM");
req.AddHeader("X-Parse-REST-API-Key", "J1YIQXRZ8JeyKEquXGffuTq5JhKjxDtEmMM2ggb4");
req.AddHeader("Content-Type", "application/json");
var payload = "{ \"authData\": { \"linkedin\": { ";
payload += "\"id\": \"" + authInfo["user_id"] + "\", ";
payload += "\"screen_name\": \"" + authInfo["screen_name"] + "\", ";
payload += "\"auth_token\": \"" + authInfo["oauth_token"] + "\", ";
payload += "} } }";
req.AddParameter("application/json", payload, RestSharp.ParameterType.RequestBody);
RestSharp.IRestResponse res = null;
var result = await Task<JContainer>.Run(() =>
{
res = rest.Execute(req);
var content = res.Content;
return JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JContainer>(content);
});
var sessionToken = (String)result["sessionToken"];
var objectId = (String)result["objectId"];
if (res.StatusCode == System.Net.HttpStatusCode.Created)
{
req = new RestSharp.RestRequest("1/users/" + objectId, RestSharp.Method.PUT);
req.AddHeader("X-Parse-Application-Id", "nDGlfLgW2Ml2AV9jgFOiNVE1sCstKrvVaOOVyGkM");
req.AddHeader("X-Parse-REST-API-Key", "J1YIQXRZ8JeyKEquXGffuTq5JhKjxDtEmMM2ggb4");
req.AddHeader("X-Parse-Session-Token", sessionToken);
req.AddHeader("Content-Type", "application/json");
req.AddParameter("application/json", "{ \"username\": \"" + authInfo["screen_name"] + "\" }", RestSharp.ParameterType.RequestBody);
result = await Task<JContainer>.Run(() =>
{
res = rest.Execute(req);
var content = res.Content;
return JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JContainer>(content);
});
}
await ParseUser.BecomeAsync(sessionToken);
if (ParseUser.CurrentUser.ContainsKey("Name"))
ParseUser.CurrentUser["Name"] = realName;
else
ParseUser.CurrentUser.Add("Name", realName);
application.currentUserName = realName;
var webClient = new WebClient();
byte[] bytes = null;
application.currentUserImageUrl = imageUrl.ToString();
bytes = await webClient.DownloadDataTaskAsync(imageUrl.ToString());
ParseFile saveImageFile = new ParseFile("profileImage.jpg", bytes);
if (ParseUser.CurrentUser.ContainsKey("profile_pic"))
ParseUser.CurrentUser["profile_pic"] = saveImageFile;
else
ParseUser.CurrentUser.Add("profile_pic", saveImageFile);
application.currentUser = ParseUser.CurrentUser;
await ParseUser.CurrentUser.SaveAsync();
DisplayLoadingMessage(false);
ChangeScreen();
return ParseUser.CurrentUser;
}