Beispiel #1
0
        protected override IEnumerable <KeyValuePair <string, string> > InternalGetEventDetails()
        {
            foreach (KeyValuePair <string, string> detail in base.InternalGetEventDetails())
            {
                yield return(detail);
            }
            if (base.COWSettings.CurrentFolderId != null)
            {
                yield return(new KeyValuePair <string, string>("FolderId", string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                {
                    base.COWSettings.CurrentFolderId
                })));

                FolderAuditInfo currentFolder;
                if (this.parentFolders.TryGetValue(base.COWSettings.CurrentFolderId, out currentFolder))
                {
                    yield return(new KeyValuePair <string, string>("FolderPathName", currentFolder.PathName));
                }
                else
                {
                    string folderPathName = base.GetCurrentFolderPathName();
                    if (folderPathName != null)
                    {
                        yield return(new KeyValuePair <string, string>("FolderPathName", folderPathName));
                    }
                }
            }
            bool crossMailbox = this.destinationSession != null && base.MailboxSession != this.destinationSession;

            yield return(new KeyValuePair <string, string>("CrossMailboxOperation", string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
            {
                crossMailbox
            })));

            MailboxSession destinationMailboxSession = base.MailboxSession;

            if (crossMailbox && this.destinationSession is MailboxSession)
            {
                destinationMailboxSession = (this.destinationSession as MailboxSession);
                yield return(new KeyValuePair <string, string>("DestMailboxGuid", string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                {
                    destinationMailboxSession.MailboxOwner.MailboxInfo.MailboxGuid
                })));

                yield return(new KeyValuePair <string, string>("DestMailboxOwnerUPN", string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                {
                    destinationMailboxSession.MailboxOwner.MailboxInfo.PrimarySmtpAddress
                })));

                if (destinationMailboxSession.MailboxOwner.Sid != null)
                {
                    yield return(new KeyValuePair <string, string>("DestMailboxOwnerSid", string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                    {
                        destinationMailboxSession.MailboxOwner.Sid
                    })));

                    if (destinationMailboxSession.MailboxOwner.MasterAccountSid != null)
                    {
                        yield return(new KeyValuePair <string, string>("DestMailboxOwnerMasterAccountSid", string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                        {
                            destinationMailboxSession.MailboxOwner.MasterAccountSid
                        })));
                    }
                }
            }
            if (this.destinationFolderId != null)
            {
                yield return(new KeyValuePair <string, string>("DestFolderId", string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                {
                    this.destinationFolderId
                })));

                string    folderPathName2 = null;
                Exception exception       = null;
                try
                {
                    using (Folder folder2 = Folder.Bind(destinationMailboxSession, this.destinationFolderId, new PropertyDefinition[]
                    {
                        FolderSchema.FolderPathName
                    }))
                    {
                        if (folder2 != null)
                        {
                            folderPathName2 = (folder2.TryGetProperty(FolderSchema.FolderPathName) as string);
                            if (folderPathName2 != null)
                            {
                                folderPathName2 = folderPathName2.Replace(COWSettings.StoreIdSeparator, '\\');
                            }
                        }
                    }
                }
                catch (StorageTransientException ex)
                {
                    exception = ex;
                }
                catch (StoragePermanentException ex2)
                {
                    exception = ex2;
                }
                if (exception != null)
                {
                    ExTraceGlobals.SessionTracer.TraceError <StoreObjectId, Exception>((long)base.MailboxSession.GetHashCode(), "[GroupOperationAuditEvent::ToString] failed to get FolderPathName property of destination folder {0}. Exception: {1}", this.destinationFolderId, exception);
                }
                if (folderPathName2 != null)
                {
                    yield return(new KeyValuePair <string, string>("DestFolderPathName", folderPathName2));
                }
            }
            int folderCount = 0;

            foreach (KeyValuePair <StoreObjectId, FolderAuditInfo> folder in this.folderAuditInfo)
            {
                KeyValuePair <StoreObjectId, FolderAuditInfo> keyValuePair = folder;
                StoreObjectId folderId = keyValuePair.Key;
                KeyValuePair <StoreObjectId, FolderAuditInfo> keyValuePair2 = folder;
                FolderAuditInfo folderInfo = keyValuePair2.Value;
                if (base.COWSettings.CurrentFolderId == null || !folderId.Equals(base.COWSettings.CurrentFolderId))
                {
                    yield return(new KeyValuePair <string, string>(string.Format(CultureInfo.InvariantCulture, "{0}.{1}", new object[]
                    {
                        folderCount,
                        ".SourceFolderId"
                    }), string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                    {
                        folderId
                    })));

                    if (folderInfo.PathName != null)
                    {
                        yield return(new KeyValuePair <string, string>(string.Format(CultureInfo.InvariantCulture, "{0}.{1}", new object[]
                        {
                            folderCount,
                            ".SourceFolderPathName"
                        }), folderInfo.PathName));
                    }
                    folderCount++;
                }
            }
            int itemCount = 0;

            foreach (KeyValuePair <StoreObjectId, ItemAuditInfo> item in this.itemAuditInfo)
            {
                KeyValuePair <StoreObjectId, ItemAuditInfo> keyValuePair3 = item;
                StoreObjectId itemId = keyValuePair3.Key;
                KeyValuePair <StoreObjectId, ItemAuditInfo> keyValuePair4 = item;
                ItemAuditInfo itemInfo = keyValuePair4.Value;
                yield return(new KeyValuePair <string, string>(string.Format(CultureInfo.InvariantCulture, "{0}.{1}", new object[]
                {
                    itemCount,
                    ".SourceItemId"
                }), string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                {
                    itemId
                })));

                if (itemInfo.Subject != null)
                {
                    yield return(new KeyValuePair <string, string>(string.Format(CultureInfo.InvariantCulture, "{0}.{1}", new object[]
                    {
                        itemCount,
                        ".SourceItemSubject"
                    }), itemInfo.Subject));
                }
                FolderAuditInfo folderInfo2;
                if (itemInfo.ParentFolderId != null && this.parentFolders.TryGetValue(itemInfo.ParentFolderId, out folderInfo2))
                {
                    yield return(new KeyValuePair <string, string>(string.Format(CultureInfo.InvariantCulture, "{0}.{1}", new object[]
                    {
                        itemCount,
                        ".SourceItemFolderPathName"
                    }), folderInfo2.PathName));
                }
                itemCount++;
            }
            yield break;
        }
        public static ExchangeMailboxAuditGroupRecord CreateMailboxGroupRecord(MailboxSession mailboxSession, MailboxAuditOperations operation, COWSettings settings, LogonType effectiveLogonType, bool externalAccess, StoreSession destinationSession, StoreObjectId destinationFolderId, StoreObjectId[] itemIds, GroupOperationResult result, IDictionary <StoreObjectId, FolderAuditInfo> folders, IDictionary <StoreObjectId, ItemAuditInfo> items, IDictionary <StoreObjectId, FolderAuditInfo> parentFolders)
        {
            Util.ThrowOnNullArgument(settings, "settings");
            ExchangeMailboxAuditGroupRecord exchangeMailboxAuditGroupRecord = new ExchangeMailboxAuditGroupRecord();

            AuditRecordFactory.Fill(exchangeMailboxAuditGroupRecord, mailboxSession, operation, (result == null) ? OperationResult.Failed : result.OperationResult, effectiveLogonType, externalAccess);
            if (settings.CurrentFolderId != null)
            {
                exchangeMailboxAuditGroupRecord.Folder    = (exchangeMailboxAuditGroupRecord.Folder ?? new ExchangeFolder());
                exchangeMailboxAuditGroupRecord.Folder.Id = string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                {
                    settings.CurrentFolderId
                });
                FolderAuditInfo folderAuditInfo;
                parentFolders.TryGetValue(settings.CurrentFolderId, out folderAuditInfo);
                exchangeMailboxAuditGroupRecord.Folder.PathName = ((folderAuditInfo != null) ? folderAuditInfo.PathName : AuditRecordFactory.GetCurrentFolderPathName(mailboxSession, settings));
            }
            bool flag = destinationSession != null && mailboxSession != destinationSession;

            exchangeMailboxAuditGroupRecord.CrossMailboxOperation = new bool?(flag);
            MailboxSession mailboxSession2 = mailboxSession;

            if (flag && destinationSession is MailboxSession)
            {
                mailboxSession2 = (destinationSession as MailboxSession);
                exchangeMailboxAuditGroupRecord.DestMailboxGuid     = new Guid?(mailboxSession2.MailboxOwner.MailboxInfo.MailboxGuid);
                exchangeMailboxAuditGroupRecord.DestMailboxOwnerUPN = string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                {
                    mailboxSession2.MailboxOwner.MailboxInfo.PrimarySmtpAddress
                });
                if (mailboxSession2.MailboxOwner.Sid != null)
                {
                    exchangeMailboxAuditGroupRecord.DestMailboxOwnerSid = string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                    {
                        mailboxSession2.MailboxOwner.Sid
                    });
                    if (mailboxSession2.MailboxOwner.MasterAccountSid != null)
                    {
                        exchangeMailboxAuditGroupRecord.DestMailboxOwnerMasterAccountSid = string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                        {
                            mailboxSession2.MailboxOwner.MasterAccountSid
                        });
                    }
                }
            }
            if (destinationFolderId != null)
            {
                exchangeMailboxAuditGroupRecord.DestFolder    = (exchangeMailboxAuditGroupRecord.DestFolder ?? new ExchangeFolder());
                exchangeMailboxAuditGroupRecord.DestFolder.Id = string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                {
                    destinationFolderId
                });
                string    text = null;
                Exception ex   = null;
                try
                {
                    using (Folder folder = Folder.Bind(mailboxSession2, destinationFolderId, new PropertyDefinition[]
                    {
                        FolderSchema.FolderPathName
                    }))
                    {
                        if (folder != null)
                        {
                            text = (folder.TryGetProperty(FolderSchema.FolderPathName) as string);
                            if (text != null)
                            {
                                text = text.Replace(COWSettings.StoreIdSeparator, '\\');
                            }
                        }
                    }
                }
                catch (StorageTransientException ex2)
                {
                    ex = ex2;
                }
                catch (StoragePermanentException ex3)
                {
                    ex = ex3;
                }
                if (ex != null)
                {
                    ExTraceGlobals.SessionTracer.TraceError <StoreObjectId, Exception>((long)mailboxSession.GetHashCode(), "[GroupOperationAuditEventRecordAdapter::ToString] failed to get FolderPathName property of destination folder {0}. Exception: {1}", destinationFolderId, ex);
                }
                if (text != null)
                {
                    exchangeMailboxAuditGroupRecord.DestFolder.PathName = text;
                }
            }
            foreach (KeyValuePair <StoreObjectId, FolderAuditInfo> keyValuePair in folders)
            {
                StoreObjectId   key   = keyValuePair.Key;
                FolderAuditInfo value = keyValuePair.Value;
                if (settings.CurrentFolderId == null || !key.Equals(settings.CurrentFolderId))
                {
                    exchangeMailboxAuditGroupRecord.Folders = (exchangeMailboxAuditGroupRecord.Folders ?? new List <ExchangeFolder>(folders.Count));
                    ExchangeFolder exchangeFolder = new ExchangeFolder();
                    exchangeMailboxAuditGroupRecord.Folders.Add(exchangeFolder);
                    exchangeFolder.Id = string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                    {
                        key
                    });
                    if (value.PathName != null)
                    {
                        exchangeFolder.PathName = value.PathName;
                    }
                }
            }
            foreach (KeyValuePair <StoreObjectId, ItemAuditInfo> keyValuePair2 in items)
            {
                StoreObjectId key2   = keyValuePair2.Key;
                ItemAuditInfo value2 = keyValuePair2.Value;
                exchangeMailboxAuditGroupRecord.SourceItems = (exchangeMailboxAuditGroupRecord.SourceItems ?? new List <ExchangeItem>(items.Count));
                ExchangeItem exchangeItem = new ExchangeItem();
                exchangeMailboxAuditGroupRecord.SourceItems.Add(exchangeItem);
                exchangeItem.Id = string.Format(CultureInfo.InvariantCulture, "{0}", new object[]
                {
                    key2
                });
                if (value2.Subject != null)
                {
                    exchangeItem.Subject = value2.Subject;
                }
                FolderAuditInfo folderAuditInfo2;
                if (value2.ParentFolderId != null && parentFolders.TryGetValue(value2.ParentFolderId, out folderAuditInfo2))
                {
                    exchangeItem.ParentFolder          = (exchangeItem.ParentFolder ?? new ExchangeFolder());
                    exchangeItem.ParentFolder.PathName = folderAuditInfo2.PathName;
                }
            }
            return(exchangeMailboxAuditGroupRecord);
        }