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())); }
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))); }