public async Task <IActionResult> Confirminvate(int?id, string token, int?familyId) { if (id == null || token == null || familyId == null) { return(NotFound()); } PersonToken personToken = db.PersonTokens.FirstOrDefault(x => x.Code == token); if (personToken.Date.AddDays(1) < DateTime.Now) { return(NotFound()); } if (personToken == null) { return(NotFound()); } User user = await userManager.FindByIdAsync(personToken.UserId); if (user == null) { return(NotFound()); } ConfirmInvateVM vm = new ConfirmInvateVM { Id = (int)id, Token = token, FamilyId = (int)familyId }; return(View(vm)); }
public async Task <IActionResult> Confirminvate(ConfirmInvateVM vm) { if (!ModelState.IsValid) { return(View(vm)); } PersonToken personToken = db.PersonTokens.FirstOrDefault(x => x.Code == vm.Token); if (personToken == null) { return(NotFound()); } if (personToken.Date.AddDays(1) < DateTime.Now) { return(NotFound()); } User user = await userManager.FindByIdAsync(personToken.UserId); if (user == null) { return(NotFound()); } User invateUser = await userManager.FindByEmailAsync(personToken.Email); if (invateUser != null) { return(NotFound()); } Person person = db.People.Include(x => x.UserToPerson).FirstOrDefault(x => x.Id == vm.Id && x.FamilyId == vm.FamilyId); if (person == null) { return(NotFound()); } if (person.UserToPerson != null) { return(NotFound()); } int familId = FamlyMethods.GetFamilyId(db, user); if (familId != vm.FamilyId) { return(NotFound()); } User newUser = new User { Firstname = person.Firstname, Lastname = person.LastName, Email = personToken.Email, BirthDate = person.Birthdate, UserName = person.Firstname.Trim() + person.LastName.Trim() + Guid.NewGuid().ToString(), EmailConfirmed = true, Avatar = person.Photo }; switch (person.GenderId) { case 1: newUser.GenderId = 1; newUser.Avatar = "default1.jpg"; break; case 2: newUser.GenderId = 2; newUser.Avatar = "default2.jpg"; break; } IdentityResult identityResult = await userManager.CreateAsync(newUser, vm.Password); if (!identityResult.Succeeded) { foreach (var er in identityResult.Errors) { ModelState.AddModelError("", er.Description); } return(View(vm)); } await userManager.AddToRoleAsync(newUser, Utilities.SD.MemberRole); await userManager.UpdateAsync(newUser); await signInManager.SignInAsync(newUser, true); FamilyToUser familyToUser = new FamilyToUser { FamilyId = vm.FamilyId, UserId = newUser.Id }; await db.FamilyToUsers.AddAsync(familyToUser); db.SaveChanges(); UserToPerson userToPerson = new UserToPerson { PersonId = person.Id, UserId = newUser.Id }; db.UserToPeople.Add(userToPerson); db.PersonTokens.Remove(personToken); db.SaveChanges(); return(RedirectToAction("Index", "Home")); }