internal static string GenerateUniqueAliasForSiteMailbox(IRecipientSession recipientSession, OrganizationId organizationId, string preferredAlias, string prefix, bool isMicrosoftHostedOnlyDatacenter, Task.TaskVerboseLoggingDelegate logHandler, Task.ErrorLoggerDelegate writeError)
        {
            string text = WindowsLiveIDLocalPartConstraint.RemoveInvalidPartOfWindowsLiveID(preferredAlias);

            if (!string.IsNullOrEmpty(text) && text.Length > 3)
            {
                logHandler(Strings.VerboseGenerateAliasBySiteDisplayName(preferredAlias));
                text = RecipientTaskHelper.GenerateUniqueAlias(recipientSession, organizationId, (!string.IsNullOrEmpty(prefix)) ? (prefix + text) : text, logHandler, 63);
            }
            else
            {
                int num = 1000;
                if (string.IsNullOrEmpty(prefix))
                {
                    prefix = (isMicrosoftHostedOnlyDatacenter ? "SMO-" : "SM-");
                }
                do
                {
                    text = TeamMailboxHelper.GenerateRandomString();
                    text = prefix + text;
                    logHandler(Strings.VerboseGenerateAliasByRandomString(preferredAlias, text));
                    if (RecipientTaskHelper.IsAliasUnique(recipientSession, organizationId, null, text, logHandler, writeError, ExchangeErrorCategory.Client))
                    {
                        break;
                    }
                    text = string.Empty;
                }while (num-- > 0);
            }
            if (string.IsNullOrEmpty(text))
            {
                writeError(new ErrorCannotGenerateSiteMailboxAliasException(), ExchangeErrorCategory.Client, null);
            }
            return(text);
        }
        protected override IConfigurable ResolveDataObject()
        {
            ADRecipient adrecipient = (ADRecipient)base.ResolveDataObject();

            if (MailboxTaskHelper.ExcludeArbitrationMailbox(adrecipient, base.Arbitration) || MailboxTaskHelper.ExcludePublicFolderMailbox(adrecipient, base.PublicFolder) || MailboxTaskHelper.ExcludeGroupMailbox(adrecipient, false) || MailboxTaskHelper.ExcludeMailboxPlan(adrecipient, false) || MailboxTaskHelper.ExcludeAuditLogMailbox(adrecipient, base.AuditLog))
            {
                base.WriteError(new ManagementObjectNotFoundException(base.GetErrorMessageObjectNotFound(this.Identity.ToString(), typeof(ADUser).ToString(), (base.DataSession != null) ? base.DataSession.Source : null)), ExchangeErrorCategory.Client, this.Identity);
            }
            if (adrecipient != null && adrecipient.RecipientTypeDetails == RecipientTypeDetails.TeamMailbox)
            {
                TeamMailbox teamMailbox = TeamMailbox.FromDataObject((ADUser)adrecipient);
                teamMailbox.ClosedTime = new DateTime?(DateTime.UtcNow);
                this.removeTeamMailboxFromResolverCache = true;
                if (teamMailbox.SharePointUrl != null && base.ExchangeRunspaceConfig != null)
                {
                    TeamMailboxHelper teamMailboxHelper = new TeamMailboxHelper(teamMailbox, base.ExchangeRunspaceConfig.ExecutingUser, base.ExchangeRunspaceConfig.ExecutingUserOrganizationId, (IRecipientSession)base.DataSession, new TeamMailboxGetDataObject <ADUser>(base.GetDataObject <ADUser>));
                    try
                    {
                        teamMailboxHelper.LinkSharePointSite(null, false, false);
                    }
                    catch (RecipientTaskException ex)
                    {
                        this.WriteWarning(Strings.ErrorTeamMailFailedUnlinkSharePointSite(this.Identity.ToString(), teamMailbox.SharePointUrl.ToString(), ex.Message));
                    }
                }
            }
            return(adrecipient);
        }
        protected override void InternalStateReset()
        {
            if (string.IsNullOrEmpty(this.Name) && string.IsNullOrEmpty(this.DisplayName))
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorNewTeamMailboxParameter), ExchangeErrorCategory.Client, null);
            }
            IList <TeamMailboxProvisioningPolicy> teamMailboxPolicies = this.GetTeamMailboxPolicies();

            if (teamMailboxPolicies == null || teamMailboxPolicies.Count == 0)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorTeamMailboxCanNotLoadPolicy), ExchangeErrorCategory.Client, null);
            }
            this.provisioningPolicy = teamMailboxPolicies[0];
            if (string.IsNullOrEmpty(this.Name))
            {
                string prefix = null;
                if (!string.IsNullOrEmpty(this.provisioningPolicy.AliasPrefix))
                {
                    prefix = this.provisioningPolicy.AliasPrefix;
                }
                else if (this.provisioningPolicy.DefaultAliasPrefixEnabled)
                {
                    prefix = (Datacenter.IsMicrosoftHostedOnly(true) ? "SMO-" : "SM-");
                }
                this.Name = TeamMailboxHelper.GenerateUniqueAliasForSiteMailbox(base.TenantGlobalCatalogSession, base.CurrentOrganizationId, this.DisplayName, prefix, Datacenter.IsMicrosoftHostedOnly(true), new Task.TaskVerboseLoggingDelegate(base.WriteVerbose), new Task.ErrorLoggerDelegate(base.WriteError));
            }
            if (Datacenter.IsMicrosoftHostedOnly(true))
            {
                SiteMailboxAddressesTemplate siteMailboxAddressesTemplate = null;
                try
                {
                    siteMailboxAddressesTemplate = SiteMailboxAddressesTemplate.GetSiteMailboxAddressesTemplate(this.ConfigurationSession, base.ProvisioningCache);
                }
                catch (ErrorSiteMailboxCannotLoadAddressTemplateException exception)
                {
                    base.WriteError(exception, ExchangeErrorCategory.Client, null);
                }
                base.UserPrincipalName = RecipientTaskHelper.GenerateUniqueUserPrincipalName(base.TenantGlobalCatalogSession, this.Name, siteMailboxAddressesTemplate.UserPrincipalNameDomain, new Task.TaskVerboseLoggingDelegate(base.WriteVerbose));
                base.UserSpecifiedParameters["SpecificAddressTemplates"] = siteMailboxAddressesTemplate.AddressTemplates;
            }
            base.InternalStateReset();
        }
        private LinkSharePointSiteResult InternalLinkSharePointSite(Uri sharePointUrl, out string sharePointTeamMailboxKey, bool siteChecked, bool forceToUnlink)
        {
            LinkSharePointSiteResult linkSharePointSiteResult = LinkSharePointSiteResult.Success;

            sharePointTeamMailboxKey = "N/A";
            bool      flag = sharePointUrl == null;
            Uri       uri  = sharePointUrl ?? this.teamMailbox.SharePointUrl;
            Exception ex   = null;

            if (flag)
            {
                if (this.teamMailbox.SharePointUrl == null)
                {
                    return(LinkSharePointSiteResult.CurrentlyNotLinked);
                }
                sharePointUrl = this.teamMailbox.SharePointUrl;
            }
            try
            {
                using (ClientContext clientContext = new ClientContext(sharePointUrl.AbsoluteUri))
                {
                    clientContext.RequestTimeout = 60000;
                    bool flag2;
                    TeamMailboxHelper.GetCredentialAndConfigureClientContext(this.actAsUser, this.actAsUserOrgId, clientContext, true, out flag2);
                    Web web = clientContext.Web;
                    clientContext.Load <Web>(web, new Expression <Func <Web, object> >[]
                    {
                        (Web x) => x.AllProperties,
                        (Web x) => (object)x.Id
                    });
                    Site site = clientContext.Site;
                    clientContext.Load <Site>(site, new Expression <Func <Site, object> >[]
                    {
                        (Site x) => x.Url
                    });
                    clientContext.ExecuteQuery();
                    if (!siteChecked && clientContext.ServerVersion.Major < 15)
                    {
                        return(LinkSharePointSiteResult.SPServerVersionNotCompatible);
                    }
                    string text = this.teamMailbox.PrimarySmtpAddress.ToString();
                    if (web.AllProperties.FieldValues.ContainsKey("ExchangeTeamMailboxEmailAddress"))
                    {
                        sharePointTeamMailboxKey = (string)web.AllProperties["ExchangeTeamMailboxEmailAddress"];
                        if (!string.Equals(text, sharePointTeamMailboxKey, StringComparison.OrdinalIgnoreCase))
                        {
                            linkSharePointSiteResult = LinkSharePointSiteResult.LinkedByOthers;
                        }
                        else if (flag)
                        {
                            web.AllProperties["ExchangeTeamMailboxEmailAddress"] = null;
                            web.Update();
                            clientContext.ExecuteQuery();
                            this.teamMailbox.SharePointUrl = null;
                            this.teamMailbox.SetSharePointSiteInfo(null, Guid.Empty);
                            this.teamMailbox.SharePointLinkedBy = null;
                        }
                        else
                        {
                            if (this.actAsUser.Id.Equals(this.teamMailbox.SharePointLinkedBy))
                            {
                                linkSharePointSiteResult = LinkSharePointSiteResult.AlreadyLinkedBySelf;
                            }
                            else
                            {
                                this.teamMailbox.SharePointLinkedBy = this.actAsUser.Id;
                            }
                            this.teamMailbox.SharePointUrl = sharePointUrl;
                        }
                    }
                    else if (flag)
                    {
                        this.teamMailbox.SharePointUrl = null;
                        this.teamMailbox.SetSharePointSiteInfo(null, Guid.Empty);
                        this.teamMailbox.SharePointLinkedBy = null;
                    }
                    else
                    {
                        Uri url = TeamMailbox.GetUrl(site.Url);
                        if (url == null)
                        {
                            throw new RecipientTaskException(Strings.ErrorSharePointSiteHasNoValidWebCollectionUrl(site.Url));
                        }
                        web.AllProperties["ExchangeTeamMailboxEmailAddress"]      = text;
                        web.AllProperties["ExchangeTeamMailboxSharePointUrl"]     = sharePointUrl.AbsoluteUri;
                        web.AllProperties["ExchangeTeamMailboxSiteID"]            = web.Id.ToString();
                        web.AllProperties["ExchangeTeamMailboxSiteCollectionUrl"] = site.Url;
                        web.Update();
                        clientContext.ExecuteQuery();
                        this.teamMailbox.SharePointUrl = sharePointUrl;
                        this.teamMailbox.SetSharePointSiteInfo(url, web.Id);
                        this.teamMailbox.SharePointLinkedBy = this.actAsUser.Id;
                    }
                }
            }
            catch (ClientRequestException ex2)
            {
                ex = new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSite(uri.AbsoluteUri, ex2.Message));
            }
            catch (ServerException ex3)
            {
                ex = new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSiteWithCorrelationId(uri.AbsoluteUri, ex3.Message, ex3.ServerErrorTraceCorrelationId));
            }
            catch (TimeoutException ex4)
            {
                ex = new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSite(uri.AbsoluteUri, ex4.Message));
            }
            catch (IOException ex5)
            {
                ex = new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSite(uri.AbsoluteUri, ex5.Message));
            }
            catch (WebException e)
            {
                SharePointException ex6 = new SharePointException(uri.AbsoluteUri, e, false);
                ex = new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSite(uri.AbsoluteUri, ex6.DiagnosticInfo));
            }
            catch (FormatException ex7)
            {
                ex = new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSite(uri.AbsoluteUri, ex7.Message));
            }
            if (flag && forceToUnlink)
            {
                if (ex != null || linkSharePointSiteResult == LinkSharePointSiteResult.LinkedByOthers)
                {
                    this.teamMailbox.SharePointUrl = null;
                    this.teamMailbox.SetSharePointSiteInfo(null, Guid.Empty);
                    this.teamMailbox.SharePointLinkedBy = null;
                    linkSharePointSiteResult            = LinkSharePointSiteResult.Success;
                }
            }
            else if (ex != null)
            {
                throw ex;
            }
            return(linkSharePointSiteResult);
        }
        internal static MultiValuedProperty <CultureInfo> CheckSharePointSite(SmtpAddress teamMailboxEmailAddress, ref Uri sharePointUrl, ADRawEntry actAsUser, OrganizationId actAsUserOrgId, ADUser executingUser, out SharePointMemberShip executingUserMembership, out Uri webCollectionUrl, out Guid webId)
        {
            MultiValuedProperty <CultureInfo> multiValuedProperty = new MultiValuedProperty <CultureInfo>();

            executingUserMembership = SharePointMemberShip.Others;
            try
            {
                using (ClientContext clientContext = new ClientContext(sharePointUrl.AbsoluteUri))
                {
                    clientContext.RequestTimeout = 60000;
                    bool flag;
                    TeamMailboxHelper.GetCredentialAndConfigureClientContext(actAsUser, actAsUserOrgId, clientContext, true, out flag);
                    Web web = clientContext.Web;
                    clientContext.Load <Web>(web, new Expression <Func <Web, object> >[]
                    {
                        (Web x) => x.AllProperties,
                        (Web x) => x.Url,
                        (Web x) => (object)x.Language,
                        (Web x) => x.Features,
                        (Web x) => (object)x.Id
                    });
                    Feature byId = web.Features.GetById(new Guid("{502A2D54-6102-4757-AAA0-A90586106368}"));
                    clientContext.Load <Feature>(byId, new Expression <Func <Feature, object> > [0]);
                    Group associatedOwnerGroup  = clientContext.Web.AssociatedOwnerGroup;
                    Group associatedMemberGroup = clientContext.Web.AssociatedMemberGroup;
                    clientContext.Load <UserCollection>(associatedOwnerGroup.Users, new Expression <Func <UserCollection, object> > [0]);
                    clientContext.Load <UserCollection>(associatedMemberGroup.Users, new Expression <Func <UserCollection, object> > [0]);
                    Site site = clientContext.Site;
                    clientContext.Load <Site>(site, new Expression <Func <Site, object> >[]
                    {
                        (Site x) => x.Url
                    });
                    bool flag2 = false;
                    try
                    {
                        clientContext.ExecuteQuery();
                        if (byId.ServerObjectIsNull != null)
                        {
                            flag2 = !byId.ServerObjectIsNull.Value;
                        }
                    }
                    catch (UnauthorizedAccessException)
                    {
                    }
                    if (!flag2)
                    {
                        throw new RecipientTaskException(Strings.ErrorTeamMailboxFeatureNotInstalled(web.Url));
                    }
                    if (clientContext.ServerVersion.Major < 15)
                    {
                        throw new RecipientTaskException(Strings.ErrorTeamMailboxSharePointServerVersionInCompatible);
                    }
                    if (web.AllProperties.FieldValues.ContainsKey("ExchangeTeamMailboxEmailAddress") && (teamMailboxEmailAddress == SmtpAddress.Empty || !string.Equals(teamMailboxEmailAddress.ToString(), (string)web.AllProperties["ExchangeTeamMailboxEmailAddress"], StringComparison.OrdinalIgnoreCase)))
                    {
                        throw new RecipientTaskException(Strings.ErrorTeamMailboxSharePointSiteAlreadyLinkedWithOtherTM(sharePointUrl.ToString(), (string)web.AllProperties["ExchangeTeamMailboxEmailAddress"]));
                    }
                    webCollectionUrl = TeamMailbox.GetUrl(site.Url);
                    webId            = web.Id;
                    if (webCollectionUrl == null)
                    {
                        throw new RecipientTaskException(Strings.ErrorSharePointSiteHasNoValidWebCollectionUrl(site.Url));
                    }
                    multiValuedProperty.Add(new CultureInfo((int)web.Language));
                    try
                    {
                        foreach (User spUser in associatedOwnerGroup.Users)
                        {
                            if (TeamMailboxHelper.ExchangeSharePointUserMatch(executingUser, spUser))
                            {
                                executingUserMembership = SharePointMemberShip.Owner;
                                break;
                            }
                        }
                        if (executingUserMembership == SharePointMemberShip.Others)
                        {
                            foreach (User spUser2 in associatedMemberGroup.Users)
                            {
                                if (TeamMailboxHelper.ExchangeSharePointUserMatch(executingUser, spUser2))
                                {
                                    executingUserMembership = SharePointMemberShip.Member;
                                    break;
                                }
                            }
                        }
                    }
                    catch (CollectionNotInitializedException)
                    {
                        executingUserMembership = SharePointMemberShip.Others;
                    }
                    string uriString = null;
                    if (!MaintenanceSynchronizer.TryEscapeAndGetWellFormedUrl(web.Url, out uriString))
                    {
                        throw new RecipientTaskException(Strings.ErrorSharePointSiteHasNoValidUrl(web.Url));
                    }
                    Uri uri = new Uri(uriString);
                    if (uri != sharePointUrl)
                    {
                        sharePointUrl = uri;
                    }
                }
            }
            catch (ClientRequestException ex)
            {
                throw new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSite(sharePointUrl.AbsoluteUri, ex.Message));
            }
            catch (ServerException ex2)
            {
                throw new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSiteWithCorrelationId(sharePointUrl.AbsoluteUri, ex2.Message, ex2.ServerErrorTraceCorrelationId));
            }
            catch (TimeoutException ex3)
            {
                throw new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSite(sharePointUrl.AbsoluteUri, ex3.Message));
            }
            catch (IOException ex4)
            {
                throw new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSite(sharePointUrl.AbsoluteUri, ex4.Message));
            }
            catch (WebException e)
            {
                SharePointException ex5 = new SharePointException(sharePointUrl.AbsoluteUri, e, false);
                throw new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSite(sharePointUrl.AbsoluteUri, ex5.DiagnosticInfo));
            }
            catch (FormatException ex6)
            {
                throw new RecipientTaskException(Strings.ErrorTeamMailboxContactSharePointSite(sharePointUrl.AbsoluteUri, ex6.Message));
            }
            return(multiValuedProperty);
        }
        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));
            }
        }
Beispiel #7
0
        protected override void InternalProcessRecord()
        {
            ValidationResultCollector validationResultCollector = new ValidationResultCollector();
            LocalConfiguration        localConfiguration        = LocalConfiguration.Load(validationResultCollector);

            foreach (ValidationResultNode sendToPipeline in validationResultCollector.Results)
            {
                base.WriteObject(sendToPipeline);
            }
            SharePointException ex = null;
            Uri uri = this.SharePointUrl ?? this.tmADObject.SharePointUrl;
            OAuthCredentials oauthCredentials = null;

            try
            {
                using (ClientContext clientContext = new ClientContext(uri))
                {
                    bool         flag = false;
                    ICredentials credentialAndConfigureClientContext = TeamMailboxHelper.GetCredentialAndConfigureClientContext(this.requestor, (this.requestor != null) ? this.requestor.OrganizationId : base.CurrentOrganizationId, clientContext, this.UseAppTokenOnly, out flag);
                    if (!flag)
                    {
                        base.WriteError(new InvalidOperationException(Strings.OauthIsTurnedOff), ErrorCategory.InvalidOperation, null);
                    }
                    oauthCredentials                    = (credentialAndConfigureClientContext as OAuthCredentials);
                    oauthCredentials.Tracer             = new TestSiteMailbox.TaskOauthOutboundTracer();
                    oauthCredentials.LocalConfiguration = localConfiguration;
                    Web web = clientContext.Web;
                    clientContext.Load <Web>(web, new Expression <Func <Web, object> > [0]);
                    clientContext.ExecuteQuery();
                }
            }
            catch (ClientRequestException e)
            {
                ex = new SharePointException(uri.AbsoluteUri, e);
            }
            catch (ServerException e2)
            {
                ex = new SharePointException(uri.AbsoluteUri, e2);
            }
            catch (IOException ex2)
            {
                ex = new SharePointException(uri.AbsoluteUri, new LocalizedString(ex2.Message));
            }
            catch (WebException e3)
            {
                ex = new SharePointException(uri.AbsoluteUri, e3, true);
            }
            if (ex != null)
            {
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.AppendLine(Strings.TestTeamMailboxOutboundOauthLog);
                stringBuilder.AppendLine(oauthCredentials.Tracer.ToString());
                stringBuilder.AppendLine(Strings.TestTeamMailboxSharePointResponseDetails);
                stringBuilder.AppendLine(ex.DiagnosticInfo);
                ValidationResultNode sendToPipeline2 = new ValidationResultNode(Strings.TestTeamMailboxSharepointCallUnderOauthTask, new LocalizedString(stringBuilder.ToString()), ResultType.Error);
                base.WriteObject(sendToPipeline2);
                return;
            }
            StringBuilder stringBuilder2 = new StringBuilder();

            stringBuilder2.AppendLine(Strings.TestTeamMailboxSharepointCallUnderOauthSuccess(uri.AbsoluteUri));
            stringBuilder2.AppendLine(Strings.TestTeamMailboxOutboundOauthLog);
            stringBuilder2.AppendLine(oauthCredentials.Tracer.ToString());
            ValidationResultNode sendToPipeline3 = new ValidationResultNode(Strings.TestTeamMailboxSharepointCallUnderOauthTask, new LocalizedString(stringBuilder2.ToString()), ResultType.Success);

            base.WriteObject(sendToPipeline3);
        }
        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"));
        }