Exemplo n.º 1
0
        public IActionResult CompleteInvite(string inviteCode)
        {
            Guid code;

            if (!Guid.TryParse(inviteCode, out code))
            {
                return(RedirectToAction("MissingInvite"));
            }

            CompleteInviteModel model = new CompleteInviteModel();

            model.Invite = _invitesService.GetInviteByCode(code);

            if (model.Invite == null)
            {
                return(RedirectToAction("MissingInvite"));
            }

            if (model.Invite.CompletedOn.HasValue)
            {
                return(RedirectToAction("CompletedInvite"));
            }

            model.Email = model.Invite.EmailAddress;
            model.Code  = inviteCode.ToString();

            return(View(model));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> CompleteInvite(string inviteCode)
        {
            Guid code;

            if (!Guid.TryParse(inviteCode, out code))
            {
                return(RedirectToAction("MissingInvite"));
            }

            CompleteInviteModel model = new CompleteInviteModel();

            model.Invite = await _invitesService.GetInviteByCodeAsync(code);

            if (model.Invite == null)
            {
                return(RedirectToAction("MissingInvite"));
            }

            if (model.Invite.CompletedOn.HasValue)
            {
                return(RedirectToAction("CompletedInvite"));
            }

            var department = await _departmentsService.GetDepartmentByIdAsync(model.Invite.DepartmentId, true);

            if (department == null)
            {
                return(RedirectToAction("MissingInvite"));
            }

            model.DepartmentName = department.Name;
            model.Email          = model.Invite.EmailAddress;
            model.Code           = inviteCode.ToString();

            return(View(model));
        }
Exemplo n.º 3
0
        public async Task <IActionResult> CompleteInvite(CompleteInviteModel model)
        {
            model.Invite = _invitesService.GetInviteByCode(Guid.Parse(model.Code));
            model.Email  = model.Invite.EmailAddress;

            if (!StringHelpers.ValidateEmail(model.Email))
            {
                ModelState.AddModelError("EmailAddresses", string.Format("{0} does not appear to be valid. Check the address and try again.", model.Email));
            }

            var existingUser = _usersService.GetUserByEmail(model.Email);

            if (existingUser != null)
            {
                ModelState.AddModelError("EmailAddresses", string.Format("The email address {0} is already in use in this department on another. Email address can only be used once per account in the system. Use the account recovery form to recover your username and password.", model.Email));
            }

            if (ModelState.IsValid)
            {
                var user = new Microsoft.AspNet.Identity.EntityFramework6.IdentityUser {
                    UserName = model.UserName, Email = model.Email, SecurityStamp = Guid.NewGuid().ToString()
                };
                var result = await _userManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    UserProfile up = new UserProfile();
                    up.UserId    = user.Id;
                    up.FirstName = model.FirstName;
                    up.LastName  = model.LastName;
                    _userProfileService.SaveProfile(model.Invite.DepartmentId, up);

                    _usersService.AddUserToUserRole(user.Id);
                    _usersService.InitUserExtInfo(user.Id);
                    _departmentsService.AddUserToDepartment(model.Invite.DepartmentId, user.Id);

                    _eventAggregator.SendMessage <UserCreatedEvent>(new UserCreatedEvent()
                    {
                        DepartmentId = model.Invite.Department.DepartmentId,
                        Name         = $"{model.FirstName} {model.LastName}",
                        User         = user
                    });

                    _departmentsService.InvalidateDepartmentUsersInCache(model.Invite.DepartmentId);
                    _departmentsService.InvalidatePersonnelNamesInCache(model.Invite.DepartmentId);
                    _usersService.ClearCacheForDepartment(model.Invite.DepartmentId);
                    _departmentsService.InvalidateDepartmentMembers();

                    _invitesService.CompleteInvite(model.Invite.Code, user.UserId);
                    _emailMarketingProvider.SubscribeUserToUsersList(model.FirstName, model.LastName, user.Email);

                    _emailService.SendWelcomeEmail(model.Invite.Department.Name, $"{model.FirstName} {model.LastName}", model.Email, model.UserName, model.Password, model.Invite.DepartmentId);

                    await _signInManager.SignInAsync(user, isPersistent : false);

                    return(RedirectToAction("Dashboard", "Home", new { area = "User" }));
                }
                AddErrors(result);
            }

            return(View(model));
        }