コード例 #1
0
        public static X509Certificate2 GetCertificate(this IServiceConfigurationBuilder serviceConfigurationBuilder, DynamicOptions certificateOptions)
        {
            if (serviceConfigurationBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceConfigurationBuilder));
            }

            if (certificateOptions == null)
            {
                throw new ArgumentNullException(nameof(certificateOptions));
            }

            try
            {
                var resolverOptions = (ResolverOptions)serviceConfigurationBuilder.InstanceFactory.Create(certificateOptions.Type);
                certificateOptions.Options?.Bind(resolverOptions);

                var certificate = serviceConfigurationBuilder.CertificateResolver.Resolve(resolverOptions);

                return(certificate.Unwrap <X509Certificate2>());
            }
            catch (Exception exception)
            {
                throw new InvalidOperationException($"Could not resolve certificate from options with path \"{certificateOptions.Options?.Path}\" and type \"{certificateOptions.Type}\".", exception);
            }
        }
コード例 #2
0
 public static void AddCrypto(this IServiceConfigurationBuilder builder)
 {
     builder.Services.AddSingleton <ITransactionHasher, TransactionHasher>();
     builder.Services.AddSingleton <ITransactionValidator, TransactionValidator>();
     builder.Services.AddSingleton <IKeyGenerator, KeyGenerator>();
     builder.Services.AddSingleton <ICryptoSigner, CryptoSigner>();
 }
コード例 #3
0
 public static void AddPubsub(this IServiceConfigurationBuilder builder)
 {
     builder.Services.AddSingleton<ITransactionPublisher, TransactionPublisher>();
     builder.Services.AddSingleton<ITransactionSubscriber, TransactionSubscriber>();
 
     if((string)builder.Configuration.GetValue(typeof(string), "Broker") == "redis")
     {
         builder.Services.Configure<RedisBrokerOptions>(options => builder.Configuration.GetSection("Redis").Bind(options));
         builder.Services.AddSingleton<ITransactionBroker, RedisBroker>();
     }
     else
     {
         // TODO: add other broker configs as needed
     }
 }
コード例 #4
0
        public static void AddSwagger(this IServiceConfigurationBuilder builder)
        {
            using (var provider = builder.Services.BuildServiceProvider())
            {
                var toggles = provider.GetRequiredService <IFeatureToggleProvider>();

                builder.Services.AddSwaggerGen(gen =>
                {
                    var xmlFile = $"{Assembly.GetEntryAssembly().GetName().Name}.xml";
                    var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                    gen.IncludeXmlComments(xmlPath);
                    gen.DocumentFilter <DevDocumentFilter>(toggles);
                });
            }
        }
コード例 #5
0
 public DevelopmentStartup(IServiceConfigurationBuilder serviceConfigurationBuilder)
 {
     this.ServiceConfigurationBuilder = serviceConfigurationBuilder ?? throw new ArgumentNullException(nameof(serviceConfigurationBuilder));
 }
コード例 #6
0
 public static void AddFeatureToggles(this IServiceConfigurationBuilder builder)
 {
     builder.Services.Configure <FeatureToggleOptions>(options => builder.Configuration.GetSection("FeatureToggles").Bind(options));
     builder.Services.AddSingleton <IFeatureToggleProvider, FeatureToggleProvider>();
 }
コード例 #7
0
 public static void AddRepositories(this IServiceConfigurationBuilder builder)
 {
     builder.Services.AddSingleton <ITransactionRepository, TransactionRepository>();
 }
        public static IServiceCollection AddDataDirectory(this IServiceCollection services, IServiceConfigurationBuilder serviceConfigurationBuilder)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (serviceConfigurationBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceConfigurationBuilder));
            }

            var options = new DataDirectoryOptions();

            serviceConfigurationBuilder.Configuration.GetSection(ConfigurationKeys.DataDirectoryPath).Bind(options);

            var path = options.Path;

            if (!Path.IsPathRooted(path))
            {
                path = Path.Combine(serviceConfigurationBuilder.HostEnvironment.ContentRootPath, path);
            }

            serviceConfigurationBuilder.ApplicationDomain.SetData(ConfigurationKeys.DataDirectoryPath, path);

            return(services);
        }
        public static IServiceCollection AddCertificateForwarding(this IServiceCollection services, IServiceConfigurationBuilder serviceConfigurationBuilder)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (serviceConfigurationBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceConfigurationBuilder));
            }

            var configurationSection = serviceConfigurationBuilder.Configuration.GetSection(ConfigurationKeys.CertificateForwardingPath);

            return(services.AddCertificateForwarding(options =>
            {
                configurationSection.Bind(options);
            }));
        }
        public static IServiceCollection AddIdentity(this IServiceCollection services, IServiceConfigurationBuilder serviceConfigurationBuilder)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (serviceConfigurationBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceConfigurationBuilder));
            }

            var connectionString = serviceConfigurationBuilder.Configuration.GetConnectionString(serviceConfigurationBuilder.Data.ConnectionStringName);
            var databaseProvider = serviceConfigurationBuilder.Data.Provider;

            return(databaseProvider switch
            {
                DatabaseProvider.Sqlite => services.AddIdentity <SqliteIdentity>(optionsBuilder => optionsBuilder.UseSqlite(connectionString)),
                DatabaseProvider.SqlServer => services.AddIdentity <SqlServerIdentity>(optionsBuilder => optionsBuilder.UseSqlServer(connectionString)),
                _ => throw new InvalidOperationException($"The database-provider \"{databaseProvider}\" is not supported.")
            });
        public static IServiceCollection AddForwardedHeaders(this IServiceCollection services, IServiceConfigurationBuilder serviceConfigurationBuilder)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (serviceConfigurationBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceConfigurationBuilder));
            }

            return(services.Configure <ForwardedHeadersOptions>(options =>
            {
                options.AllowedHosts.Clear();
                options.KnownNetworks.Clear();
                options.KnownProxies.Clear();

                var forwardedHeadersSection = serviceConfigurationBuilder.Configuration.GetSection(ConfigurationKeys.ForwardedHeadersPath);

                forwardedHeadersSection?.Bind(options);

                var extendedOptions = new ExtendedForwardedHeadersOptions();

                forwardedHeadersSection?.Bind(extendedOptions);

                foreach (var knownNetwork in extendedOptions.KnownNetworks)
                {
                    options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse(knownNetwork.Prefix), knownNetwork.PrefixLength));
                }

                foreach (var proxy in extendedOptions.KnownProxies)
                {
                    options.KnownProxies.Add(IPAddress.Parse(proxy));
                }
            }));
        }
        public static IServiceCollection AddDevelopment(this IServiceCollection services, IServiceConfigurationBuilder serviceConfigurationBuilder)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

            if (serviceConfigurationBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceConfigurationBuilder));
            }

            var developmentStartup = new DevelopmentStartup(serviceConfigurationBuilder);

            developmentStartup.ConfigureServices(services);
            services.TryAddSingleton <IDevelopmentStartup>(developmentStartup);

            return(services);
        }
コード例 #13
0
 public static void AddSerializers(this IServiceConfigurationBuilder builder)
 {
     builder.Services.AddSingleton <ITransactionSerializer, TransactionSerializer>();
 }