示例#1
0
        public async Task Handle(DkimPollPending message)
        {
            try
            {
                List <DkimSelectorRecords> dkimSelectorRecords =
                    await _dnsClient.FetchDkimRecords(message.Id, message.Selectors);

                if (!_config.AllowNullResults && dkimSelectorRecords.TrueForAll(x =>
                                                                                x.Records.Count == 0 || x.Records.TrueForAll(y => string.IsNullOrWhiteSpace(y.Record))))
                {
                    throw new Exception($"Unable to retrieve DKIM records for {message.Id}, selectors: {JsonConvert.SerializeObject(message)}");
                }

                DkimRecordsPolled dkimRecordsPolled = new DkimRecordsPolled(message.Id, dkimSelectorRecords);

                _log.LogInformation("Polled DKIM selectors for {Domain}", message.Id);

                _dispatcher.Dispatch(dkimRecordsPolled, _config.SnsTopicArn);

                _log.LogInformation("Published DKIM records for {Domain}", message.Id);
            }
            catch (Exception e)
            {
                string error = $"Error occurred polling domain {message.Id}";
                _log.LogError(e, error);
                throw;
            }
        }
示例#2
0
        public void NotifiesWhenSelectorChanges()
        {
            Dictionary <string, List <string> > selectorsAndRecords1 = new Dictionary <string, List <string> >
            {
                { "selector1", new List <string> {
                      "record1"
                  } }
            };

            Dictionary <string, List <string> > selectorsAndRecords2 = new Dictionary <string, List <string> >
            {
                { "selector2", new List <string> {
                      "record1"
                  } }
            };

            DkimEntityState   state   = CreateDkimEntityState(selectorsAndRecords1);
            DkimRecordsPolled message = CreateDkimRecordsPolled(selectorsAndRecords2);

            _recordChangedNotifier.Handle(state, message);

            A.CallTo(() => _messageDispatcher.Dispatch(A <DkimRecordAdded> ._, A <string> ._)).MustHaveHappenedOnceExactly();
            A.CallTo(() => _messageDispatcher.Dispatch(A <DkimRecordRemoved> ._, A <string> ._)).MustHaveHappenedOnceExactly();

            A.CallTo(() =>
                     _messageDispatcher.Dispatch(
                         A <DkimRecordAdded> .That.Matches(x =>
                                                           x.SelectorRecords[0].Selector == "selector2" && x.SelectorRecords[0].Records[0] == "record1"), A <string> ._)).MustHaveHappenedOnceExactly();

            A.CallTo(() =>
                     _messageDispatcher.Dispatch(
                         A <DkimRecordRemoved> .That.Matches(x =>
                                                             x.SelectorRecords[0].Selector == "selector1" && x.SelectorRecords[0].Records[0] == "record1"), A <string> ._)).MustHaveHappenedOnceExactly();
        }
示例#3
0
        public void DoesNotNotifyWhenNewSelectorHasNoRecord()
        {
            Dictionary <string, List <string> > selectorsAndRecords1 = new Dictionary <string, List <string> >
            {
                { "selector1", new List <string> {
                      "record"
                  } }
            };

            DkimEntityState   state   = CreateDkimEntityState(selectorsAndRecords1);
            DkimRecordsPolled message = new DkimRecordsPolled("", new List <DkimSelectorRecords>
            {
                new DkimSelectorRecords(Guid.NewGuid(), "selector1", new List <DkimTxtRecord>()
                {
                    new DkimTxtRecord(new List <string> {
                        "record"
                    })
                }, null, 0),
                new DkimSelectorRecords(Guid.NewGuid(), "rogueSelector", null, null, 0)
            });

            _recordChangedNotifier.Handle(state, message);

            A.CallTo(() => _messageDispatcher.Dispatch(A <Common.Messaging.Abstractions.Message> .Ignored, A <string> .Ignored)).MustNotHaveHappened();
        }
示例#4
0
        private DkimRecordsPolled CreateDkimRecordsPolled(Dictionary <string, List <string> > selectorsAndRecords)
        {
            List <DkimSelectorRecords> dkimSelectorRecords = new List <DkimSelectorRecords>();

            foreach (KeyValuePair <string, List <string> > kvp in selectorsAndRecords)
            {
                List <DkimTxtRecord> dkimTxtRecords = kvp.Value.Select(record => new DkimTxtRecord(record.Split(" ").ToList())).ToList();
                dkimSelectorRecords.Add(new DkimSelectorRecords(Guid.NewGuid(), kvp.Key, dkimTxtRecords, null, 0));
            }

            _fixture.Register(() => dkimSelectorRecords);
            DkimRecordsPolled dkimRecordsPolled = _fixture.Create <DkimRecordsPolled>();

            return(dkimRecordsPolled);
        }
示例#5
0
        public void DoesNotNotifyWhenNoChanges()
        {
            Dictionary <string, List <string> > selectorsAndRecords1 = new Dictionary <string, List <string> >
            {
                { "selector1", new List <string> {
                      "record"
                  } }
            };
            Dictionary <string, List <string> > selectorsAndRecords2 = new Dictionary <string, List <string> >
            {
                { "selector1", new List <string> {
                      "record"
                  } }
            };

            DkimEntityState   state   = CreateDkimEntityState(selectorsAndRecords1);
            DkimRecordsPolled message = CreateDkimRecordsPolled(selectorsAndRecords2);

            _recordChangedNotifier.Handle(state, message);

            A.CallTo(() => _messageDispatcher.Dispatch(A <Common.Messaging.Abstractions.Message> .Ignored, A <string> .Ignored)).MustNotHaveHappened();
        }
示例#6
0
 public static List <DkimSelector> ToDkimRecords(this DkimRecordsPolled records)
 {
     return(records.DkimSelectorRecords.Select(_ => _.ToDkimSelector()).ToList());
 }