private UserViewModel AppUserToUserViewModel(ApplicationUser au)
 {
     return new UserViewModel()
     {
         Id = au.Id,
         Profile = this.AppUserToProfileViewModel(au),
         MyPlans = this.db.Plans.All().Where(p => p.Owner.Id == au.Id).ToList(),
         AllPlans = this.db.Plans.All().Where(pl => pl.Participants.Any(p => p.Id == au.Id)).ToList()
     };
 }
 private ProfileViewModel AppUserToProfileViewModel(ApplicationUser au)
 {
     return new ProfileViewModel()
     {
         Id = au.Id,
         AboutMe = au.AboutMe,
         Email = au.Email,
         FullName = au.FullName,
         Username = au.UserName
     };
 }
        public async Task<ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser() { UserName = model.UserName };
                var result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    await SignInAsync(user, isPersistent: false);
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    AddErrors(result);
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }
        public async Task<ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var defaultUserRole = (Role) await IdentityManager.Roles.FindRoleByNameAsync("User");

                // Create a local login before signing in the user
                var user = new ApplicationUser
                {
                    UserName =  model.UserName, 
                    Roles = new HashSet<UserRole>
                    {
                        new UserRole
                        {
                            Role = defaultUserRole
                        }
                    },
                    Email = model.Email,
                    FullName = model.FullName,
                    AboutMe = model.AboutMe
                };
                var result = await IdentityManager.Users.CreateLocalUserAsync(user, model.Password);
                if (result.Success)
                {
                    await IdentityManager.Authentication.SignInAsync(AuthenticationManager, user.Id, isPersistent: false);

                    this.db.Participants.Add(new Participant { Id = user.Id, ApplicationUserId = user.Id });
                    this.db.SaveChanges();

                    return RedirectToAction("Index", "Plans");
                }
                else
                {
                    AddErrors(result);
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }
 private async Task SignInAsync(ApplicationUser user, bool isPersistent)
 {
     AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
     var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
     AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
 }
        public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
        {
            if (User.Identity.IsAuthenticated)
            {
                return RedirectToAction("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 user = new ApplicationUser() { UserName = model.UserName };
                var result = await UserManager.CreateAsync(user);
                if (result.Succeeded)
                {
                    result = await UserManager.AddLoginAsync(user.Id, info.Login);
                    if (result.Succeeded)
                    {
                        await SignInAsync(user, isPersistent: false);
                        return RedirectToLocal(returnUrl);
                    }
                }
                AddErrors(result);
            }

            ViewBag.ReturnUrl = returnUrl;
            return View(model);
        }