public void Should_set_client_certificate_as_authentication_identity_as_false_by_default()
        {
            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator => { });

            configurator.Settings.UseClientCertificateAsAuthenticationIdentity.ShouldBeFalse();
        }
        public void Should_set_client_certificate_as_authentication_identity_as_false_by_default()
        {
            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator => { });

            configurator.Settings.UseClientCertificateAsAuthenticationIdentity.ShouldBeFalse();
        }
        public void Should_set_tls10_protocol_by_default()
        {
            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator => { });

            configurator.Settings.SslProtocol.ShouldBe(SslProtocols.Tls);
        }
        public void Should_set_tls10_protocol_by_default()
        {
            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator => { });

            configurator.Settings.SslProtocol.ShouldBe(SslProtocols.Tls);
        }
        public void Should_allow_remote_certificate_chain_error_by_default()
        {
            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator => { });

            configurator.Settings.AcceptablePolicyErrors.ShouldHaveFlag(SslPolicyErrors.RemoteCertificateChainErrors);
        }
        /// <summary>
        /// Configure the RabbitMQ host
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="hostAddress">The URI host address of the RabbitMQ host (rabbitmq://host:port/vhost)</param>
        /// <param name="connectionName">The client-provided connection name</param>
        /// <param name="configure"></param>
        public static void Host(this IRabbitMqBusFactoryConfigurator configurator, Uri hostAddress, string connectionName,
                                Action <IRabbitMqHostConfigurator> configure = null)
        {
            var hostConfigurator = new RabbitMqHostConfigurator(hostAddress, connectionName);

            configure?.Invoke(hostConfigurator);

            configurator.Host(hostConfigurator.Settings);
        }
        /// <summary>
        ///     Configure a RabbitMQ host using the configuration API
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="hostAddress">The URI host address of the RabbitMQ host (rabbitmq://host:port/vhost)</param>
        /// <param name="connectionName">The client-provided connection name</param>
        /// <param name="configure"></param>
        public static IRabbitMqHost Host(this IRabbitMqBusFactoryConfigurator configurator, Uri hostAddress,
                                         string connectionName, Action <IRabbitMqHostConfigurator> configure)
        {
            var hostConfigurator = new RabbitMqHostConfigurator(hostAddress, connectionName);

            configure(hostConfigurator);

            return(configurator.Host(hostConfigurator.Settings));
        }
        /// <summary>
        ///     Configure a RabbitMQ host using the configuration API
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="hostAddress">The URI host address of the RabbitMQ host (rabbitmq://host:port/vhost)</param>
        /// <param name="configure"></param>
        public static IRabbitMqHost Host(this IRabbitMqBusFactoryConfigurator configurator, Uri hostAddress,
            Action<IRabbitMqHostConfigurator> configure)
        {
            var hostConfigurator = new RabbitMqHostConfigurator(hostAddress);

            configure(hostConfigurator);

            return configurator.Host(hostConfigurator.Settings);
        }
Example #9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RabbitMqHostBuilder"/> class.
        /// </summary>
        /// <param name="services"><see cref="IServiceCollection"/></param>
        /// <param name="hostAddress">The URI host address of the RabbitMQ host (example: rabbitmq://host:port/vhost).</param>
        /// <param name="connectionName">The client-provided connection name.</param>
        public RabbitMqHostBuilder(IServiceCollection services, Uri hostAddress, string connectionName)
            : base(services, connectionName)
        {
            if (hostAddress == null)
            {
                throw new ArgumentNullException(nameof(hostAddress));
            }

            _hostConfigurator = new RabbitMqHostConfigurator(hostAddress, connectionName);
        }
        public void Should_set_client_certificate_as_authentication_identity_when_configured(bool valueToSet)
        {
            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator =>
            {
                sslConfigurator.UseCertificateAsAuthenticationIdentity = valueToSet;
            });

            configurator.Settings.UseClientCertificateAsAuthenticationIdentity.ShouldBe(valueToSet);
        }
        public void Should_set_assigned_ssl_protocol()
        {
            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator =>
            {
                sslConfigurator.Protocol = SslProtocols.Tls12;
            });

            configurator.Settings.SslProtocol.ShouldBe(SslProtocols.Tls12);
        }
        public void Should_set_assigned_ssl_protocol()
        {
            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator =>
            {
                sslConfigurator.Protocol = SslProtocols.Tls12;
            });

            configurator.Settings.SslProtocol.ShouldBe(SslProtocols.Tls12);
        }
        public void Should_enforce_remote_certificate_chain_error_when_set()
        {
            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator =>
            {
                sslConfigurator.EnforcePolicyErrors(SslPolicyErrors.RemoteCertificateChainErrors);
            });

            configurator.Settings.AcceptablePolicyErrors.ShouldNotHaveFlag(SslPolicyErrors.RemoteCertificateChainErrors);
        }
        public void Should_set_client_certificate_as_authentication_identity_when_configured(bool valueToSet)
        {
            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator =>
            {
                sslConfigurator.UseCertificateAsAuthenticationIdentity = valueToSet;
            });

            configurator.Settings.UseClientCertificateAsAuthenticationIdentity.ShouldBe(valueToSet);
        }
        /// <summary>
        /// Configure a RabbitMQ host with a host name and virtual host
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="virtualHost">The virtual host to use</param>
        /// <param name="configure">The configuratino callback</param>
        /// <param name="host">The host name of the broker</param>
        public static IRabbitMqHost Host(this IRabbitMqBusFactoryConfigurator configurator, string host, string virtualHost,
            Action<IRabbitMqHostConfigurator> configure)
        {
            if (host == null)
                throw new ArgumentNullException(nameof(host));
            if (virtualHost == null)
                throw new ArgumentNullException(nameof(virtualHost));

            var hostConfigurator = new RabbitMqHostConfigurator(host, virtualHost);

            configure(hostConfigurator);

            return configurator.Host(hostConfigurator.Settings);
        }
Example #16
0
        /// <summary>
        /// Initializes a new instance of the <see cref="RabbitMqHostBuilder"/> class.
        /// </summary>
        /// <param name="services"><see cref="IServiceCollection"/></param>
        /// <param name="host">The host name of the RabbitMq broker.</param>
        /// <param name="port">The port to connect to on the RabbitMq broker.</param>
        /// <param name="virtualHost">The virtual host to use.</param>
        /// <param name="connectionName">The client-provided connection name.</param>
        public RabbitMqHostBuilder(IServiceCollection services, string host, ushort port, string virtualHost, string connectionName)
            : base(services, connectionName)
        {
            if (host == null)
            {
                throw new ArgumentNullException(nameof(host));
            }
            if (virtualHost == null)
            {
                throw new ArgumentNullException(nameof(virtualHost));
            }

            _hostConfigurator = new RabbitMqHostConfigurator(host, virtualHost, port, connectionName);
        }
        public void Should_use_custom_client_certificate_selector_when_set()
        {
            LocalCertificateSelectionCallback customSelector =
                (sender, targetHost, localCertificates, remoteCertificate, acceptableIssuers)
                => null;

            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator =>
            {
                sslConfigurator.CertificateSelectionCallback = customSelector;
            });

            configurator.Settings.CertificateSelectionCallback.ShouldBeSameAs(customSelector);
        }
        public void Should_use_custom_remote_certificate_validator_when_set()
        {
            RemoteCertificateValidationCallback customValidator =
                (sender, certificate, chain, sslPolicyErrors)
                => false;

            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost"));

            configurator.UseSsl(sslConfigurator =>
            {
                sslConfigurator.CertificateValidationCallback = customValidator;
            });

            configurator.Settings.CertificateValidationCallback.ShouldBeSameAs(customValidator);
        }
        /// <summary>
        /// Configure the RabbitMQ host
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="host">The host name of the broker</param>
        /// <param name="port">The port to connect to the broker</param>
        /// <param name="virtualHost">The virtual host to use</param>
        /// <param name="connectionName">The client-provided connection name</param>
        /// <param name="configure">The configuration callback</param>
        public static void Host(this IRabbitMqBusFactoryConfigurator configurator, string host, ushort port, string virtualHost,
                                string connectionName, Action <IRabbitMqHostConfigurator> configure = null)
        {
            if (host == null)
            {
                throw new ArgumentNullException(nameof(host));
            }
            if (virtualHost == null)
            {
                throw new ArgumentNullException(nameof(virtualHost));
            }

            var hostConfigurator = new RabbitMqHostConfigurator(host, virtualHost, port, connectionName);

            configure?.Invoke(hostConfigurator);

            configurator.Host(hostConfigurator.Settings);
        }
        /// <summary>
        /// Configure a RabbitMQ host with a host name and virtual host
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="host">The host name of the broker</param>
        /// <param name="virtualHost">The virtual host to use</param>
        /// <param name="connectionName">The client-provided connection name</param>
        /// <param name="configure">The configuration callback</param>
        public static IRabbitMqHost Host(this IRabbitMqBusFactoryConfigurator configurator, string host, string virtualHost,
                                         string connectionName, Action <IRabbitMqHostConfigurator> configure)
        {
            if (host == null)
            {
                throw new ArgumentNullException(nameof(host));
            }
            if (virtualHost == null)
            {
                throw new ArgumentNullException(nameof(virtualHost));
            }

            var hostConfigurator = new RabbitMqHostConfigurator(host, virtualHost, connectionName: connectionName);

            configure(hostConfigurator);

            return(configurator.Host(hostConfigurator.Settings));
        }
        public static RabbitMqHostSettings ToRabbitMqHostSettings(this RabbitMqBusConfiguration configuration)
        {
            var hostConfiguration = new RabbitMqHostConfigurator(configuration.Host, configuration.VirtualHost, (ushort)configuration.Port)
            {
                PublisherConfirmation = true
            };

            if (!string.IsNullOrEmpty(configuration.Username))
            {
                hostConfiguration.Username(configuration.Username);
            }
            if (!string.IsNullOrEmpty(configuration.Password))
            {
                hostConfiguration.Password(configuration.Password);
            }
            if (configuration.UseSsl)
            {
                hostConfiguration.UseSsl((x) => { x.Protocol = System.Security.Authentication.SslProtocols.Tls12; });
            }

            return(hostConfiguration.Settings);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="RabbitMqHostBuilder"/> class.
        /// </summary>
        /// <param name="services"><see cref="IServiceCollection"/></param>
        /// <param name="connectionName">The client-provided connection name.</param>
        /// <param name="configuration">The <see cref="IConfiguration"/> being bound.</param>
        public RabbitMqHostBuilder(IServiceCollection services, string connectionName, IConfiguration configuration)
            : this(services, connectionName)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            services.AddOptions();
            services.Configure <RabbitMqOptions>(ConnectionName, configuration);

            _hostConfiguratorFactory = serviceProvider =>
            {
                var optionsSnapshot = serviceProvider.GetRequiredService <IOptionsSnapshot <RabbitMqOptions> >();
                var options         = optionsSnapshot.Get(ConnectionName);

                var hostConfigurator = new RabbitMqHostConfigurator(options.HostAddress, ConnectionName);

                if (options.Heartbeat.HasValue)
                {
                    hostConfigurator.Heartbeat(options.Heartbeat.Value);
                }

                if (!string.IsNullOrEmpty(options.Username))
                {
                    hostConfigurator.Username(options.Username);
                }

                if (!string.IsNullOrEmpty(options.Password))
                {
                    hostConfigurator.Password(options.Password);
                }

                return(hostConfigurator);
            };
        }
        public RabbitMqTransport(IConfiguration configuration)
        {
            var url = configuration["RabbitMq:Connection"];

            _rabbitMqHostSettings = new RabbitMqHostConfigurator(url, "/");
        }
        public void Should_ParseVhost_With_escapes()
        {
            var configurator = new RabbitMqHostConfigurator(new Uri("rabbitmq://localhost/%2fv%2fhost"));

            configurator.Settings.VirtualHost.ShouldBe("/v/host");
        }