Exemplo n.º 1
0
        public ActionResult RegisterFromInvite(string email, Guid code)
        {
            var accept = new RegisterFromInviteViewModel
            {
                Email = email,
                Code  = code
            };

            return(View(accept));
        }
Exemplo n.º 2
0
        public async Task <ActionResult> RegisterFromInvite(RegisterFromInviteViewModel model, HttpPostedFileBase image, Guid Code)
        {
            if (ModelState.IsValid)
            {
                var errorMsg = new StringBuilder();

                var invite = db.Invitations.FirstOrDefault(i => i.Code == model.Code);

                if (invite == null)
                {
                    errorMsg.Append("You have not been invited.");
                }
                else
                {
                    if (DateTime.Now > invite.Expires)
                    {
                        errorMsg.Append("Invitation Expired.");
                    }
                    if (model.Code != invite.Code)
                    {
                        errorMsg.Append("InvalidCode.");
                    }
                    if (invite.Accepted)
                    {
                        errorMsg.Append("Invitation already accepted");
                    }
                }

                var result = new IdentityResult();

                if (errorMsg.ToString() == string.Empty)
                {
                    var user = new ApplicationUser
                    {
                        FirstName   = model.FirstName,
                        LastName    = model.LastName,
                        UserName    = model.Email,
                        Email       = model.Email,
                        HouseholdId = invite.HouseholdId
                    };

                    if (UserHelper.IsWebFriendlyImage(image))
                    {
                        var fileName = Path.GetFileName(image.FileName);
                        image.SaveAs(Path.Combine(Server.MapPath("~/Uploads/"), fileName));
                        user.ProfileImagePath = "/Uploads/" + fileName;
                    }

                    result = await UserManager.CreateAsync(user, model.Password);

                    if (result.Succeeded)
                    {
                        db.Invitations.Attach(invite);
                        invite.Accepted     = true;
                        invite.AcceptedTime = DateTime.Now;
                        invite.IsValid      = false;
                        db.SaveChanges();

                        UserRoleHelper.AddUserToRole(user.Id, "Member");
                        await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                        string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);

                        var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                        await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                        return(RedirectToAction("ProfileView", "Account"));
                    }
                }
                else
                {
                    TempData["ErrorMsg"] = errorMsg.ToString();
                    return(RedirectToAction("Details", "Households", new { id = invite.HouseholdId }));
                }

                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }