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); }
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); }
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(); }
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); }