示例#1
0
        protected virtual ADObjectId AutoSelectRequestQueueForPFRequest(OrganizationId orgId)
        {
            Guid guid = Guid.Empty;

            TenantPublicFolderConfigurationCache.Instance.RemoveValue(orgId);
            TenantPublicFolderConfiguration value = TenantPublicFolderConfigurationCache.Instance.GetValue(orgId);
            PublicFolderInformation         hierarchyMailboxInformation = value.GetHierarchyMailboxInformation();

            guid = hierarchyMailboxInformation.HierarchyMailboxGuid;
            if (guid == Guid.Empty)
            {
                base.WriteError(new RecipientTaskException(MrsStrings.PublicFolderMailboxesNotProvisionedForMigration), ExchangeErrorCategory.ServerOperation, null);
            }
            PublicFolderRecipient localMailboxRecipient = value.GetLocalMailboxRecipient(guid);

            return(localMailboxRecipient.Database);
        }
示例#2
0
        protected override IConfigurable ConvertDataObjectToPresentationObject(IConfigurable dataObject)
        {
            IConfigurable configurable = base.ConvertDataObjectToPresentationObject(dataObject);
            Mailbox       mailbox      = configurable as Mailbox;

            if (mailbox == null)
            {
                return(null);
            }
            TenantPublicFolderConfiguration value = TenantPublicFolderConfigurationCache.Instance.GetValue(mailbox.OrganizationId);
            bool flag = mailbox.RecipientTypeDetails == Microsoft.Exchange.Data.Directory.Recipient.RecipientTypeDetails.PublicFolderMailbox;

            if (!flag)
            {
                if (mailbox.DefaultPublicFolderMailboxValue == null || mailbox.DefaultPublicFolderMailboxValue.IsDeleted)
                {
                    PublicFolderRecipient publicFolderRecipient = value.GetPublicFolderRecipient(mailbox.ExchangeGuid, null);
                    if (publicFolderRecipient != null)
                    {
                        if (base.NeedSuppressingPiiData)
                        {
                            string text;
                            string text2;
                            mailbox.DefaultPublicFolderMailbox = SuppressingPiiData.Redact(publicFolderRecipient.ObjectId, out text, out text2);
                        }
                        else
                        {
                            mailbox.DefaultPublicFolderMailbox = publicFolderRecipient.ObjectId;
                        }
                    }
                }
                else
                {
                    mailbox.DefaultPublicFolderMailbox = mailbox.DefaultPublicFolderMailboxValue;
                }
            }
            mailbox.IsRootPublicFolderMailbox = (flag && value.GetHierarchyMailboxInformation().HierarchyMailboxGuid == mailbox.ExchangeGuid);
            if (this.UsnForReconciliationSearch >= 0L)
            {
                mailbox.ReconciliationId = mailbox.NetID;
            }
            mailbox.ResetChangeTracking();
            return(mailbox);
        }
 public PublicFolderDataProvider(IConfigurationSession configurationSession, string action, Guid mailboxGuid)
 {
     using (DisposeGuard disposeGuard = this.Guard())
     {
         Util.ThrowOnNullArgument(configurationSession, "configurationSession");
         Util.ThrowOnNullOrEmptyArgument(action, "action");
         this.currentOrganizationId = configurationSession.GetOrgContainer().OrganizationId;
         TenantPublicFolderConfiguration value = TenantPublicFolderConfigurationCache.Instance.GetValue(this.currentOrganizationId);
         if (mailboxGuid == Guid.Empty)
         {
             Organization orgContainer = configurationSession.GetOrgContainer();
             if (orgContainer.DefaultPublicFolderMailbox.HierarchyMailboxGuid != value.GetHierarchyMailboxInformation().HierarchyMailboxGuid)
             {
                 TenantPublicFolderConfigurationCache.Instance.RemoveValue(this.currentOrganizationId);
             }
         }
         else if (value.GetLocalMailboxRecipient(mailboxGuid) == null)
         {
             TenantPublicFolderConfigurationCache.Instance.RemoveValue(this.currentOrganizationId);
         }
         this.publicFolderSessionCache = new PublicFolderSessionCache(configurationSession.SessionSettings.CurrentOrganizationId, null, null, CultureInfo.InvariantCulture, string.Format("Client=Management;Action={0}", action), null, null, true);
         this.PublicFolderSession      = this.publicFolderSessionCache.GetPublicFolderSession(mailboxGuid);
         disposeGuard.Success();
     }
 }
示例#4
0
 protected override void InternalProcessRecord()
 {
     TaskLogger.LogEnter();
     try
     {
         ADUser aduser = this.DataObject as ADUser;
         if (aduser == null || aduser.RecipientTypeDetails != RecipientTypeDetails.PublicFolderMailbox)
         {
             base.WriteError(new ObjectNotFoundException(Strings.PublicFolderMailboxNotFound), ExchangeErrorCategory.Client, aduser);
         }
         ExchangePrincipal exchangePrincipal = ExchangePrincipal.FromADUser(base.SessionSettings, aduser);
         string            serverFqdn        = exchangePrincipal.MailboxInfo.Location.ServerFqdn;
         if (this.InvokeSynchronizer)
         {
             TenantPublicFolderConfiguration value = TenantPublicFolderConfigurationCache.Instance.GetValue(aduser.OrganizationId);
             Organization orgContainer             = this.ConfigurationSession.GetOrgContainer();
             if (orgContainer.DefaultPublicFolderMailbox.HierarchyMailboxGuid != value.GetHierarchyMailboxInformation().HierarchyMailboxGuid || value.GetLocalMailboxRecipient(aduser.ExchangeGuid) == null)
             {
                 TenantPublicFolderConfigurationCache.Instance.RemoveValue(aduser.OrganizationId);
             }
             if (aduser.ExchangeGuid == value.GetHierarchyMailboxInformation().HierarchyMailboxGuid)
             {
                 base.WriteError(new TaskArgumentException(Strings.ErrorSecondaryMailboxIdRequired), ExchangeErrorCategory.Client, exchangePrincipal);
             }
             if (this.FullSync)
             {
                 using (PublicFolderSession publicFolderSession = PublicFolderSession.OpenAsAdmin(this.DataObject.OrganizationId, null, aduser.ExchangeGuid, null, CultureInfo.CurrentCulture, "Client=Management;Action=UpdatePublicFolderMailbox", null))
                 {
                     using (Folder folder = Folder.Bind(publicFolderSession, publicFolderSession.GetTombstonesRootFolderId()))
                     {
                         using (UserConfiguration configuration = UserConfiguration.GetConfiguration(folder, new UserConfigurationName("PublicFolderSyncInfo", ConfigurationNameKind.Name), UserConfigurationTypes.Dictionary))
                         {
                             IDictionary dictionary = configuration.GetDictionary();
                             dictionary["SyncState"] = null;
                             configuration.Save();
                         }
                     }
                 }
             }
             PublicFolderSyncJobState publicFolderSyncJobState = PublicFolderSyncJobRpc.StartSyncHierarchy(exchangePrincipal, this.ReconcileFolders);
             if (!this.SuppressStatus)
             {
                 base.WriteObject(new UpdatePublicFolderMailboxResult(Strings.StatusMessageStartUpdatePublicFolderMailbox(this.Identity.ToString())));
                 int num = 0;
                 while (publicFolderSyncJobState.JobStatus != PublicFolderSyncJobState.Status.Completed && publicFolderSyncJobState.LastError == null && num++ < UpdatePublicFolderMailbox.timeToWaitInMilliseconds / UpdatePublicFolderMailbox.QueryIntervalInMilliseconds)
                 {
                     base.WriteObject(new UpdatePublicFolderMailboxResult(Strings.StatusMessageUpdatePublicFolderMailboxUnderProgress(publicFolderSyncJobState.JobStatus.ToString())));
                     Thread.Sleep(UpdatePublicFolderMailbox.QueryIntervalInMilliseconds);
                     publicFolderSyncJobState = PublicFolderSyncJobRpc.QueryStatusSyncHierarchy(exchangePrincipal);
                 }
                 if (publicFolderSyncJobState.LastError != null)
                 {
                     base.WriteError(publicFolderSyncJobState.LastError, ExchangeErrorCategory.ServerOperation, publicFolderSyncJobState);
                 }
                 if (publicFolderSyncJobState.JobStatus == PublicFolderSyncJobState.Status.Completed)
                 {
                     base.WriteObject(new UpdatePublicFolderMailboxResult(Strings.StatusMessageUpdatePublicFolderMailboxCompleted));
                 }
                 else
                 {
                     base.WriteObject(new UpdatePublicFolderMailboxResult(Strings.StatusMessageSynchronizerRunningInBackground));
                 }
             }
         }
         else if (aduser.ExchangeGuid != Guid.Empty)
         {
             MailboxDatabase mailboxDatabase = base.GlobalConfigSession.Read <MailboxDatabase>(aduser.Database);
             if (mailboxDatabase == null)
             {
                 base.WriteError(new TaskArgumentException(Strings.ElcMdbNotFound(this.Identity.ToString())), ExchangeErrorCategory.Client, null);
             }
             this.EnsureMailboxExistsOnDatabase(aduser.ExchangeGuid);
             AssistantsRpcClient assistantsRpcClient = new AssistantsRpcClient(serverFqdn);
             try
             {
                 assistantsRpcClient.Start("PublicFolderAssistant", aduser.ExchangeGuid, mailboxDatabase.Guid);
             }
             catch (RpcException ex)
             {
                 base.WriteError(new TaskException(RpcUtility.MapRpcErrorCodeToMessage(ex.ErrorCode, serverFqdn)), ExchangeErrorCategory.Client, null);
             }
         }
     }
     finally
     {
         TaskLogger.LogExit();
     }
 }