コード例 #1
0
        public static void SaveUserOofSettings(MailboxSession itemStore, UserOofSettings userOofSettings)
        {
            UserOofSettingsSerializer o = UserOofSettingsSerializer.Serialize(userOofSettings);

            using (StringWriter stringWriter = new StringWriter())
            {
                using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings
                {
                    CheckCharacters = false
                }))
                {
                    UserOofSettingsSerializer.Serializer.Serialize(xmlWriter, o);
                    string      body        = stringWriter.ToString();
                    VersionedId versionedId = UserOofSettingsStorage.settingsStorageHandler.SetItemContent(itemStore, body);
                    itemStore.Mailbox[MailboxSchema.UserOofSettingsItemId] = versionedId.ObjectId.ProviderLevelItemId;
                }
            }
            UserOofSettingsStorage.Tracer.TraceDebug <IExchangePrincipal>(0L, "Mailbox:{0}: Adding OOF rules", itemStore.MailboxOwner);
            using (RuleGenerator ruleGenerator = new RuleGenerator(itemStore, userOofSettings))
            {
                ruleGenerator.OnUserOofSettingsChanges();
            }
            UserOofSettingsStorage.Tracer.TraceDebug <IExchangePrincipal>(0L, "Mailbox:{0}: OOF rules added, setting OOF mailbox table properties.", itemStore.MailboxOwner);
            OofStateHandler.Set(itemStore, userOofSettings.OofState == OofState.Enabled, (userOofSettings.UserChangeTime != null) ? userOofSettings.UserChangeTime.Value : DateTime.UtcNow);
            itemStore.Mailbox[MailboxSchema.OofScheduleStart] = ((userOofSettings.OofState == OofState.Scheduled) ? ((ExDateTime)userOofSettings.StartTime) : UserOofSettingsStorage.Date1601Utc);
            itemStore.Mailbox[MailboxSchema.OofScheduleEnd]   = ((userOofSettings.OofState == OofState.Scheduled) ? ((ExDateTime)userOofSettings.EndTime) : UserOofSettingsStorage.Date1601Utc);
            itemStore.Mailbox.Save();
            itemStore.Mailbox.Load();
        }
コード例 #2
0
        private static UserOofSettings CreateDefaultUserOofSettings(MailboxSession itemStore)
        {
            UserOofSettings userOofSettings = UserOofSettings.CreateDefault();

            userOofSettings.ExternalAudience = ExternalAudience.All;
            if (OofStateHandler.Get(itemStore))
            {
                userOofSettings.OofState = OofState.Enabled;
            }
            else
            {
                userOofSettings.OofState = OofState.Disabled;
            }
            UserOofSettingsStorage.Tracer.TraceDebug <IExchangePrincipal>(0L, "Mailbox:{0}: Created default OOF settings, saving to mailbox", itemStore.MailboxOwner);
            UserOofSettingsStorage.TracerPfd.TracePfd <int, IExchangePrincipal>(0L, "PFD IWO {0} Mailbox:{1}: Created default OOF settings, saving to mailbox", 17559, itemStore.MailboxOwner);
            try
            {
                UserOofSettingsStorage.SaveUserOofSettings(itemStore, userOofSettings);
            }
            catch (VirusException arg)
            {
                UserOofSettingsStorage.settingsStorageHandler.Delete(itemStore);
                UserOofSettingsStorage.Tracer.TraceError <IExchangePrincipal, VirusException>(0L, "Mailbox:{0}: Exception on create default useroofsettings, exception = {1}, re-creating default useroofsettings.", itemStore.MailboxOwner, arg);
                userOofSettings.InternalReply.RawMessage = Strings.descOOFVirusDetectedOofReplyMessage;
                userOofSettings.ExternalReply.RawMessage = null;
                userOofSettings.OofState = OofState.Disabled;
                UserOofSettingsStorage.SaveUserOofSettings(itemStore, userOofSettings);
            }
            return(userOofSettings);
        }
コード例 #3
0
 internal void Save(MailboxSession itemStore)
 {
     UserOofSettings.Validate(itemStore, this);
     this.setByLegacyClient = false;
     this.userChangeTime    = new DateTime?(DateTime.MaxValue);
     UserOofSettingsStorage.SaveUserOofSettings(itemStore, this);
 }
コード例 #4
0
 internal static UserOofSettingsSerializer Serialize(UserOofSettings userOofSettings)
 {
     return(new UserOofSettingsSerializer
     {
         InternalReply = ReplyBodySerializer.Serialize(userOofSettings.InternalReply),
         ExternalReply = ReplyBodySerializer.Serialize(userOofSettings.ExternalReply),
         Duration = userOofSettings.Duration,
         OofState = userOofSettings.OofState,
         ExternalAudience = userOofSettings.ExternalAudience,
         SetByLegacyClient = userOofSettings.SetByLegacyClient,
         UserChangeTime = userOofSettings.UserChangeTime
     });
 }
コード例 #5
0
 private static void Validate(MailboxSession itemStore, UserOofSettings userOofSettings)
 {
     if (userOofSettings.internalReply == null || userOofSettings.externalReply == null)
     {
         throw new InvalidUserOofSettings();
     }
     if (userOofSettings.OofState == OofState.Scheduled)
     {
         UserOofSettings.ValidateDuration(userOofSettings.duration);
     }
     if ((userOofSettings.ExternalAudience == ExternalAudience.Known || userOofSettings.ExternalAudience == ExternalAudience.All) && UserOofSettings.GetUserPolicy(itemStore.MailboxOwner) == ExternalAudience.None)
     {
         userOofSettings.ExternalAudience = ExternalAudience.None;
     }
 }
コード例 #6
0
        internal UserOofSettings Deserialize()
        {
            if (!this.Validate())
            {
                throw new InvalidUserOofSettingsXmlDocument();
            }
            UserOofSettings userOofSettings = UserOofSettings.Create();

            userOofSettings.InternalReply     = this.InternalReply.Deserialize();
            userOofSettings.ExternalReply     = this.ExternalReply.Deserialize();
            userOofSettings.Duration          = this.Duration;
            userOofSettings.OofState          = this.OofState;
            userOofSettings.ExternalAudience  = this.ExternalAudience;
            userOofSettings.SetByLegacyClient = this.SetByLegacyClient;
            userOofSettings.UserChangeTime    = this.UserChangeTime;
            return(userOofSettings);
        }
コード例 #7
0
 public RuleGenerator(MailboxSession itemStore, UserOofSettings userOofSettings)
 {
     this.itemStore       = itemStore;
     this.userOofSettings = userOofSettings;
     this.ruleManager     = new RuleManager();
 }
コード例 #8
0
        public static UserOofSettings LoadUserOofSettings(MailboxSession itemStore)
        {
            UserOofSettings userOofSettings = null;
            string          text            = null;
            string          text2           = null;

            try
            {
                text2 = UserOofSettingsStorage.LoadUserOofSettingsByItemId(itemStore);
                if (string.IsNullOrEmpty(text2))
                {
                    text2 = UserOofSettingsStorage.settingsStorageHandler.GetItemContent(itemStore);
                }
            }
            catch (ObjectNotFoundException arg)
            {
                UserOofSettingsStorage.Tracer.TraceError <IExchangePrincipal, ObjectNotFoundException>(0L, "Mailbox:{0}: Exception on loading useroofsettings, exception = {1}, re-creating default useroofsettings.", itemStore.MailboxOwner, arg);
            }
            catch (VirusException arg2)
            {
                UserOofSettingsStorage.Tracer.TraceError <IExchangePrincipal, VirusException>(0L, "Mailbox:{0}: Exception on loading useroofsettings, exception = {1}, re-creating default useroofsettings.", itemStore.MailboxOwner, arg2);
                text = Strings.descOOFVirusDetectedOofReplyMessage;
            }
            if (string.IsNullOrEmpty(text2))
            {
                userOofSettings = UserOofSettingsStorage.CreateDefaultUserOofSettings(itemStore);
                if (text != null)
                {
                    userOofSettings.InternalReply.RawMessage = text;
                }
            }
            else
            {
                using (StringReader stringReader = new StringReader(text2))
                {
                    using (XmlReader xmlReader = XmlReader.Create(stringReader, new XmlReaderSettings
                    {
                        CheckCharacters = false
                    }))
                    {
                        try
                        {
                            UserOofSettingsSerializer userOofSettingsSerializer = (UserOofSettingsSerializer)UserOofSettingsSerializer.Serializer.Deserialize(xmlReader);
                            userOofSettings = userOofSettingsSerializer.Deserialize();
                            userOofSettings.InternalReply.SetByLegacyClient = userOofSettings.SetByLegacyClient;
                            userOofSettings.ExternalReply.SetByLegacyClient = userOofSettings.SetByLegacyClient;
                        }
                        catch (InvalidOperationException)
                        {
                            UserOofSettingsStorage.Tracer.TraceError <IExchangePrincipal>(0L, "Mailbox:{0}: Cannot read user OOF settings, InvalidOperationException", itemStore.MailboxOwner);
                            userOofSettings = UserOofSettingsStorage.CreateDefaultUserOofSettings(itemStore);
                        }
                        catch (InvalidUserOofSettingsXmlDocument)
                        {
                            userOofSettings = UserOofSettingsStorage.CreateDefaultUserOofSettings(itemStore);
                        }
                    }
                }
                UserOofSettingsStorage.Tracer.TraceDebug <IExchangePrincipal>(0L, "Mailbox:{0}: Loaded existing OOF settings", itemStore.MailboxOwner);
            }
            if (userOofSettings.OofState == OofState.Scheduled && userOofSettings.EndTime < DateTime.UtcNow)
            {
                userOofSettings.OofState = OofState.Disabled;
            }
            if (userOofSettings.OofState != OofState.Scheduled)
            {
                DateTime utcNow   = DateTime.UtcNow;
                DateTime dateTime = utcNow.AddDays(1.0);
                Duration duration = new Duration(DateTime.SpecifyKind(new DateTime(utcNow.Year, utcNow.Month, utcNow.Day, utcNow.Hour, 0, 0), DateTimeKind.Utc), DateTime.SpecifyKind(new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, 0, 0), DateTimeKind.Utc));
                userOofSettings.Duration = duration;
            }
            return(userOofSettings);
        }