public void CreateUserContacts(IEnumerable <UserContactEntity> userContactsToUpdate)
        {
            var now = m_dateTimeProvider.UtcNow;

            foreach (var userContactEntity in userContactsToUpdate)
            {
                userContactEntity.ActiveFrom = now;
                m_userContactRepository.Create(userContactEntity);
            }
        }
Beispiel #2
0
        public async Task <IdResult> ChangeInvitationState(Contact invitorUserProfile)
        {
            if (invitorUserProfile == null)
            {
                return(new IdResult()
                {
                    IsOk = false,
                    ErrorMessage = "No user info"
                });
            }
            var dbUser = DbUser;

            using (UserContactRepository _userContactRepository = new UserContactRepository(Context, dbUser, null))
                using (UserProfileRepository _userProfileRepository = new UserProfileRepository(Context, dbUser, null))
                {
                    var invitorUserProfileFromDb = _userProfileRepository.GetById(invitorUserProfile.Id);

                    if (invitorUserProfile.Id != Guid.Empty && invitorUserProfileFromDb != null)
                    {
                        var userContactDB = _userContactRepository.GetByContactUserId(invitorUserProfileFromDb.Id, dbUser);
                        if (userContactDB != null)
                        {
                            userContactDB.State     = invitorUserProfile.State;
                            userContactDB.StateDate = DateTime.Now;

                            var senderUser = _userProfileRepository.GetById(userContactDB.MainUserId);
                            if (invitorUserProfile.State == (byte)InvitationStates.Accepted)
                            {
                                _userContactRepository.Create(new UserContact()
                                {
                                    ContactName   = senderUser.FullName,
                                    ContactUserId = senderUser.Id,
                                    MainUserId    = dbUser,
                                    State         = (int)InvitationStates.Accepted,
                                    StateDate     = DateTime.Now
                                });

                                Utilities.AddNotification(dbUser, userContactDB.MainUserId, dbUser, (int)NotificationTypes.InvitationToContactsConfirmed,
                                                          string.Format("You invitaion is accepted"));
                            }
                            Context.SaveChanges();
                            return(new IdResult()
                            {
                                IsOk = true,
                                Id = userContactDB.Id,
                            });
                        }
                    }
                }

            return(new IdResult()
            {
                IsOk = false,
                ErrorMessage = "Error"
            });
            //var user = JsonConvert.DeserializeObject<UserRegister>(userData);
        }
Beispiel #3
0
        public async Task <BoolResult> InsertSystemInvitation(Invitation invitation)
        {
            if (invitation == null)
            {
                return(new BoolResult()
                {
                    IsOk = false,
                    ErrorMessage = "No invitation info"
                });
            }
            var dbUser = DbUser;

            using (Common.Model.InvitationRepository _invitationRepository = new Common.Model.InvitationRepository(Context, dbUser, null))
                using (UserContactRepository _userContactRepository = new UserContactRepository(Context, dbUser, null))
                    using (UserProfileRepository _userProfileRepository = new UserProfileRepository(Context, dbUser, null))
                    {
                        //checkIfPersonIsInUsers
                        var user = await UserManager.FindByEmailAsync(invitation.Email);

                        if (user == null)
                        {
                            //create Invitation
                            var invitationByEmail = _invitationRepository.GetInvitationDoesNotExistsByEmail(invitation.Email);

                            if (invitationByEmail.IsOk)
                            {
                                using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
                                {
                                    try
                                    {
                                        //create new Invitation
                                        var activationCode = string.Empty;
                                        _invitationRepository.Create(new Guid("c51c4a63-8278-4013-9639-8f9ac6775b72"), null,
                                                                     invitation.Email, out activationCode);

                                        Dictionary <string, string> values = new Dictionary <string, string>();
                                        values.Add("[ActivationCode]", activationCode);
                                        MessageHelper.SendMessage(MessageTemplateTypes.RegistrationActivationCode, values, null, invitation.Email, null, bccEmail: "*****@*****.**");

                                        Context.SaveChanges();
                                        transactionScope.Complete();
                                        return(new BoolResult()
                                        {
                                            IsOk = true
                                        });
                                    }
                                    catch (Exception e)
                                    {
                                        LogHelper.WriteError(e);
                                        return(new BoolResult()
                                        {
                                            IsOk = false,
                                            ErrorMessage = e.ToString()
                                        });
                                    }
                                }
                            }
                            //check if Invitation exists
                            return(new BoolResult()
                            {
                                IsOk = false,
                                ErrorMessage = invitationByEmail.ErrorMessage
                            });
                        }


                        //create contactInvitation
                        var invitationToContactsByUserId = _userContactRepository.GetInvitationInContactsDoesNotExistsByUserId(dbUser, user.UserProfile.Id);

                        if (invitationToContactsByUserId.IsOk)
                        {
                            _userContactRepository.Create(new UserContact()
                            {
                                ContactName   = user.UserProfile.FullName,
                                ContactUserId = user.UserProfile.Id,
                                MainUserId    = DbUser,
                                State         = (int)InvitationStates.Pending,
                                StateDate     = DateTime.Now
                            });
                            try
                            {
                                Context.SaveChanges();
                                var senderUser = _userProfileRepository.GetById(dbUser);
                                Utilities.AddNotification(dbUser, user.UserProfile.Id, dbUser, (int)NotificationTypes.InvitationToContactsRecieved,
                                                          string.Format("You are added to {0}'s contacts. Please Accept or Reject invitation", senderUser.FullName));


                                return(new BoolResult()
                                {
                                    IsOk = true,
                                });
                            }
                            catch (Exception e)
                            {
                                LogHelper.WriteError(e);
                            }
                        }

                        return(new BoolResult()
                        {
                            IsOk = false,
                            ErrorMessage = invitationToContactsByUserId.ErrorMessage
                        });
                    }


            //var invitation = _invitationRepository.GetById(user.InvitationId); ;
            //if (invitation != null)
            //{
            //    using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            //    {
            //        try
            //        {
            //            var userRegistration = new ApplicationUser
            //            {
            //                UserName = user.Email,
            //                Email = user.Email,
            //                UserProfile = new Authentication.UserProfile() { Id = Guid.NewGuid(), FirstName = user.FirstName, LastName = user.LastName }
            //            };
            //            var result = await UserManager.CreateAsync(userRegistration, user.Password);

            //            if (result.Succeeded)
            //            {
            //                var addToRole = await this.UserManager.AddToRoleAsync(userRegistration.Id, MindCorners.Common.Code.Constants.GeneralUserRoleId);
            //                if (addToRole.Succeeded)
            //                {
            //                    invitation.State = (int)InvitationStates.Valid;
            //                    invitation.StateDate = DateTime.Now;
            //                    _invitationRepository.Update(invitation);
            //                    Context.SaveChanges();
            //                    //_invitationRepository.SaveChanges();
            //                    transactionScope.Complete();
            //                    return new IdResult()
            //                    {
            //                        IsOk = true,
            //                        Id = userRegistration.UserProfile.Id
            //                    };
            //                }
            //                return new IdResult()
            //                {
            //                    IsOk = false,
            //                    ErrorMessage = string.Join(",", addToRole.Errors)
            //                };
            //                //   return RedirectToAction("Index", "Home");
            //            }
            //            return new IdResult()
            //            {
            //                IsOk = false,
            //                ErrorMessage = string.Join(",", result.Errors)
            //            };

            //        }
            //        catch (Exception ex)
            //        {
            //            LogHelper.WriteError(ex);
            //            return new IdResult()
            //            {
            //                IsOk = false,
            //                ErrorMessage = ex.ToString()
            //            };
            //        }
            //    }
            //}
        }
        public async Task <ObjectResult <User> > RegisterUser(UserRegister user)
        {
            if (user.InvitationId == Guid.Empty)
            {
                return(new ObjectResult <User>()
                {
                    IsOk = false,
                    ErrorMessage = "No valid invitation exists"
                });
            }
            using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                try
                {
                    var userRegistration = new ApplicationUser
                    {
                        UserName    = user.Email,
                        Email       = user.Email,
                        UserProfile =
                            new Authentication.UserProfile()
                        {
                            Id        = Guid.NewGuid(),
                            FirstName = user.FirstName,
                            LastName  = user.LastName
                        }
                    };
                    var result = await UserManager.CreateAsync(userRegistration, user.Password);

                    if (result.Succeeded)
                    {
                        var dbUser = userRegistration.UserProfile.Id;
                        using (InvitationRepository _invitationRepository = new InvitationRepository(Context, dbUser, null))
                            using (UserContactRepository userContactRepository = new UserContactRepository(Context, dbUser, null))
                                using (UserProfileRepository userProfileRepository = new UserProfileRepository(Context, dbUser, null))
                                {
                                    var invitation = _invitationRepository.GetById(user.InvitationId);
                                    if (invitation != null)
                                    {
                                        var addToRole =
                                            await
                                            this.UserManager.AddToRoleAsync(userRegistration.Id,
                                                                            MindCorners.Common.Code.Constants.GeneralUserRoleId);

                                        if (addToRole.Succeeded)
                                        {
                                            invitation.State     = (int)InvitationStates.Accepted;
                                            invitation.StateDate = DateTime.Now;
                                            _invitationRepository.Update(invitation);

                                            //add userToUserContacts

                                            userContactRepository.Create(new UserContact()
                                            {
                                                ContactName   = userRegistration.UserProfile.FullName,
                                                ContactUserId = userRegistration.UserProfile.Id,
                                                MainUserId    = invitation.CreatorId,
                                                State         = (int)InvitationStates.Accepted,
                                                StateDate     = DateTime.Now
                                            });

                                            var invitationCreator = userProfileRepository.GetById(invitation.CreatorId);
                                            userContactRepository.Create(new UserContact()
                                            {
                                                ContactName   = invitationCreator.FullName,
                                                ContactUserId = invitation.CreatorId,
                                                MainUserId    = userRegistration.UserProfile.Id,
                                                State         = (int)InvitationStates.Accepted,
                                                StateDate     = DateTime.Now
                                            });

                                            //add create Circle of two users
                                            //var circle = new Common.Model.Circle() { IsGroup = false };
                                            //CircleRepository circleRepository = new CircleRepository(Context, dbUser, null);
                                            //circleRepository.Create(circle);
                                            //Context.SaveChanges();

                                            //circleRepository.AddMainPersonToCircleUser(circle.Id, dbUser);
                                            //circleRepository.SynchCircleUsers(circle.Id, new List<Guid>() { userRegistration.UserProfile.Id });

                                            Context.SaveChanges();

                                            //_invitationRepository.SaveChanges();
                                            transactionScope.Complete();
                                            return(new ObjectResult <User>()
                                            {
                                                IsOk = true,
                                                ReturnedObject = new User()
                                                {
                                                    FirstName = userRegistration.UserProfile.FirstName,
                                                    LastName = userRegistration.UserProfile.LastName,
                                                    Email = userRegistration.Email,
                                                    FullName = userRegistration.UserProfile.FullName,
                                                    Id = userRegistration.UserProfile.Id,
                                                    //ProfileImage = applicationUser.UserProfile.ProfileImage,
                                                    ProfileImageString = Request.GetFileUrl((int)FileType.Profile, userRegistration.UserProfile.ProfileImageString)
                                                }
                                            });
                                        }
                                        return(new ObjectResult <User>()
                                        {
                                            IsOk = false,
                                            ErrorMessage = string.Join(",", addToRole.Errors)
                                        });
                                        //   return RedirectToAction("Index", "Home");
                                    }
                                    return(new ObjectResult <User>()
                                    {
                                        IsOk = false,
                                        ErrorMessage = string.Join(",", result.Errors)
                                    });
                                }
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.WriteError(ex);
                    return(new ObjectResult <User>()
                    {
                        IsOk = false,
                        ErrorMessage = ex.ToString()
                    });
                }
                //var user = JsonConvert.DeserializeObject<UserRegister>(userData);
            }

            return(new ObjectResult <User>()
            {
                IsOk = false,
                ErrorMessage = "Error"
            });
        }
        public async Task <ObjectResult <User> > RegisterExternal(RegisterExternalBindingModel model)
        {
            bool registrationOk = false;

            if (!model.InvitationId.HasValue || model.InvitationId == Guid.Empty)
            {
                return(new ObjectResult <User>()
                {
                    IsOk = false,
                    ErrorMessage = "No valid invitation exists"
                });
            }


            // if (model.InvitationId.HasValue)
            {
                using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
                {
                    try
                    {
                        var userData = await GetFacebookProfileAsync(model.ExternalAccessToken);

                        var fileFullName = string.Empty;
                        if (userData.picture != null)
                        {
                            var picture = GetProfilePicture(userData.picture.data.url);
                            if (picture != null)
                            {
                                fileFullName = Utilities.UploadBlob("profile-images", string.Format("{0}{1}", Guid.NewGuid(), ".jpg"), picture);
                            }
                        }

                        var user = new ApplicationUser
                        {
                            UserName    = model.UserName,
                            Email       = model.UserName,
                            UserProfile = new Authentication.UserProfile()
                            {
                                Id         = Guid.NewGuid(),
                                FirstName  = userData.first_name,
                                LastName   = userData.last_name,
                                MiddleName = userData.middle_name,
                                //ProfileImage = picture,
                                ProfileImageString = fileFullName
                            }
                        };
                        var result = await UserManager.CreateAsync(user);

                        if (result.Succeeded)
                        {
                            var info = new ExternalLoginInfo()
                            {
                                DefaultUserName = model.UserName,
                                Login           = new UserLoginInfo(model.Provider, userData.id)
                            };

                            result = await UserManager.AddLoginAsync(user.Id, info.Login);

                            if (result.Succeeded)
                            {
                                using (InvitationRepository _invitationRepository = new InvitationRepository(Context, user.UserProfile.Id, null))
                                    using (UserContactRepository userContactRepository = new UserContactRepository(Context, user.UserProfile.Id, null))
                                        using (UserProfileRepository userProfileRepository = new UserProfileRepository(Context, user.UserProfile.Id, null))
                                        {
                                            var invitation = _invitationRepository.GetById(model.InvitationId.Value);
                                            if (invitation != null)
                                            {
                                                var role      = DbContext.Roles.First(p => p.Id == invitation.RoleId.ToString());
                                                var addToRole = await this.UserManager.AddToRoleAsync(user.Id, role != null?role.Name : MindCorners.Common.Code.Constants.GeneralUserRoleId);

                                                if (addToRole.Succeeded)
                                                {
                                                    invitation.State     = (int)InvitationStates.Accepted;
                                                    invitation.StateDate = DateTime.Now;
                                                    _invitationRepository.Update(invitation);


                                                    //add userToUserContacts

                                                    userContactRepository.Create(new UserContact()
                                                    {
                                                        ContactName   = user.UserProfile.FullName,
                                                        ContactUserId = user.UserProfile.Id,
                                                        MainUserId    = invitation.CreatorId,
                                                        State         = (int)InvitationStates.Accepted,
                                                        StateDate     = DateTime.Now
                                                    });

                                                    var invitationCreator = userProfileRepository.GetById(invitation.CreatorId);
                                                    userContactRepository.Create(new UserContact()
                                                    {
                                                        ContactName   = invitationCreator.FullName,
                                                        ContactUserId = invitation.CreatorId,
                                                        MainUserId    = user.UserProfile.Id,
                                                        State         = (int)InvitationStates.Accepted,
                                                        StateDate     = DateTime.Now
                                                    });


                                                    //add create Circle of two users
                                                    //var circle = new Common.Model.Circle() { IsGroup = false };
                                                    //CircleRepository circleRepository = new CircleRepository(Context, dbUser, null);
                                                    //circleRepository.Create(circle);
                                                    //Context.SaveChanges();

                                                    //circleRepository.AddMainPersonToCircleUser(circle.Id, dbUser);
                                                    //circleRepository.SynchCircleUsers(circle.Id, new List<Guid>() { userRegistration.UserProfile.Id });

                                                    Context.SaveChanges();

                                                    //_invitationRepository.SaveChanges();
                                                    transactionScope.Complete();
                                                    return(new ObjectResult <User>()
                                                    {
                                                        IsOk = true,
                                                        ReturnedObject = new User()
                                                        {
                                                            FirstName = user.UserProfile.FirstName,
                                                            LastName = user.UserProfile.LastName,
                                                            Email = user.Email,
                                                            FullName = user.UserProfile.FullName,
                                                            Id = user.UserProfile.Id,
                                                            //ProfileImage = applicationUser.UserProfile.ProfileImage,
                                                            ProfileImageString = Request.GetFileUrl((int)FileType.Profile, user.UserProfile.ProfileImageString)
                                                        }
                                                    });
                                                }

                                                return(new ObjectResult <User>()
                                                {
                                                    IsOk = false,
                                                    ErrorMessage = string.Join(",", addToRole.Errors)
                                                });
                                                //   return RedirectToAction("Index", "Home");
                                            }
                                            return(new ObjectResult <User>()
                                            {
                                                IsOk = false,
                                                ErrorMessage = "No valid Invitation"
                                            });
                                        }
                            }
                            return(new ObjectResult <User>()
                            {
                                IsOk = false,
                                ErrorMessage = string.Join(",", result.Errors)
                            });
                        }
                        return(new ObjectResult <User>()
                        {
                            IsOk = false,
                            ErrorMessage = string.Join(",", result.Errors)
                        });
                        //AddErrors(result);
                    }
                    catch (Exception ex)
                    {
                        LogHelper.WriteError(ex);
                        return(new ObjectResult <User>()
                        {
                            IsOk = false,
                            ErrorMessage = ex.ToString()
                        });
                    }
                }
            }

            //if (!ModelState.IsValid)
            //{
            //    return BadRequest(ModelState);
            //}

            //var verifiedAccessToken = await VerifyExternalAccessToken(model.Provider, model.ExternalAccessToken);
            //if (verifiedAccessToken == null)
            //{
            //    return BadRequest("Invalid Provider or External Access Token");
            //}

            //user = new IdentityUser() { UserName = model.UserName };
            //ApplicationUser user = await UserManager.CreateAsync(new UserLoginInfo(model.Provider, model.ExternalAccessToken));

            // bool hasRegistered = user != null;

            // if (hasRegistered)
            // {
            //     return BadRequest("External user is already registered");
            // }

            //// user = new IdentityUser() { UserName = model.UserName };

            // IdentityResult result = await UserManager.CreateAsync(user);
            // if (!result.Succeeded)
            // {
            //     return GetErrorResult(result);
            // }

            // var info = new ExternalLoginInfo()
            // {
            //     DefaultUserName = model.UserName,
            //     Login = new UserLoginInfo(model.Provider, verifiedAccessToken.user_id)
            // };

            // result = await _repo.AddLoginAsync(user.Id, info.Login);
            // if (!result.Succeeded)
            // {
            //     return GetErrorResult(result);
            // }

            // //generate access token response
            // var accessTokenResponse = GenerateLocalAccessTokenResponse(model.UserName);

            // return Ok(accessTokenResponse);



            return(new ObjectResult <User>()
            {
                IsOk = false,
                ErrorMessage = "Error"
            });
        }
        public async Task <ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
        {
            if (User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("Index", "Manage"));
            }

            if (ModelState.IsValid)
            {
                // Get the information about the user from the external login provider
                var info = await AuthenticationManager.GetExternalLoginInfoAsync();

                if (info == null)
                {
                    return(View("ExternalLoginFailure"));
                }
                //var ext =
                //    await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
                //var email = ext.Claims.First(x => x.Type.EndsWith("emailaddress")).Value;
                //var name = ext.Claims.First(x => x.Type.EndsWith("name")).Value;
                //var nameIdentifier = ext.Claims.First(x => x.Type.EndsWith("nameidentifier")).Value;


                var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();

                //var firstNameClaim = loginInfo.ExternalIdentity.Claims.First(c => c.Type == "urn:facebook:first_name");

                string firstName  = string.Empty;
                string lastName   = string.Empty;
                string middleName = string.Empty;
                string email      = string.Empty;
                byte[] picture    = null;

                if (loginInfo.Login.LoginProvider == "Facebook")
                {
                    var     identity     = AuthenticationManager.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie);
                    var     access_token = identity.FindFirstValue("FacebookAccessToken");
                    var     fb           = new FacebookClient(access_token);
                    dynamic myInfo       = fb.Get("/me?fields=first_name,middle_name,last_name,id,email,picture.width(600)");
                    // specify the email field
                    loginInfo.Email = myInfo.email;
                    firstName       = myInfo.first_name;
                    middleName      = myInfo.middle_name;
                    lastName        = myInfo.last_name;
                    picture         = GetProfilePicture(GetFacebookImageUrl(myInfo));
                }

                bool registrationOk = false;
                if (InvitationId.HasValue)
                {
                    using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
                    {
                        try
                        {
                            var fileFullName = string.Empty;
                            if (picture != null)
                            {
                                fileFullName = Utilities.UploadBlob("profile-images", string.Format("{0}{1}", Guid.NewGuid(), ".jpg"), picture);
                            }

                            var user = new ApplicationUser
                            {
                                UserName    = model.Email,
                                Email       = model.Email,
                                UserProfile = new UserProfile()
                                {
                                    Id         = Guid.NewGuid(),
                                    FirstName  = firstName,
                                    LastName   = lastName,
                                    MiddleName = middleName,
                                    //ProfileImage = picture,
                                    ProfileImageString = fileFullName
                                }
                            };
                            var result = await UserManager.CreateAsync(user);

                            if (result.Succeeded)
                            {
                                result = await UserManager.AddLoginAsync(user.Id, info.Login);

                                if (result.Succeeded)
                                {
                                    using (InvitationRepository _invitationRepository = new InvitationRepository(Context, user.UserProfile.Id, null))
                                        using (UserContactRepository userContactRepository = new UserContactRepository(Context, user.UserProfile.Id, null))
                                            using (UserProfileRepository userProfileRepository = new UserProfileRepository(Context, user.UserProfile.Id, null))
                                            {
                                                var invitation = _invitationRepository.GetById(InvitationId.Value);
                                                if (invitation != null)
                                                {
                                                    var role      = DbContext.Roles.First(p => p.Id == invitation.RoleId.ToString());
                                                    var addToRole = await this.UserManager.AddToRoleAsync(user.Id, role != null?role.Name : MindCorners.Common.Code.Constants.GeneralUserRoleId);

                                                    if (addToRole.Succeeded)
                                                    {
                                                        invitation.State     = (int)InvitationStates.Accepted;
                                                        invitation.StateDate = DateTime.Now;
                                                        _invitationRepository.Update(invitation);


                                                        //add userToUserContacts

                                                        userContactRepository.Create(new UserContact()
                                                        {
                                                            ContactName   = user.UserProfile.FullName,
                                                            ContactUserId = user.UserProfile.Id,
                                                            MainUserId    = invitation.CreatorId,
                                                            State         = (int)InvitationStates.Accepted,
                                                            StateDate     = DateTime.Now
                                                        });

                                                        var invitationCreator = userProfileRepository.GetById(invitation.CreatorId);
                                                        userContactRepository.Create(new UserContact()
                                                        {
                                                            ContactName   = invitationCreator.FullName,
                                                            ContactUserId = invitation.CreatorId,
                                                            MainUserId    = user.UserProfile.Id,
                                                            State         = (int)InvitationStates.Accepted,
                                                            StateDate     = DateTime.Now
                                                        });


                                                        //add create Circle of two users
                                                        //var circle = new Common.Model.Circle() { IsGroup = false };
                                                        //CircleRepository circleRepository = new CircleRepository(Context, dbUser, null);
                                                        //circleRepository.Create(circle);
                                                        //Context.SaveChanges();

                                                        //circleRepository.AddMainPersonToCircleUser(circle.Id, dbUser);
                                                        //circleRepository.SynchCircleUsers(circle.Id, new List<Guid>() { userRegistration.UserProfile.Id });

                                                        Context.SaveChanges();

                                                        //_invitationRepository.SaveChanges();
                                                        transactionScope.Complete();
                                                    }
                                                    registrationOk = true;
                                                }
                                            }
                                }
                                if (registrationOk)
                                {
                                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                                    return(RedirectToAction("Index", "Home"));
                                }
                            }

                            AddErrors(result);
                        }
                        catch (Exception ex)
                        {
                            LogHelper.WriteError(ex);
                        }
                    }

                    //var user = new ApplicationUser
                    //{
                    //    UserName = model.Email,
                    //    Email = model.Email,
                    //    UserProfile = new UserProfile()
                    //    {
                    //        Id = Guid.NewGuid(),
                    //        FirstName = firstName,
                    //        LastName = lastName,
                    //        MiddleName = middleName,
                    //        ProfileImage = picture,
                    //    }
                    //};
                    //var result = await UserManager.CreateAsync(user);
                    //if (result.Succeeded)
                    //{
                    //    result = await UserManager.AddLoginAsync(user.Id, info.Login);
                    //    if (result.Succeeded)
                    //    {
                    //        await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
                    //        return RedirectToLocal(returnUrl);
                    //    }
                    //}
                }
            }
            ViewBag.ReturnUrl = returnUrl;
            return(View(model));
        }