Esempio n. 1
0
 internal IList <RecipientData> Query(string recipientSmtpAddress, ADObjectId recipientAdObjectId)
 {
     if (!string.IsNullOrEmpty(recipientSmtpAddress) && SmtpAddress.IsValidSmtpAddress(recipientSmtpAddress))
     {
         RecipientQueryResults recipientQueryResults = base.Query(new EmailAddress[]
         {
             new EmailAddress(string.Empty, recipientSmtpAddress)
         });
         if (recipientQueryResults != null && recipientQueryResults.Count > 0 && recipientQueryResults[0].Exception == null && recipientQueryResults[0].ProviderError == null)
         {
             return(recipientQueryResults);
         }
     }
     if (recipientAdObjectId != null)
     {
         ADRecipient adrecipient = base.ADRecipientSession.Read(recipientAdObjectId);
         if (adrecipient != null)
         {
             EmailAddress emailAddress = RecipientQuery.CreateEmailAddressFromADRecipient(adrecipient);
             return(new RecipientData[]
             {
                 RecipientData.Create(emailAddress, adrecipient, UserPhotoRecipientQuery.RecipientProperties)
             });
         }
     }
     this.tracer.TraceDebug <string, ADObjectId>((long)this.GetHashCode(), "Target user not found in directory.  Search params were SMTP-address='{0}' OR ADObjectId='{1}'", recipientSmtpAddress, recipientAdObjectId);
     return(Array <RecipientData> .Empty);
 }
Esempio n. 2
0
 private IEnumerable <RecipientData> ProcessResults(EmailAddress[] emailAddressArray, int startIndex, int size, Result <ADRawEntry>[] resultsArray, List <int> indexList)
 {
     for (int index = 0; index < size; index++)
     {
         int resultIndex = indexList.IndexOf(index);
         if (-1 == resultIndex)
         {
             EmailAddress invalidAddress = emailAddressArray[startIndex + index];
             yield return(RecipientData.Create(emailAddressArray[startIndex + index], new InvalidSmtpAddressException(Strings.descInvalidSmtpAddress((invalidAddress == null) ? "null" : invalidAddress.ToString()))));
         }
         else
         {
             Result <ADRawEntry> result = resultsArray[resultIndex];
             if (result.Error == null)
             {
                 yield return(RecipientData.Create(emailAddressArray[startIndex + index], result.Data, this.propertyDefinitionArray));
             }
             else
             {
                 yield return(RecipientData.Create(emailAddressArray[startIndex + index], result.Error));
             }
         }
     }
     yield break;
 }
Esempio n. 3
0
 public AutoDiscoverQueryItem(RecipientData recipientData, LocalizedString applicationName, BaseQuery sourceQuery)
 {
     this.EmailAddress        = recipientData.EmailAddress;
     this.initialEmailAddress = recipientData.EmailAddress;
     this.recipientData       = recipientData;
     this.applicationName     = applicationName;
     this.sourceQuery         = sourceQuery;
 }
Esempio n. 4
0
        internal List <RecipientData> ExpandDistributionGroup(RecipientData recipientData, DateTime queryPrepareDeadline, out bool groupCapped)
        {
            List <RecipientData> list = new List <RecipientData>(Configuration.MaximumGroupMemberCount);

            groupCapped = false;
            int num = 0;
            Queue <RecipientData> queue   = new Queue <RecipientData>(Configuration.MaximumGroupMemberCount);
            HashSet <Guid>        hashSet = new HashSet <Guid>(Configuration.MaximumGroupMemberCount);

            queue.Enqueue(recipientData);
            hashSet.Add(recipientData.Guid);
            while (queue.Count > 0 && !groupCapped)
            {
                RecipientData recipientData2 = queue.Dequeue();
                QueryFilter   filter         = new ComparisonFilter(ComparisonOperator.Equal, ADRecipientSchema.MemberOfGroup, recipientData2.Id);
                ADPagedReader <ADRecipient> adpagedReader = base.ADRecipientSession.FindPaged(null, QueryScope.SubTree, filter, null, Configuration.MaximumGroupMemberCount);
                ExTraceGlobals.DistributionListHandlingTracer.TraceDebug <object, SmtpAddress, int>((long)this.GetHashCode(), "{0}: Expanding group {1}, which has {2} members.", TraceContext.Get(), recipientData.PrimarySmtpAddress, recipientData.DistributionGroupMembersCount);
                foreach (ADRecipient adrecipient in adpagedReader)
                {
                    if (DateTime.UtcNow > queryPrepareDeadline)
                    {
                        groupCapped = true;
                        break;
                    }
                    if (!hashSet.Contains(adrecipient.Guid))
                    {
                        hashSet.Add(adrecipient.Guid);
                        if (adrecipient is ADUser || adrecipient is ADContact)
                        {
                            if (list.Count >= Configuration.MaximumGroupMemberCount)
                            {
                                groupCapped = true;
                                break;
                            }
                            EmailAddress emailAddress = RecipientQuery.CreateEmailAddressFromADRecipient(adrecipient);
                            list.Add(RecipientData.Create(emailAddress, adrecipient, base.PropertyDefinitionArray));
                        }
                        else if (adrecipient is ADGroup)
                        {
                            EmailAddress emailAddress2      = RecipientQuery.CreateEmailAddressFromADRecipient(adrecipient);
                            ADGroup      configurableObject = (ADGroup)adrecipient;
                            queue.Enqueue(RecipientData.Create(emailAddress2, configurableObject, base.PropertyDefinitionArray));
                        }
                        else
                        {
                            ExTraceGlobals.DistributionListHandlingTracer.TraceDebug <object, ADRecipient>((long)this.GetHashCode(), "{0}: Group member {1} is not a ADUser, ADContact or ADGroup. This member is not being processed.", TraceContext.Get(), adrecipient);
                        }
                    }
                    else
                    {
                        ExTraceGlobals.DistributionListHandlingTracer.TraceDebug <object, ADRecipient>((long)this.GetHashCode(), "{0}: Group member {1} has been found to be a duplicate and not being processed.", TraceContext.Get(), adrecipient);
                        num++;
                    }
                }
            }
            return(list);
        }
Esempio n. 5
0
        internal static RecipientData Create(EmailAddress emailAddress, ConfigurableObject configurableObject, ICollection <PropertyDefinition> propertyDefinitionCollection)
        {
            if (Testability.HandleSmtpAddressAsContact(emailAddress.Address))
            {
                return(RecipientData.CreateAsContact(emailAddress));
            }
            RecipientData recipientData = new RecipientData(emailAddress);

            recipientData.ParseConfigurableObject(configurableObject, propertyDefinitionCollection);
            return(recipientData);
        }
Esempio n. 6
0
 internal static RecipientData Create(EmailAddress emailAddress, Dictionary <PropertyDefinition, object> propertyMap)
 {
     if (Testability.HandleSmtpAddressAsContact(emailAddress.Address))
     {
         return(RecipientData.CreateAsContact(emailAddress));
     }
     return(new RecipientData(emailAddress)
     {
         propertyMap = propertyMap
     });
 }
Esempio n. 7
0
        internal static RecipientData CreateAsContact(EmailAddress emailAddress)
        {
            RecipientData    recipientData = new RecipientData(emailAddress);
            SmtpProxyAddress value         = new SmtpProxyAddress(emailAddress.Address, true);

            recipientData.propertyMap = new Dictionary <PropertyDefinition, object>();
            recipientData.propertyMap[ADRecipientSchema.RecipientType]        = RecipientType.MailUser;
            recipientData.propertyMap[ADRecipientSchema.ExternalEmailAddress] = value;
            SmtpAddress smtpAddress = new SmtpAddress(emailAddress.Address);

            recipientData.propertyMap[ADRecipientSchema.PrimarySmtpAddress] = smtpAddress;
            return(recipientData);
        }
        internal RestrictionCheckResult CheckDeliveryRestriction(RecipientData senderData, RecipientData recipientData)
        {
            RestrictionCheckResult checkResult       = RestrictionCheckResult.AcceptedNoPermissionList;
            ADOperationResult      adoperationResult = ADNotificationAdapter.TryRunADOperation(delegate()
            {
                checkResult = ADRecipientRestriction.CheckDeliveryRestriction(senderData.IsEmpty ? null : senderData.Id, true, recipientData.RejectMessagesFrom, recipientData.RejectMessagesFromDLMembers, recipientData.AcceptMessagesOnlyFrom, recipientData.AcceptMessagesOnlyFromDLMembers, recipientData.BypassModerationFrom, recipientData.BypassModerationFromDLMembers, recipientData.ModeratedBy, recipientData.ManagedBy, true, recipientData.ModerationEnabled, recipientData.RecipientType, this.ADRecipientSession, null, 150);
            });

            if (!adoperationResult.Succeeded)
            {
                recipientData.Exception = adoperationResult.Exception;
            }
            return(checkResult);
        }
Esempio n. 9
0
        private AutoDiscoverResult GetResult(RecipientData recipientData, WebServiceUri webServiceUri)
        {
            if (!base.Application.IsVersionSupported(webServiceUri.ServerVersion))
            {
                AutoDiscoverQuery.AutoDiscoverTracer.TraceError <object, int, Type>((long)this.GetHashCode(), "{0}: Remote server version {1} is considered a legacy server by {2} application.", TraceContext.Get(), webServiceUri.ServerVersion, base.Application.GetType());
                return(new AutoDiscoverResult(base.Application.CreateExceptionForUnsupportedVersion(recipientData, webServiceUri.ServerVersion)));
            }
            AutoDiscoverQuery.AutoDiscoverTracer.TraceDebug <object, Uri, EmailAddress>((long)this.GetHashCode(), "{0}: Found availability service {1} that can fill request for mailbox {2}", TraceContext.Get(), webServiceUri.Uri, (recipientData != null) ? recipientData.EmailAddress : null);
            SerializedSecurityContext serializedSecurityContext = null;
            InternalClientContext     internalClientContext     = base.ClientContext as InternalClientContext;

            if (this.targetForestConfiguration.IsPerUserAuthorizationSupported && internalClientContext != null)
            {
                serializedSecurityContext = internalClientContext.SerializedSecurityContext;
            }
            ProxyAuthenticator proxyAuthenticatorForAutoDiscover = this.targetForestConfiguration.GetProxyAuthenticatorForAutoDiscover(webServiceUri.Uri, serializedSecurityContext, base.ClientContext.MessageId);

            return(new AutoDiscoverResult(webServiceUri, proxyAuthenticatorForAutoDiscover));
        }
        public override BaseQuery CreateFromGroup(RecipientData recipientData, BaseQuery[] groupMembers, bool groupCapped)
        {
            bool flag  = (this.queryType & QueryType.FreeBusy) != (QueryType)0;
            bool flag2 = (this.queryType & QueryType.MeetingSuggestions) != (QueryType)0 && !groupCapped;

            FreeBusyQuery[] groupMembersForFreeBusy    = null;
            FreeBusyQuery[] groupMembersForSuggestions = null;
            if (flag)
            {
                if (groupCapped)
                {
                    Application.ProxyWebRequestTracer.TraceDebug <object, RecipientData>((long)this.GetHashCode(), "{0}:Not generating requests for members of group {1} because the group is larger than the allowed group size.", TraceContext.Get(), recipientData);
                    return(FreeBusyQuery.CreateFromGroup(recipientData, new FreeBusyDLLimitReachedException(Configuration.MaximumGroupMemberCount)));
                }
                groupMembersForFreeBusy = FreeBusyApplication.ConvertBaseToFreeBusyQuery(groupMembers);
            }
            if (flag2)
            {
                groupMembersForSuggestions = FreeBusyApplication.ConvertBaseToFreeBusyQuery(groupMembers);
            }
            return(FreeBusyQuery.CreateFromGroup(recipientData, groupMembersForFreeBusy, groupMembersForSuggestions));
        }
Esempio n. 11
0
        private IEnumerable <RecipientData> HandleErrorFromRecipientLookup(Exception e, EmailAddress[] emailAddressArray, int start, int length, uint locationIdentifier)
        {
            LocalizedException exception;

            if (e is LocalizedException)
            {
                exception = (LocalizedException)e;
                ErrorHandler.SetErrorCodeIfNecessary(exception, ErrorConstants.FreeBusyGenerationFailed);
            }
            else if (e is ADTimelimitExceededException)
            {
                exception = new TimeoutExpiredException("LookupRecipients:ADTimeLimit");
            }
            else
            {
                exception = new MailRecipientNotFoundException(e, locationIdentifier);
            }
            ExTraceGlobals.RequestRoutingTracer.TraceError <object, LocalizedException>((long)this.GetHashCode(), "{0}: Failed to lookup recipients in AD. Exception {1}", TraceContext.Get(), exception);
            for (int i = 0; i < length; i++)
            {
                yield return(RecipientData.Create(emailAddressArray[start + i], exception));
            }
            yield break;
        }
Esempio n. 12
0
 public abstract AvailabilityException CreateExceptionForUnsupportedVersion(RecipientData recipient, int serverVersion);
Esempio n. 13
0
 public override BaseQuery CreateFromGroup(RecipientData recipientData, BaseQuery[] groupMembers, bool groupCapped)
 {
     throw new NotImplementedException();
 }
Esempio n. 14
0
 public override BaseQuery CreateFromIndividual(RecipientData recipientData, LocalizedException exception)
 {
     throw new NotImplementedException();
 }
Esempio n. 15
0
 public override AvailabilityException CreateExceptionForUnsupportedVersion(RecipientData recipient, int serverVersion)
 {
     throw new NotImplementedException();
 }
Esempio n. 16
0
 public abstract BaseQuery CreateFromGroup(RecipientData recipientData, BaseQuery[] groupMembers, bool groupCapped);
Esempio n. 17
0
 private FreeBusyQuery(RecipientData recipientData, AttendeeKind attendeeKind, FreeBusyQuery[] groupMembersForFreeBusy, FreeBusyQuery[] groupMembersForSuggestions) : base(recipientData, null)
 {
     this.attendeeKind               = attendeeKind;
     this.groupMembersForFreeBusy    = groupMembersForFreeBusy;
     this.groupMembersForSuggestions = groupMembersForSuggestions;
 }
 public override BaseQuery CreateFromIndividual(RecipientData recipientData)
 {
     return(FreeBusyQuery.CreateFromIndividual(recipientData));
 }
Esempio n. 19
0
 public static FreeBusyQuery CreateFromGroup(RecipientData recipientData, FreeBusyQuery[] groupMembersForFreeBusy, FreeBusyQuery[] groupMembersForSuggestions)
 {
     return(new FreeBusyQuery(recipientData, AttendeeKind.Group, groupMembersForFreeBusy, groupMembersForSuggestions));
 }
Esempio n. 20
0
 public static FreeBusyQuery CreateFromGroup(RecipientData recipientData, LocalizedException exception)
 {
     return(new FreeBusyQuery(recipientData, AttendeeKind.Group, new FreeBusyQueryResult(exception)));
 }
Esempio n. 21
0
 public abstract BaseQuery CreateFromIndividual(RecipientData recipientData);
 public override AvailabilityException CreateExceptionForUnsupportedVersion(RecipientData recipient, int serverVersion)
 {
     return(new E14orHigherProxyServerNotFound((recipient != null) ? recipient.EmailAddress : null, Globals.E14Version));
 }
 public override BaseQuery CreateFromIndividual(RecipientData recipientData, LocalizedException exception)
 {
     return(FreeBusyQuery.CreateFromIndividual(recipientData, exception));
 }
Esempio n. 24
0
 public abstract BaseQuery CreateFromIndividual(RecipientData recipientData, LocalizedException exception);
Esempio n. 25
0
 private FreeBusyQuery(RecipientData recipientData, AttendeeKind attendeeKind, FreeBusyQueryResult result) : base(recipientData, result)
 {
     this.attendeeKind = attendeeKind;
 }
Esempio n. 26
0
 protected BaseQuery(RecipientData recipientData, BaseQueryResult result)
 {
     this.recipientData = recipientData;
     this.result        = result;
     this.logData       = new Dictionary <string, string>();
 }
Esempio n. 27
0
 public static FreeBusyQuery CreateFromIndividual(RecipientData recipientData)
 {
     return(new FreeBusyQuery(recipientData, AttendeeKind.Individual, null));
 }
Esempio n. 28
0
 public abstract BaseQuery CreateFromUnknown(RecipientData recipientData, LocalizedException exception);