public IHttpActionResult GetShoutUserBySocial(string socialId, AuthType authType) { ShoutUser shoutUser = null; if (!String.IsNullOrEmpty(socialId)) { switch (authType) { case AuthType.Facebook: shoutUser = db.ShoutUsers.FirstOrDefault(x => x.FacebookID == socialId); break; } } if (shoutUser == null) { return(NotFound()); } ShoutUserDto ret = new ShoutUserDto() { ID = shoutUser.ID, Email = shoutUser.Email, UserName = shoutUser.UserName, AuthType = AuthType.Facebook, ShoutSocialID = shoutUser.FacebookID, AvatarUrl = shoutUser.AvatarUrl }; return(Ok(ret)); }
async Task <bool> GetFacebook(Account account) { try { var request = new OAuth2Request("GET", new Uri("https://graph.facebook.com/me?fields=email,first_name,last_name,gender,picture.type(large)"), null, account); var response = await request.GetResponseAsync(); var fbUser = Newtonsoft.Json.Linq.JObject.Parse(response.GetResponseText()); var name = fbUser["first_name"].ToString().Replace("\"", ""); var socialID = fbUser["id"].ToString().Replace("\"", ""); var email = fbUser["email"].ToString().Replace("\"", ""); var avatarUrl = ""; try { avatarUrl = fbUser["picture"]["data"]["url"].ToString(); Settings.Current.AvatarUrl = avatarUrl; //Settings.Current.Avatar = await CurrentApp.Current.MainViewModel.ServiceApi.GetAvatar(Settings.Current.AvatarUrl); } catch (Exception) { } ShoutUserDto userDto = null; if (!String.IsNullOrEmpty(Settings.Current.SocialUserID)) { userDto = await CurrentApp.Current.MainViewModel.ServiceApi.GetShoutUserBySocial(Settings.Current.SocialUserID); if (userDto != null) { Settings.Current.UserGuid = userDto.ID; } } if (userDto == null || name != userDto.UserName || socialID != userDto.ShoutSocialID || email != userDto.Email || avatarUrl != userDto.AvatarUrl) { Settings.Current.UserFirstName = name; Settings.Current.SocialUserID = socialID; Settings.Current.UserEmail = email; Settings.Current.UserAuth = Models.AuthType.Facebook; //This is what not we have saved on the server await GetOrCreate(false); } } catch (Exception) { return(false); } return(true); }
public async Task GetOrCreate(bool checkSocial = true) { bool patch = false; ShoutUserDto userDto = null; if (checkSocial && !String.IsNullOrEmpty(Settings.Current.SocialUserID)) { userDto = await CurrentApp.Current.MainViewModel.ServiceApi.GetShoutUserBySocial(Settings.Current.SocialUserID); } if (userDto == null) { if (!String.IsNullOrEmpty(Settings.Current.UserEmail)) { userDto = await CurrentApp.Current.MainViewModel.ServiceApi.GetShoutUserByEmail(Settings.Current.UserEmail); } if (userDto == null) { // New user ShoutUser u = ShoutUserFromSettings(true); bool success = await CurrentApp.Current.MainViewModel.ServiceApi.NewShoutUser(u); if (success) { Settings.Current.UserGuid = u.ID; } } else { // Likely created by someone else patch = true; } } else { // Something to be updated patch = true; } if (patch) { ShoutUser u = ShoutUserFromSettings(false); //if user email is found, update that await CurrentApp.Current.MainViewModel.ServiceApi.PatchShoutUser(u); } }