Esempio n. 1
0
        public virtual async Task <ActionResult> TransformToOrganization(TransformAccountViewModel transformViewModel)
        {
            var accountToTransform = GetCurrentUser();

            var adminUser = UserService.FindByUsername(transformViewModel.AdminUsername);

            if (adminUser == null)
            {
                ModelState.AddModelError(string.Empty, String.Format(CultureInfo.CurrentCulture,
                                                                     Strings.TransformAccount_AdminAccountDoesNotExist, transformViewModel.AdminUsername));
                return(View(transformViewModel));
            }

            if (!UserService.CanTransformUserToOrganization(accountToTransform, adminUser, out var errorReason))
            {
                ModelState.AddModelError(string.Empty, errorReason);
                return(View(transformViewModel));
            }

            await UserService.RequestTransformToOrganizationAccount(accountToTransform, adminUser);

            // sign out pending organization and prompt for admin sign in
            OwinContext.Authentication.SignOut();

            TempData[Constants.ReturnUrlMessageViewDataKey] = String.Format(CultureInfo.CurrentCulture,
                                                                            Strings.TransformAccount_SignInToConfirm, adminUser.Username, accountToTransform.Username);
            var returnUrl = Url.ConfirmTransformAccount(accountToTransform);

            return(Redirect(Url.LogOn(returnUrl)));
        }
Esempio n. 2
0
        public virtual async Task <ActionResult> TransformToOrganization(TransformAccountViewModel transformViewModel)
        {
            var accountToTransform = GetCurrentUser();

            var adminUsername = transformViewModel.AdminUsername;

            if (Regex.IsMatch(adminUsername, Constants.EmailValidationRegex, RegexOptions.None, Constants.EmailValidationRegexTimeout))
            {
                ModelState.AddModelError(string.Empty, Strings.TransformAccount_AdminNameIsEmail);
                return(View(transformViewModel));
            }

            var adminUser = UserService.FindByUsername(adminUsername);

            if (adminUser == null)
            {
                ModelState.AddModelError(string.Empty, string.Format(CultureInfo.CurrentCulture,
                                                                     Strings.TransformAccount_AdminAccountDoesNotExist, adminUsername));
                return(View(transformViewModel));
            }

            if (!UserService.CanTransformUserToOrganization(accountToTransform, adminUser, out var errorReason))
            {
                ModelState.AddModelError(string.Empty, errorReason);
                return(View(transformViewModel));
            }

            // Get the user from the previous organization migration request (if there was one) so we can notify them that their request has been cancelled.
            var existingTransformRequestUser = accountToTransform.OrganizationMigrationRequest?.AdminUser;

            await UserService.RequestTransformToOrganizationAccount(accountToTransform, adminUser);

            if (existingTransformRequestUser != null)
            {
                await MessageService.SendOrganizationTransformRequestCancelledNoticeAsync(accountToTransform, existingTransformRequestUser);
            }

            var returnUrl  = Url.ConfirmTransformAccount(accountToTransform);
            var confirmUrl = Url.ConfirmTransformAccount(accountToTransform, relativeUrl: false);
            var rejectUrl  = Url.RejectTransformAccount(accountToTransform, relativeUrl: false);
            await MessageService.SendOrganizationTransformRequestAsync(accountToTransform, adminUser, Url.User(accountToTransform, relativeUrl: false), confirmUrl, rejectUrl);

            var cancelUrl = Url.CancelTransformAccount(accountToTransform, relativeUrl: false);
            await MessageService.SendOrganizationTransformInitiatedNoticeAsync(accountToTransform, adminUser, cancelUrl);

            TelemetryService.TrackOrganizationTransformInitiated(accountToTransform);

            // sign out pending organization and prompt for admin sign in
            OwinContext.Authentication.SignOut();

            TempData[Constants.ReturnUrlMessageViewDataKey] = String.Format(CultureInfo.CurrentCulture,
                                                                            Strings.TransformAccount_SignInToConfirm, adminUser.Username, accountToTransform.Username);
            return(Redirect(Url.LogOn(returnUrl)));
        }