public async Task <IHttpActionResult> FacebookUpdate(AccountFacebookConnect model) { var client = new FacebookClient(model.AccessToken); client.AppId = AppConfig.Settings.FacebookId; client.AppSecret = AppConfig.Settings.FacebookSecret; dynamic fbresult = client.Get("me?fields=id,email,first_name,last_name,gender,locale,link,timezone,location,picture"); var social = await AppDatabase.UserFacebookClaims.FindAsync(fbresult.id); var user = await AppDatabase.Users.FindAsync(UserId); if (social == null) { social = new UserFacebookClaim(); social.Id = fbresult.id; social.User = user; social.UserId = UserId; social.AccessToken = model.AccessToken; social.Provider = APIConstants.FACEBOOK; AppDatabase.UserFacebookClaims.Add(social); } FacebookUpdateInternal(social, fbresult); await AppDatabase.SaveChangesAsync(); Session.UpdateFrom(user); return(Ok(GetAccountDetails())); }
public async Task <IHttpActionResult> FacebookConnect(AccountFacebookConnect model) { if (!Authorization.IsAuthenticated) { return(await FacebookCreate(model)); } return(await FacebookUpdate(model)); }
public async Task <IHttpActionResult> FacebookCreate(AccountFacebookConnect model) { var client = new FacebookClient(model.AccessToken); client.AppId = AppConfig.Settings.FacebookId; client.AppSecret = AppConfig.Settings.FacebookSecret; dynamic fbresult = client.Get("me?fields=id,email,first_name,last_name,gender,locale,link,timezone,location,picture"); string email = fbresult.email; var social = await AppDatabase.UserFacebookClaims.FindAsync(fbresult.id); if (social != null) { // old profile FacebookUpdateInternal(social, fbresult); await AppDatabase.SaveChangesAsync(); var oldUser = social.User; Session.UpdateFrom(oldUser); return(Ok(GetAccountDetails())); } //email in use ? var user3 = await AppDatabase.Users.FirstOrDefaultAsync(o => o.Email == email); if (user3 != null) { return(BadRequest("Email is in use. Try account recovery.")); } // new user var password = new string(Guid.NewGuid().ToString().Take(7).ToArray()); var user = new UserAccount { CreatedOn = DateTime.UtcNow, ModifiedOn = DateTime.UtcNow, Email = email, Id = Guid.NewGuid().ToString(), EmailPassword = UserPassword.Create(password), }; AppDatabase.Users.Add(user); social = new UserFacebookClaim { Id = fbresult.id, UserId = user.Id, User = user, AccessToken = model.AccessToken }; FacebookUpdateInternal(social, fbresult); AppDatabase.UserFacebookClaims.Add(social); await SendWelcomeMail(new UserEmailViewModel { UserId = user.Id, UserEmail = user.Email }); await AppDatabase.SaveChangesAsync(); Session.UpdateFrom(user); return(Ok(GetAccountDetails())); }