Esempio n. 1
0
        public async Task <ActionResult> Index(AddUserToOrganizationFormViewModel viewModel)
        {
#if DEBUG
            SiteUser.SerialNumber = "1321312";
#endif
            //get active customer, which is the admin
            var activeCustomer = UserManager.GetActiveCustomer(HttpContext);

            var existingUser = await _securityRepository.FindUserByEmailAsync(viewModel.Email);

            if (existingUser != null)
            {
                var organizationsOfUser = await _orgUserRepo.GetOrganizationsOfUserAsync(existingUser.UserName);

                if (organizationsOfUser.Any(o => o.CustomerId == activeCustomer?.CustomerId))
                {
                    return(new HttpStatusCodeResult(400));
                }

                return(await AddExistingUserToOrganizationAsync(existingUser.UserName, activeCustomer, viewModel));
            }

            if (!ModelState.IsValid || string.IsNullOrWhiteSpace(SiteUser.SerialNumber))
            {
                return(new HttpStatusCodeResult(400));
            }
            return(await AddNewUserToOrganizationAsync(activeCustomer, viewModel));
        }
        public async Task <ActionResult> AddNewUserToOrganizationAsync(AddUserToOrganizationFormViewModel viewModel, string customerNumber)
        {
            var existingUser = await UserManager.QuerySiteUserAsync(viewModel.Email);

            if (existingUser != null)
            {
                return(new HttpStatusCodeResult(400));
            }

            var user = await _accountRepo.CreateUserAsync(viewModel.FirstName, viewModel.LastName, viewModel.Telephone,
                                                          viewModel.Mobile, viewModel.Email, string.Empty, string.Empty, string.Empty);

            if (user == null)
            {
                throw new ApplicationException("CreateNewFailed");
            }

            var customer = await _customerSupportRepo.GetCustomerByNumberAsync(customerNumber);

            var roles = viewModel.Roles.Split(',');
            await _orgUserRepo.AddUserToOrganizationAsync(user, new CustomerBasicInfo
            {
                CustomerName = customer.CustomerName,
                CustomerNo   = customerNumber
            }, roles);

            var guid = await _securityRepository.GeneratePasswordGuidAsync(user.UserName);

            var resetPasswordToken = _tokenGenerator.Encrypt(new ResetPasswordConfirmationData
            {
                GuidString = guid,
                UserName   = viewModel.Email
            });

            //fire and forget email
            //var host = Request.Url?.Host + (Request?.Url?.IsDefaultPort == true ? "" : ":" + Request?.Url?.Port);
            var link = $"{ConfigurationManager.AppSettings["publicSitePrefix"]}/p/resetpassword?payload={resetPasswordToken}";

            await SendEmailToNewUserAsync(viewModel.Email, viewModel.Roles, link, customer.CustomerName);

            return(Json(true));
        }
Esempio n. 3
0
        private async Task <ActionResult> AddExistingUserToOrganizationAsync(string userName, CustomerBasicInfo organization,
                                                                             AddUserToOrganizationFormViewModel viewModel)
        {
            var user = await UserManager.QuerySiteUserAsync(userName);

            if (user == null)
            {
                return(new HttpStatusCodeResult(400));
            }

            var roles = viewModel.Roles.Split(',');
            await _orgUserRepo.AddUserToOrganizationAsync(user, organization, roles);

            //fire and forget email
            var link = $"{ConfigurationManager.AppSettings["domainUrl"]}";

            await SendEmailToExistingUserAsync(viewModel.Email, viewModel.Roles, link, organization.CustomerName);

            var startPage   = _contentRepo.Get <StartPage>(ContentReference.StartPage);
            var settingPage = _contentRepo.Get <SettingsPage>(startPage.SettingsPage);

            return(RedirectToAction("Index", new { node = settingPage.HandleOrganizationUserPage }));
        }
Esempio n. 4
0
        private async Task <ActionResult> AddNewUserToOrganizationAsync(CustomerBasicInfo organization, AddUserToOrganizationFormViewModel viewModel)
        {
            var user = await _accountRepo.CreateUserAsync(viewModel.FirstName, viewModel.LastName, viewModel.Telephone,
                                                          viewModel.Mobile, viewModel.Email, string.Empty, string.Empty, string.Empty);

            if (user == null)
            {
                throw new ApplicationException("CreateNewFailed");
            }

            var roles = viewModel.Roles.Split(',');
            await _orgUserRepo.AddUserToOrganizationAsync(user, organization, roles);

            var startPage   = _contentRepo.Get <StartPage>(ContentReference.StartPage);
            var settingPage = _contentRepo.Get <SettingsPage>(startPage.SettingsPage);

            var guid = await _securityRepository.GeneratePasswordGuidAsync(user.UserName);

            var resetPasswordToken = _tokenGenerator.Encrypt(new ResetPasswordConfirmationData
            {
                GuidString = guid,
                UserName   = viewModel.Email
            });

            //fire and forget email
            //var host = Request.Url?.Host + (Request?.Url?.IsDefaultPort == true ? "" : ":" + Request?.Url?.Port);
            var link = $"{ConfigurationManager.AppSettings["publicSitePrefix"]}/p/resetpassword?payload={resetPasswordToken}";

            await SendEmailToNewUserAsync(viewModel.Email, viewModel.Roles, link, organization.CustomerName);

            TempData["reference"] = "NewUserAdded";
            return(RedirectToAction("Index", new { node = settingPage.HandleOrganizationUserPage }));
        }