Exemplo n.º 1
0
 internal ADUser ResolveUser(ADObjectId id, out Exception ex)
 {
     if (id == null)
     {
         throw new ArgumentNullException("id");
     }
     return(TeamMailboxADUserResolver.Resolve(this.adSession, id, out ex));
 }
Exemplo n.º 2
0
 protected override void InternalProcessRecord()
 {
     try
     {
         base.InternalProcessRecord();
         if (this.removeTeamMailboxFromResolverCache)
         {
             TeamMailboxADUserResolver.RemoveIdIfExists(base.DataObject.Id);
         }
     }
     finally
     {
         ProvisioningPerformanceHelper.StopLatencyDetection(this.latencyContext);
     }
 }
Exemplo n.º 3
0
        protected override void InternalProcessRecord()
        {
            IList <ADObjectId> list          = null;
            IList <ADObjectId> list2         = null;
            IList <ADObjectId> list3         = null;
            IList <ADObjectId> usersToRemove = null;
            bool flag = false;

            if (!this.executingUserIsMember)
            {
                if (this.DisplayName != null && this.DisplayName != this.DataObject.DisplayName)
                {
                    this.DataObject.DisplayName = this.DisplayName;
                    this.changeTracking         = true;
                }
                if (base.Fields.IsModified("Active"))
                {
                    if (this.Active)
                    {
                        if (!this.tm.Active)
                        {
                            this.tm.ClosedTime = null;
                            flag = true;
                            this.changeTracking = true;
                        }
                    }
                    else if (this.tm.Active)
                    {
                        this.tm.ClosedTime = new DateTime?(DateTime.UtcNow);
                        flag = true;
                        this.changeTracking = true;
                    }
                }
                if (base.Fields.IsModified("RemoveDuplicateMessages") && this.tm.RemoveDuplicateMessages != this.RemoveDuplicateMessages)
                {
                    this.tm.RemoveDuplicateMessages = this.RemoveDuplicateMessages;
                    this.changeTracking             = true;
                }
                if (base.Fields.IsModified("Owners") || base.Fields.IsModified("Members"))
                {
                    IList <ADObjectId> list4 = this.tm.Owners;
                    if (base.Fields.IsModified("Owners"))
                    {
                        IList <RecipientIdParameter> list5;
                        IList <ADUser> list6;
                        list4 = this.teamMailboxHelper.RecipientIds2ADObjectIds(this.Owners, out list5, out list6);
                        if (list5 != null && list5.Count > 0)
                        {
                            base.WriteError(new RecipientTaskException(Strings.ErrorTeamMailboxUserNotResolved(TeamMailboxHelper.GetAggreatedIds(list5))), ExchangeErrorCategory.Client, null);
                        }
                        if (list6 != null && list6.Count > 0)
                        {
                            base.WriteError(new RecipientTaskException(Strings.ErrorTeamMailboxUserNotResolved(TeamMailboxHelper.GetAggreatedUsers(list6))), ExchangeErrorCategory.Client, null);
                        }
                    }
                    IList <ADObjectId> userList = this.tm.Members;
                    if (base.Fields.IsModified("Members"))
                    {
                        IList <RecipientIdParameter> list5;
                        IList <ADUser> list6;
                        userList = this.teamMailboxHelper.RecipientIds2ADObjectIds(this.Members, out list5, out list6);
                        if (list5 != null && list5.Count > 0)
                        {
                            base.WriteError(new RecipientTaskException(Strings.ErrorTeamMailboxUserNotResolved(TeamMailboxHelper.GetAggreatedIds(list5))), ExchangeErrorCategory.Client, null);
                        }
                        if (list6 != null && list6.Count > 0)
                        {
                            base.WriteError(new RecipientTaskException(Strings.ErrorTeamMailboxUserNotResolved(TeamMailboxHelper.GetAggreatedUsers(list6))), ExchangeErrorCategory.Client, null);
                        }
                    }
                    IList <ADObjectId> newUserList = TeamMailbox.MergeUsers(list4, userList);
                    if (base.Fields.IsModified("Owners") && this.membershipHelper.UpdateTeamMailboxUserList(this.tm.Owners, list4, out list, out list2))
                    {
                        this.changeTracking = true;
                    }
                    if (this.membershipHelper.UpdateTeamMailboxUserList(this.tm.OwnersAndMembers, newUserList, out list3, out usersToRemove))
                    {
                        if (list != null && list.Count != 0)
                        {
                            TeamMailbox.DiffUsers(list3, list);
                        }
                        Exception ex = null;
                        try
                        {
                            this.membershipHelper.SetTeamMailboxUserPermissions(list3, usersToRemove, null, true);
                        }
                        catch (OverflowException ex2)
                        {
                            ex = ex2;
                        }
                        catch (COMException ex3)
                        {
                            ex = ex3;
                        }
                        catch (UnauthorizedAccessException ex4)
                        {
                            ex = ex4;
                        }
                        catch (TransientException ex5)
                        {
                            ex = ex5;
                        }
                        catch (DataSourceOperationException ex6)
                        {
                            ex = ex6;
                        }
                        if (ex != null)
                        {
                            base.WriteError(new RecipientTaskException(Strings.ErrorSetTeamMailboxUserPermissions(this.tm.DisplayName, ex.Message)), ExchangeErrorCategory.Client, null);
                        }
                        try
                        {
                            new TeamMailboxSecurityRefresher().Refresh(this.DataObject, (IRecipientSession)base.DataSession);
                        }
                        catch (DatabaseNotFoundException ex7)
                        {
                            ex = ex7;
                        }
                        catch (ObjectNotFoundException ex8)
                        {
                            ex = ex8;
                        }
                        catch (FormatException ex9)
                        {
                            ex = ex9;
                        }
                        if (ex != null)
                        {
                            base.WriteError(new RecipientTaskException(Strings.ErrorSetTeamMailboxUserPermissions(this.tm.DisplayName, ex.Message)), ExchangeErrorCategory.Client, null);
                        }
                        this.changeTracking = true;
                    }
                }
                if (base.Fields.IsModified("SharePointUrl"))
                {
                    try
                    {
                        this.changeTracking = this.teamMailboxHelper.LinkSharePointSite(this.SharePointUrl, false, this.Force);
                    }
                    catch (RecipientTaskException exception)
                    {
                        base.WriteError(exception, ExchangeErrorCategory.Client, this.Identity);
                    }
                }
            }
            if (base.Fields.IsModified("ShowInMyClient"))
            {
                if (!this.tm.Active)
                {
                    base.WriteError(new RecipientTaskException(Strings.ErrorTeamMailboxSetShowInMyClientForClosedMailbox(this.DataObject.DisplayName)), ExchangeErrorCategory.Client, this.Identity);
                }
                bool      flag2;
                Exception ex10;
                if (this.membershipHelper.SetShowInMyClient(this.executingUserId, this.ShowInMyClient, out flag2, out ex10))
                {
                    this.changeTracking = true;
                }
                else if (ex10 != null)
                {
                    base.WriteError(new RecipientTaskException(Strings.ErrorTeamMailboxSetShowInMyClient(this.DataObject.DisplayName, ex10.ToString())), ExchangeErrorCategory.Client, this.Identity);
                }
                else if (flag2)
                {
                    base.WriteError(new RecipientTaskException(Strings.ErrorTeamMailboxMaxShowInMyClientReached(this.DataObject.DisplayName, 10)), ExchangeErrorCategory.Client, this.Identity);
                }
            }
            base.InternalProcessRecord();
            if (flag)
            {
                TeamMailboxADUserResolver.RemoveIdIfExists(this.tm.Id);
            }
            IList <Exception> list7;

            this.membershipHelper.SetShowInMyClient(list3, usersToRemove, out list7);
            foreach (Exception ex11 in list7)
            {
                this.WriteWarning(Strings.ErrorTeamMailboxResolveUser(ex11.Message));
            }
        }
Exemplo n.º 4
0
        protected override void InternalProcessRecord()
        {
            ADUser      dataObject  = this.DataObject;
            TeamMailbox teamMailbox = TeamMailbox.FromDataObject(dataObject);

            this.teamMailboxHelper = new TeamMailboxHelper(teamMailbox, base.ExchangeRunspaceConfig.ExecutingUser, base.ExchangeRunspaceConfig.ExecutingUserOrganizationId, (IRecipientSession)base.DataSession, new TeamMailboxGetDataObject <ADUser>(base.GetDataObject <ADUser>));
            TeamMailboxMembershipHelper teamMailboxMembershipHelper = new TeamMailboxMembershipHelper(teamMailbox, (IRecipientSession)base.DataSession);
            Exception ex     = null;
            ADUser    aduser = TeamMailboxADUserResolver.Resolve((IRecipientSession)base.DataSession, this.executingUserId, out ex);

            if (aduser == null)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorExecutingUserIsNull), ExchangeErrorCategory.Client, null);
            }
            if (base.Fields.IsModified("DisplayName"))
            {
                teamMailbox.DisplayName = this.DisplayName;
            }
            teamMailbox.SetPolicy(this.provisioningPolicy);
            base.WriteVerbose(Strings.SiteMailboxPolicySet(this.provisioningPolicy.ToString()));
            teamMailbox.SetMyRole(this.executingUserId);
            Uri sharePointUrl = this.SharePointUrl;
            SharePointMemberShip sharePointMemberShip = SharePointMemberShip.Others;
            Uri  webCollectionUrl = null;
            Guid empty            = Guid.Empty;

            if (base.Fields.IsModified("SharePointUrl") && !base.Fields.IsModified("Force"))
            {
                try
                {
                    TeamMailboxHelper.CheckSharePointSite(SmtpAddress.Empty, ref sharePointUrl, base.ExchangeRunspaceConfig.ExecutingUser, base.ExchangeRunspaceConfig.ExecutingUserOrganizationId, aduser, out sharePointMemberShip, out webCollectionUrl, out empty);
                }
                catch (RecipientTaskException exception)
                {
                    base.WriteError(exception, ExchangeErrorCategory.Client, null);
                }
            }
            teamMailbox.SharePointUrl = sharePointUrl;
            teamMailbox.SetSharePointSiteInfo(webCollectionUrl, empty);
            teamMailbox.SharePointLinkedBy = this.executingUserId;
            List <ADObjectId>  list          = new List <ADObjectId>();
            List <ADObjectId>  list2         = new List <ADObjectId>();
            IList <ADObjectId> list3         = null;
            IList <ADObjectId> usersToRemove = null;

            if (TeamMailboxMembershipHelper.IsUserQualifiedType(aduser))
            {
                if (sharePointMemberShip == SharePointMemberShip.Owner)
                {
                    list.Add(this.executingUserId);
                    teamMailboxMembershipHelper.UpdateTeamMailboxUserList(teamMailbox.Owners, list, out list3, out usersToRemove);
                    teamMailboxMembershipHelper.UpdateTeamMailboxUserList(teamMailbox.OwnersAndMembers, list, out list3, out usersToRemove);
                }
                else if (sharePointMemberShip == SharePointMemberShip.Member)
                {
                    list2.Add(this.executingUserId);
                    teamMailboxMembershipHelper.UpdateTeamMailboxUserList(teamMailbox.OwnersAndMembers, list2, out list3, out usersToRemove);
                }
            }
            Exception ex2 = null;

            try
            {
                teamMailboxMembershipHelper.SetTeamMailboxUserPermissions(list3, usersToRemove, new SecurityIdentifier[]
                {
                    WellKnownSids.SiteMailboxGrantedAccessMembers
                }, false);
                if (list3 != null)
                {
                    base.WriteVerbose(Strings.SiteMailboxCreatorSet(list3[0].ToString()));
                }
            }
            catch (OverflowException ex3)
            {
                ex2 = ex3;
            }
            catch (COMException ex4)
            {
                ex2 = ex4;
            }
            catch (UnauthorizedAccessException ex5)
            {
                ex2 = ex5;
            }
            catch (TransientException ex6)
            {
                ex2 = ex6;
            }
            catch (DataSourceOperationException ex7)
            {
                ex2 = ex7;
            }
            if (ex2 != null)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorSetTeamMailboxUserPermissions(teamMailbox.DisplayName, ex2.Message)), ExchangeErrorCategory.Client, null);
            }
            base.InternalProcessRecord();
            if (base.Fields.IsModified("SharePointUrl") && !base.Fields.IsModified("Force"))
            {
                try
                {
                    this.teamMailboxHelper.LinkSharePointSite(sharePointUrl, true, false);
                    base.WriteVerbose(Strings.SiteMailboxLinkedToSharePointSite(sharePointUrl.AbsoluteUri));
                }
                catch (RecipientTaskException exception2)
                {
                    base.DataSession.Delete(this.DataObject);
                    base.WriteError(exception2, ExchangeErrorCategory.Client, null);
                }
            }
            IList <Exception> list4;

            teamMailboxMembershipHelper.SetShowInMyClient(list3, usersToRemove, out list4);
            foreach (Exception ex8 in list4)
            {
                this.WriteWarning(Strings.ErrorTeamMailboxResolveUser(ex8.Message));
            }
            EnqueueResult enqueueResult = EnqueueResult.Success;

            if (this.databaseLocationInfo != null)
            {
                int num = 0;
                for (;;)
                {
                    base.WriteVerbose(new LocalizedString(string.Format("Trying to send membership sync request to server {0} for MailboxGuid {1} using domain controller {2}", this.databaseLocationInfo.ServerFqdn, dataObject.ExchangeGuid, this.lastUsedDc)));
                    enqueueResult = RpcClientWrapper.EnqueueTeamMailboxSyncRequest(this.databaseLocationInfo.ServerFqdn, dataObject.ExchangeGuid, QueueType.TeamMailboxMembershipSync, base.CurrentOrganizationId, "NewTMCMD_" + base.ExecutingUserIdentityName, this.lastUsedDc, SyncOption.Default);
                    base.WriteVerbose(new LocalizedString(string.Format("The membership sync result is {0}", enqueueResult.Result)));
                    if (enqueueResult.Result == EnqueueResultType.Successful)
                    {
                        goto IL_409;
                    }
                    if (num > 12)
                    {
                        break;
                    }
                    Thread.Sleep(5000);
                    num++;
                }
                this.WriteWarning(Strings.ErrorTeamMailboxEnqueueMembershipSyncEvent(enqueueResult.ResultDetail));
                goto IL_414;
IL_409:
                base.WriteVerbose(Strings.SiteMailboxMembershipSyncEventEnqueued);
IL_414:
                enqueueResult = RpcClientWrapper.EnqueueTeamMailboxSyncRequest(this.databaseLocationInfo.ServerFqdn, dataObject.ExchangeGuid, QueueType.TeamMailboxDocumentSync, base.CurrentOrganizationId, "NewTMCMD_" + base.ExecutingUserIdentityName, this.lastUsedDc, SyncOption.Default);
                base.WriteVerbose(new LocalizedString(string.Format("Document sync request to server {0} for MailboxGuid {1} using domain controller {2}. The result is: {3}", new object[]
                {
                    this.databaseLocationInfo.ServerFqdn,
                    dataObject.ExchangeGuid,
                    this.lastUsedDc,
                    enqueueResult.ResultDetail
                })));
                return;
            }
            this.WriteWarning(Strings.ErrorTeamMailboxEnqueueMembershipSyncEvent("No database location information available"));
        }