Ejemplo n.º 1
0
        public virtual ActionResult TransformToOrganization()
        {
            var accountToTransform = GetCurrentUser();

            string errorReason;

            if (!UserService.CanTransformUserToOrganization(accountToTransform, out errorReason))
            {
                return(TransformToOrganizationFailed(errorReason));
            }

            var transformRequest = accountToTransform.OrganizationMigrationRequest;

            if (transformRequest != null)
            {
                TempData["Message"] = String.Format(CultureInfo.CurrentCulture,
                                                    Strings.TransformAccount_RequestExists, transformRequest.AdminUser.Username);
            }

            return(View(new TransformAccountViewModel()));
        }
Ejemplo n.º 2
0
        public virtual async Task <ActionResult> TransformToOrganization(TransformAccountViewModel transformViewModel)
        {
            var accountToTransform = GetCurrentUser();

            var adminUsername = transformViewModel.AdminUsername;

            if (Regex.IsMatch(adminUsername, GalleryConstants.EmailValidationRegex, RegexOptions.None, GalleryConstants.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)
            {
                var emailMessage = new OrganizationTransformRejectedMessage(_config, accountToTransform, existingTransformRequestUser, isCanceledByAdmin: false);
                await MessageService.SendMessageAsync(emailMessage);
            }

            var organizationTransformRequestMessage = new OrganizationTransformRequestMessage(
                _config,
                accountToTransform,
                adminUser,
                profileUrl: Url.User(accountToTransform, relativeUrl: false),
                confirmationUrl: Url.ConfirmTransformAccount(accountToTransform, relativeUrl: false),
                rejectionUrl: Url.RejectTransformAccount(accountToTransform, relativeUrl: false));
            await MessageService.SendMessageAsync(organizationTransformRequestMessage);

            var organizationTransformInitiatedMessage = new OrganizationTransformInitiatedMessage(
                _config,
                accountToTransform,
                adminUser,
                cancellationUrl: Url.CancelTransformAccount(accountToTransform, relativeUrl: false));
            await MessageService.SendMessageAsync(organizationTransformInitiatedMessage);

            TelemetryService.TrackOrganizationTransformInitiated(accountToTransform);

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

            TempData[GalleryConstants.ReturnUrlMessageViewDataKey] = String.Format(CultureInfo.CurrentCulture,
                                                                                   Strings.TransformAccount_SignInToConfirm, adminUser.Username, accountToTransform.Username);

            var returnUrl = Url.ConfirmTransformAccount(accountToTransform);

            return(Redirect(Url.LogOn(returnUrl)));
        }