public async Task <IWriterResult> ApproveChangeEmail(string userId, AdminChangeEmailApproveModel model)
        {
            var syncUserId = string.Empty;

            using (var context = DataContextFactory.CreateContext())
            {
                if (model.Status == ApprovalQueueStatus.Pending)
                {
                    return(new WriterResult(false, $"Unable to set item to {model.Status}."));
                }

                var approval = await context.ApprovalQueue.FirstOrDefaultNoLockAsync(x => x.Id == model.ApprovalId && x.Type == ApprovalQueueType.ChangeEmail);

                if (approval == null)
                {
                    return(new WriterResult(false, "Not Found."));
                }

                if (approval.Status != Enums.ApprovalQueueStatus.Pending)
                {
                    return(new WriterResult(false, $"Unable to approve {approval.Type} status is {approval.Status}."));
                }

                if (approval.RequestUserId == userId)
                {
                    return(new WriterResult(false, $"Another admin must approve this {approval.Type}."));
                }

                var existing = await context.Users.FirstOrDefaultNoLockAsync(x => x.Email == approval.Data);

                if (existing != null && model.Status == ApprovalQueueStatus.Approved)
                {
                    return(new WriterResult(false, $"Email '{approval.Data}' is already in use."));
                }

                approval.Status        = model.Status;
                approval.Message       = model.Message;
                approval.ApproveUserId = userId;
                approval.Approved      = DateTime.UtcNow;
                if (model.Status == ApprovalQueueStatus.Approved)
                {
                    syncUserId = approval.DataUserId;
                    approval.DataUser.Email = JsonConvert.DeserializeObject <AdminChangeEmailModel>(approval.Data).NewEmailAddress;
                }
                await context.SaveChangesAsync();
            }
            await UserSyncService.SyncUser(syncUserId);

            return(new WriterResult(true, model.Status == ApprovalQueueStatus.Approved ? "Action approved, users email address has now been updated." : "Action Rejected, email change rejected."));
        }
Esempio n. 2
0
        public async Task <ActionResult> ApproveChangeEmail(AdminChangeEmailApproveModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View("ChangeEmailApproveModal", model));
            }

            var result = await AdminUserWriter.ApproveChangeEmail(User.Identity.GetUserId(), model);

            if (!ModelState.IsWriterResultValid(result))
            {
                return(View("ChangeEmailApproveModal", model));
            }

            return(CloseModalSuccess(result.Message));
        }