private async Task <ModelBase> RemoveOfficerAsync(RemoveOfficerRequest removeRequest) { FolderModel folder = null; await connection.ConcurrencyRetryBlock(async() => { folder = await connection.Folder.GetAsync(removeRequest.FolderIdentifier); var recipients = folder.MetaLEOUploadOfficerListRead(); var recipient = recipients.FirstOrDefault(f => f.Email == removeRequest.RecipientEmail); folder.MetaLEOUploadOfficerListRemove(removeRequest.RecipientEmail); var paths = folder.Read <List <string> >("_paths"); if (paths != null && recipient != null) { var officerPath = GetOfficerPath(folder.Identifier, recipient.FirstName, recipient.LastName); if (paths.Contains(officerPath.PathKey)) { paths = paths.Where(p => !p.StartsWith(officerPath.PathKey)).ToList(); } folder.Write("_paths", paths); } await connection.Folder.PutAsync(folder); }); await InitializePrivilegedConnectionAsync(); // Using the special connection here to delete the user. await privilegedConnection.User.DeleteAsync(ModuleUtility.GetFolderScopedUserIdentifier(folder.Identifier, removeRequest.RecipientEmail, "leo")); await this.auditLogStore.AddEntry( new AuditLogEntry() { EntryType = AuditLogEntryType.LEOUploadOfficerDeleted, Message = $"An officer has been removed {removeRequest.RecipientEmail}", ModuleType = Modules.ModuleType.LEOUpload }, folder.Identifier ); return(new RecipientResponse() { Email = removeRequest.RecipientEmail, }); }