Ejemplo n.º 1
0
        private bool IsValidExternalRecipient(ADRecipient mailboxOwner, string recipient, ADRecipient adRecipient)
        {
            string domain = new SmtpAddress(recipient).Domain;

            if (adRecipient == null)
            {
                if (SharingProviderHandlerExternal.IsOrganizationHasOrganizationRelationshipWithDomain(mailboxOwner.OrganizationId, domain))
                {
                    ExTraceGlobals.SharingTracer.TraceDebug <ADRecipient, string, string>((long)this.GetHashCode(), "{0}: Found OrganizationRelationship with domain {1}, so {2} this is valid external recipient.", mailboxOwner, domain, recipient);
                    return(true);
                }
            }
            else if (SharingProviderHandlerExternal.IsOrganizationHasOrganizationRelationshipWithRecipient(mailboxOwner.OrganizationId, adRecipient))
            {
                ExTraceGlobals.SharingTracer.TraceDebug <ADRecipient, string>((long)this.GetHashCode(), "{0}: Found OrganizationRelationship that matches one of proxy addresses of {1}, this is valid external recipient.", mailboxOwner, recipient);
                return(true);
            }
            ExTraceGlobals.SharingTracer.TraceDebug <ADRecipient, string>((long)this.GetHashCode(), "{0}: Found NO OrganizationRelationship with {1}.", mailboxOwner, recipient);
            IConfigurationSession tenantOrTopologyConfigurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(ConsistencyMode.FullyConsistent, mailboxOwner.OrganizationId.ToADSessionSettings(), 485, "IsValidExternalRecipient", "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\Sharing\\SharingProviderHandlerExternal.cs");
            AcceptedDomain        acceptedDomainByDomainName           = tenantOrTopologyConfigurationSession.GetAcceptedDomainByDomainName(domain);

            if (acceptedDomainByDomainName != null)
            {
                ExTraceGlobals.SharingTracer.TraceDebug <ADRecipient, string>((long)this.GetHashCode(), "{0}: found AcceptedDomain for {1}'s domain, this is NOT valid external recipient.", mailboxOwner, recipient);
                return(false);
            }
            ExTraceGlobals.SharingTracer.TraceDebug <ADRecipient, string>((long)this.GetHashCode(), "{0}: found no AcceptedDomain for {1}'1 domain, this is a valid external recipient.", mailboxOwner, recipient);
            return(true);
        }
Ejemplo n.º 2
0
        private SharedFolderData GetMatchingSharedFolderData(SharingContext context, ADRecipient mailboxOwner)
        {
            SharedFolderDataEncryption sharedFolderDataEncryption = new SharedFolderDataEncryption(ExternalAuthentication.GetCurrent());
            bool flag = false;

            ExTraceGlobals.SharingTracer.TraceDebug <ADRecipient>((long)this.GetHashCode(), "{0}: Decrypting the encrypted shared folder data.", mailboxOwner);
            foreach (EncryptedSharedFolderData encryptedSharedFolderData in context.EncryptedSharedFolderDataCollection)
            {
                SharedFolderData sharedFolderData = sharedFolderDataEncryption.TryDecrypt(encryptedSharedFolderData);
                if (sharedFolderData != null)
                {
                    if (SharingProviderHandlerExternal.TryFindMatchingRecipient(sharedFolderData, mailboxOwner) != null)
                    {
                        ExTraceGlobals.SharingTracer.TraceDebug <ADRecipient>((long)this.GetHashCode(), "{0}: Get the decrypted shared folder data.", mailboxOwner);
                        return(sharedFolderData);
                    }
                    flag = true;
                }
            }
            ExTraceGlobals.SharingTracer.TraceError <ADRecipient>((long)this.GetHashCode(), "{0}: Failed to decrypt shared folder data.", mailboxOwner);
            if (flag)
            {
                throw new InvalidExternalSharingSubscriberException();
            }
            throw new InvalidSharingDataException("SharedFolderData", string.Empty);
        }
Ejemplo n.º 3
0
        private SharedFolderDataRecipient GetMatchingRecipient(SharedFolderData sharedFolderData, ADRecipient mailboxOwner)
        {
            SharedFolderDataRecipient sharedFolderDataRecipient = SharingProviderHandlerExternal.TryFindMatchingRecipient(sharedFolderData, mailboxOwner);

            if (sharedFolderDataRecipient != null)
            {
                return(sharedFolderDataRecipient);
            }
            ExTraceGlobals.SharingTracer.TraceError <ADRecipient>((long)this.GetHashCode(), "{0}: The sharing message is not intended to this subscriber.", mailboxOwner);
            throw new InvalidExternalSharingSubscriberException();
        }
Ejemplo n.º 4
0
        private static bool IsOrganizationHasOrganizationRelationshipWithRecipient(OrganizationId organizationId, ADRecipient recipient)
        {
            if (!(recipient.ExternalEmailAddress != null))
            {
                foreach (ProxyAddress proxyAddress in recipient.EmailAddresses)
                {
                    SmtpProxyAddress smtpProxyAddress = proxyAddress as SmtpProxyAddress;
                    if (smtpProxyAddress != null && SharingProviderHandlerExternal.IsOrganizationHasOrganizationRelationshipWithDomain(organizationId, new SmtpAddress(smtpProxyAddress.SmtpAddress).Domain))
                    {
                        return(true);
                    }
                }
                return(false);
            }
            SmtpProxyAddress smtpProxyAddress2 = recipient.ExternalEmailAddress as SmtpProxyAddress;

            if (smtpProxyAddress2 != null && SharingProviderHandlerExternal.IsOrganizationHasOrganizationRelationshipWithDomain(organizationId, new SmtpAddress(smtpProxyAddress2.SmtpAddress).Domain))
            {
                return(true);
            }
            return(false);
        }