Esempio n. 1
0
            public FactsBase(int maximumValidationFailures = 5)
            {
                _certificateStore             = new Mock <ICertificateStore>();
                _certificateValidationService = new Mock <ICertificateValidationService>();
                _certificateVerifier          = new Mock <ICertificateVerifier>();
                _validationEnqueuer           = new Mock <IPackageValidationEnqueuer>();
                _featureFlagService           = new Mock <IFeatureFlagService>();

                _featureFlagService.SetReturnsDefault(true);

                _message = new CertificateValidationMessage(
                    CertificateKey,
                    ValidationId,
                    revalidateRevokedCertificate: false,
                    sendCheckValidator: true);

                var logger = new Mock <ILogger <CertificateValidationMessageHandler> >();

                _target = new CertificateValidationMessageHandler(
                    _certificateStore.Object,
                    _certificateValidationService.Object,
                    _certificateVerifier.Object,
                    _validationEnqueuer.Object,
                    _featureFlagService.Object,
                    logger.Object,
                    maximumValidationFailures);
            }
        public async Task EnqueueVerificationAsync(IValidationRequest request, EndCertificate certificate)
        {
            var message         = new CertificateValidationMessage(certificate.Key, request.ValidationId);
            var brokeredMessage = _serializer.Serialize(message);

            await _topicClient.SendAsync(brokeredMessage);
        }
Esempio n. 3
0
 public Task <EndCertificateValidation> FindCertificateValidationAsync(CertificateValidationMessage message)
 {
     // Fetch the validation, the end certificate that this validation is for, and all of the parent
     // certificates that the end certificate depends on.
     return(_context
            .CertificateValidations
            .Where(v => v.ValidationId == message.ValidationId && v.EndCertificateKey == message.CertificateKey)
            .Include(v => v.EndCertificate.CertificateChainLinks.Select(l => l.ParentCertificate))
            .FirstOrDefaultAsync());
 }
        public async Task EnqueueVerificationAsync(IValidationRequest request, EndCertificate certificate)
        {
            var message         = new CertificateValidationMessage(certificate.Key, request.ValidationId);
            var brokeredMessage = _serializer.Serialize(message);

            var visibleAt = DateTimeOffset.UtcNow + (_configuration.Value.MessageDelay ?? TimeSpan.Zero);

            brokeredMessage.ScheduledEnqueueTimeUtc = visibleAt;

            await _topicClient.SendAsync(brokeredMessage);
        }
        public async Task EnqueueValidationAsync(Guid validationId, EndCertificate certificate)
        {
            var message = new CertificateValidationMessage(
                certificate.Key,
                validationId,
                revalidateRevokedCertificate: false,
                sendCheckValidator: false);

            var brokeredMessage = _serializer.Serialize(message);

            await _topicClient.SendAsync(brokeredMessage);
        }
Esempio n. 6
0
            public async Task DoesNotSendCheckValidatorIfFeatureFlagIsDisabled()
            {
                // Arrange
                var result = new CertificateVerificationResult(
                    status: EndCertificateStatus.Good,
                    statusFlags: X509ChainStatusFlags.NoError);

                _message = new CertificateValidationMessage(
                    CertificateKey,
                    ValidationId,
                    revalidateRevokedCertificate: false,
                    sendCheckValidator: true);
                _certificateValidationService
                .Setup(s => s.FindCertificateValidationAsync(It.IsAny <CertificateValidationMessage>()))
                .ReturnsAsync(new EndCertificateValidation
                {
                    Status         = null,
                    EndCertificate = new EndCertificate
                    {
                        Status = EndCertificateStatus.Unknown,
                        Use    = EndCertificateUse.CodeSigning,
                        CertificateChainLinks = new CertificateChainLink[0],
                    }
                });
                _featureFlagService.Setup(x => x.IsQueueBackEnabled()).Returns(false);

                _certificateStore
                .Setup(s => s.LoadAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()))
                .ReturnsAsync(new X509Certificate2());

                _certificateVerifier
                .Setup(v => v.VerifyCodeSigningCertificate(It.IsAny <X509Certificate2>(), It.IsAny <X509Certificate2[]>()))
                .Returns(result);

                _certificateValidationService
                .Setup(s => s.TrySaveResultAsync(It.IsAny <EndCertificateValidation>(), It.IsAny <CertificateVerificationResult>()))
                .ReturnsAsync(true);

                // Act & Assert
                Assert.True(await _target.HandleAsync(_message));

                _certificateValidationService
                .Verify(s => s.TrySaveResultAsync(It.IsAny <EndCertificateValidation>(), It.IsAny <CertificateVerificationResult>()), Times.Once);
                _validationEnqueuer.Verify(
                    x => x.SendMessageAsync(It.IsAny <PackageValidationMessageData>()),
                    Times.Never);
            }
            public FactsBase(int maximumValidationFailures = 5)
            {
                _certificateStore             = new Mock <ICertificateStore>();
                _certificateValidationService = new Mock <ICertificateValidationService>();
                _certificateVerifier          = new Mock <ICertificateVerifier>();

                _message = new CertificateValidationMessage(CertificateKey, ValidationId, revalidateRevokedCertificate: false);

                var logger = new Mock <ILogger <CertificateValidationMessageHandler> >();

                _target = new CertificateValidationMessageHandler(
                    _certificateStore.Object,
                    _certificateValidationService.Object,
                    _certificateVerifier.Object,
                    logger.Object,
                    maximumValidationFailures);
            }
        public async Task SendsSerializeMessage()
        {
            CertificateValidationMessage message = null;

            _serializer
            .Setup(x => x.Serialize(It.IsAny <CertificateValidationMessage>()))
            .Returns(() => _brokeredMessage.Object)
            .Callback <CertificateValidationMessage>(x => message = x);

            await _target.EnqueueVerificationAsync(_validationRequest.Object, _endCertificate);

            Assert.Equal(_validationRequest.Object.ValidationId, message.ValidationId);
            Assert.Equal(_endCertificate.Key, message.CertificateKey);
            Assert.False(message.RevalidateRevokedCertificate);
            _serializer.Verify(
                x => x.Serialize(It.IsAny <CertificateValidationMessage>()),
                Times.Once);
            _topicClient.Verify(x => x.SendAsync(_brokeredMessage.Object), Times.Once);
            _topicClient.Verify(x => x.SendAsync(It.IsAny <IBrokeredMessage>()), Times.Once);
        }
Esempio n. 9
0
            public async Task ReturnsNullIfCertificateValidationDoesntExist()
            {
                // Arrange
                _context.Mock(
                    certificateValidations: new[]
                {
                    _certificateValidation1,
                    _certificateValidation2,
                }
                    );

                var message = new CertificateValidationMessage(
                    certificateKey: EndCertificateKey1,
                    validationId: ValidationId2);

                // Act & Assert
                var result = await _target.FindCertificateValidationAsync(message);

                Assert.Null(result);
            }
Esempio n. 10
0
            public async Task ReturnsCertificateValidationIfExists()
            {
                // Arrange
                _context.Mock(
                    certificateValidations: new[]
                {
                    _certificateValidation1,
                    _certificateValidation2,
                }
                    );

                var message = new CertificateValidationMessage(
                    certificateKey: EndCertificateKey2,
                    validationId: ValidationId2);

                // Act & Assert
                var result = await _target.FindCertificateValidationAsync(message);

                Assert.NotNull(result);
                Assert.Equal(EndCertificateKey2, result.EndCertificateKey);
                Assert.Equal(ValidationId2, result.ValidationId);
            }