Exemplo n.º 1
0
        public void ConfigureServices(IServiceCollection services)
        {
            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddSeriLog(Configuration);

            services.AddControllers(options => { options.RespectBrowserAcceptHeader = true; });

            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "Content");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new ExposureContentDbContext(builder.Build());
                result.BeginTransaction();
                return(result);
            });

            services.AddSingleton <IUtcDateTimeProvider>(new StandardUtcDateTimeProvider());
            services.AddSingleton <IPublishingId, StandardPublishingIdFormatter>();

            services.AddScoped <HttpGetCdnManifestCommand, HttpGetCdnManifestCommand>();
            services.AddScoped <HttpGetCdnContentCommand <AppConfigContentEntity>, HttpGetCdnContentCommand <AppConfigContentEntity> >();
            services.AddScoped <HttpGetCdnContentCommand <ResourceBundleContentEntity>, HttpGetCdnContentCommand <ResourceBundleContentEntity> >();
            services.AddScoped <HttpGetCdnContentCommand <RiskCalculationContentEntity>, HttpGetCdnContentCommand <RiskCalculationContentEntity> >();
            services.AddScoped <HttpGetCdnContentCommand <ExposureKeySetContentEntity>, HttpGetCdnContentCommand <ExposureKeySetContentEntity> >();

            services.AddScoped <IReader <ManifestEntity>, SafeBinaryContentDbReader <ManifestEntity> >();
            services.AddScoped <IReader <AppConfigContentEntity>, SafeBinaryContentDbReader <AppConfigContentEntity> >();
            services.AddScoped <IReader <ResourceBundleContentEntity>, SafeBinaryContentDbReader <ResourceBundleContentEntity> >();
            services.AddScoped <IReader <RiskCalculationContentEntity>, SafeBinaryContentDbReader <RiskCalculationContentEntity> >();
            services.AddScoped <IReader <ExposureKeySetContentEntity>, SafeBinaryContentDbReader <ExposureKeySetContentEntity> >();
        }
        public static void ConfigureServices(IServiceCollection services)
        {
            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddSeriLog(Configuration);
            services.AddSingleton(Configuration);
            services.AddTransient <App>();

            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "Content");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new ExposureContentDbContext(builder.Build());
                return(result);
            });

            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "Workflow");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new WorkflowDbContext(builder.Build());
                return(result);
            });

            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "Icc");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new IccBackendContentDbContext(builder.Build());
                return(result);
            });
        }
        public static void ConfigureServices(IServiceCollection services)
        {
            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddSeriLog(Configuration);
            services.AddSingleton(Configuration);
            services.AddTransient <App>();
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddControllers(options => { options.RespectBrowserAcceptHeader = true; });

            // Database Scoping
            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "Icc");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new IccBackendContentDbContext(builder.Build());
                result.BeginTransaction();
                return(result);
            });
            services.AddScoped <IEfDbConfig>(x => new StandardEfDbConfig(Configuration, "Icc"));
            services.AddScoped <ProvisionDatabasesCommandIcc, ProvisionDatabasesCommandIcc>();
            services.AddScoped <IUtcDateTimeProvider, StandardUtcDateTimeProvider>();
            services.AddScoped <IRandomNumberGenerator, RandomNumberGenerator>();
            services.AddScoped <IBasicAuthenticationConfig, BasicAuthenticationConfig>();
            services.AddScoped <IIccService, IccService>();
            services.AddScoped <AppBackendService, AppBackendService>();
            services.AddAuthentication("IccAuthentication")
            .AddScheme <AuthenticationSchemeOptions, IccAuthenticationHandler>("IccAuthentication", null);

            services.AddCors();

            services.AddSwaggerGen(o =>
            {
                o.SwaggerDoc("v1", new OpenApiInfo
                {
                    Title       = "Dutch Exposure Notification ICC API (inc. dev support)",
                    Version     = "v1",
                    Description = "This specification describes the interface between the Dutch exposure notification app backend, ICC Webportal and the ICC backend service.",
                    Contact     = new OpenApiContact
                    {
                        Name = "Ministerie van Volksgezondheid Welzijn en Sport backend repository", //TODO looks wrong?
                        Url  = new Uri("https://github.com/minvws/nl-covid19-notification-app-backend"),
                    },
                    License = new OpenApiLicense
                    {
                        Name = "European Union Public License v. 1.2",
                        //TODO this should be https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
                        Url = new Uri("https://github.com/minvws/nl-covid19-notification-app-backend/blob/master/LICENSE.txt")
                    },
                });
                o.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "NL.Rijksoverheid.ExposureNotification.BackEnd.Components.xml"));
                o.AddSecurityDefinition("Icc", new OpenApiSecurityScheme
                {
                    Description = "Icc Code Authentication",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey,
                    Scheme      = "IccAuthentication"
                });
                o.OperationFilter <SecurityRequirementsOperationFilter>();
            });
        }
        public static void ConfigureServices(IServiceCollection services)
        {
            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddSeriLog(Configuration);
            services.AddSingleton <IConfiguration>(Configuration);
            services.AddSingleton <PusherTask>();
            services.AddSingleton <IDataApiUrls>(new DataApiUrls(Configuration, "DataApi"));
            services.AddSingleton <IReceiverConfig>(new ReceiverConfig(Configuration, "Receiver"));
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddControllers();

            services.AddSeriLog(Configuration);
            services.AddBasicAuthentication();

            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "WorkFlow");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new WorkflowDbContext(builder.Build());
                result.Database.BeginTransaction();
                return(result);
            });

            services.AddSingleton <IUtcDateTimeProvider, StandardUtcDateTimeProvider>();

            services.AddScoped <HttpPostAuthorise, HttpPostAuthorise>();
            services.AddScoped <ISignatureValidator, SignatureValidator>();
            services.AddScoped <IAuthorisationWriter, AuthorisationWriter>();

            services.AddSwaggerGen(o =>
            {
                o.SwaggerDoc("v1", new OpenApiInfo {
                    Title = Title, Version = "v1"
                });

                o.AddSecurityDefinition("basic", new OpenApiSecurityScheme
                {
                    Name        = "Authorization",
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "basic",
                    In          = ParameterLocation.Header,
                    Description = "Basic Authorization header using the Bearer scheme."
                });

                o.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id   = "basic"
                            }
                        },
                        new string[] {}
                    }
                });
            });
        }
Exemplo n.º 7
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddBasicAuthentication();
            services.AddSeriLog(Configuration);
            services.AddControllers();
            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "Content");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new ExposureContentDbContext(builder.Build());
                result.BeginTransaction();
                return(result);
            });

            services.AddScoped <HttpPostContentReciever <ManifestEntity>, HttpPostContentReciever <ManifestEntity> >();
            services.AddScoped <HttpPostContentReciever <AppConfigContentEntity>, HttpPostContentReciever <AppConfigContentEntity> >();
            services.AddScoped <HttpPostContentReciever <ResourceBundleContentEntity>, HttpPostContentReciever <ResourceBundleContentEntity> >();
            services.AddScoped <HttpPostContentReciever <RiskCalculationContentEntity>, HttpPostContentReciever <RiskCalculationContentEntity> >();
            services.AddScoped <HttpPostContentReciever <ExposureKeySetContentEntity>, HttpPostContentReciever <ExposureKeySetContentEntity> >();

            services.AddSwaggerGen(o =>
            {
                o.SwaggerDoc("v1", new OpenApiInfo
                {
                    Title   = "Azure CDN Data Receiver API",
                    Version = "v1",
                });

                o.AddSecurityDefinition("basic", new OpenApiSecurityScheme
                {
                    Name        = "Authorization",
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "basic",
                    In          = ParameterLocation.Header,
                    Description = "Basic Authorization header using the Bearer scheme."
                });

                o.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id   = "basic"
                            }
                        },
                        new string[] {}
                    }
                });
            });
        }
Exemplo n.º 8
0
        public void ConfigureServices(IServiceCollection services)
        {
            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddScoped(x =>
            {
                var builder = new SqlServerDbContextOptionsBuilder(Environment.GetEnvironmentVariable("ConnectionStrings:Content"));
                var result  = new ExposureContentDbContext(builder.Build());
                result.BeginTransaction();
                return(result);
            });

            services.AddSingleton <IUtcDateTimeProvider, StandardUtcDateTimeProvider>();
            services.AddScoped <ICdnContentConfig, CdnContentConfig>();
            services.AddScoped <CdnContentPurgeCommand, CdnContentPurgeCommand>();
        }
Exemplo n.º 9
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddControllers();
            services.AddSeriLog(Configuration);

            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "WorkFlow");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new WorkflowDbContext(builder.Build());
                result.BeginTransaction();
                return(result);
            });
            services.AddScoped <JwtService, JwtService>();
            services.AddAuthentication("icc_jwt")
            .AddScheme <AuthenticationSchemeOptions, JwtAuthorizationHandler>("icc_jwt", null);

            services.AddSingleton <IUtcDateTimeProvider, StandardUtcDateTimeProvider>();
            services.AddSingleton <IGeanTekListValidationConfig, StandardGeanCommonWorkflowConfig>();
            services.AddSingleton <ITemporaryExposureKeyValidator, TemporaryExposureKeyValidator>();
            services.AddSingleton <ITemporaryExposureKeyValidatorConfig, TemporaryExposureKeyValidatorConfig>();

            services.AddScoped <HttpPostReleaseTeksCommand, HttpPostReleaseTeksCommand>();

            services.AddScoped <IReleaseTeksValidator, ReleaseTeksValidator>();
            services.AddScoped <ISignatureValidator, SignatureValidator>();

            services.AddScoped <HttpPostRegisterSecret, HttpPostRegisterSecret>();
            services.AddScoped <ISecretWriter, SecretWriter>();
            services.AddScoped <ISecretConfig, StandardSecretConfig>();
            services.AddScoped <ITekWriter, TekWriter>();
            services.AddScoped <RandomNumberGenerator, RandomNumberGenerator>();

            services.AddSwaggerGen(o =>
            {
                o.SwaggerDoc("v1", new OpenApiInfo {
                    Title = Title, Version = "v1"
                });
            });
        }
Exemplo n.º 10
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddSeriLog(Configuration);

            services.AddControllers().AddJsonOptions(_ =>
            {
                // This configures the serializer for ASP.Net, StandardContentEntityFormatter does that for ad-hoc occurrences.
                _.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
            });

            services.AddBasicAuthentication();

            services.AddScoped <HttpGetManifestBinaryContentCommand, HttpGetManifestBinaryContentCommand>();
            services.AddScoped <DynamicManifestReader, DynamicManifestReader>();
            services.AddScoped <ManifestBuilder, ManifestBuilder>();
            services.AddSingleton <IUtcDateTimeProvider>(new StandardUtcDateTimeProvider());
            services.AddSingleton <IPublishingId>(new StandardPublishingIdFormatter());
            services.AddSingleton <IGaenContentConfig>(new GaenContentConfig(Configuration));

            if (CurrentEnvironment.IsProduction() || CurrentEnvironment.IsStaging())
            {
                services.AddSingleton <IContentSigner, CmsSigner>();
                services.AddSingleton <ICertificateProvider, HsmCertificateProvider>();
                services.AddSingleton <IThumbprintConfig>(x => new CertificateProviderConfig(x.GetService <IConfiguration>(), "ExposureKeySets:Signing:NL"));
            }
            else
            {
                services.AddSingleton <IContentSigner, FakeContentSigner>();
            }

            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "Content");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new ExposureContentDbContext(builder.Build());
                result.BeginTransaction();
                return(result);
            });

            services.AddScoped <GetActiveExposureKeySetsListCommand, GetActiveExposureKeySetsListCommand>();
            services.AddScoped <GetLatestContentCommand <AppConfigContentEntity>, GetLatestContentCommand <AppConfigContentEntity> >();
            services.AddScoped <GetLatestContentCommand <ResourceBundleContentEntity>, GetLatestContentCommand <ResourceBundleContentEntity> >();
            services.AddScoped <GetLatestContentCommand <RiskCalculationContentEntity>, GetLatestContentCommand <RiskCalculationContentEntity> >();

            services.AddScoped <HttpGetBinaryContentCommand <ExposureKeySetContentEntity>, HttpGetBinaryContentCommand <ExposureKeySetContentEntity> >();
            services.AddScoped <HttpGetBinaryContentCommand <AppConfigContentEntity>, HttpGetBinaryContentCommand <AppConfigContentEntity> >();
            services.AddScoped <HttpGetBinaryContentCommand <ResourceBundleContentEntity>, HttpGetBinaryContentCommand <ResourceBundleContentEntity> >();
            services.AddScoped <HttpGetBinaryContentCommand <RiskCalculationContentEntity>, HttpGetBinaryContentCommand <RiskCalculationContentEntity> >();

            services.AddScoped <IReader <ExposureKeySetContentEntity>, SafeBinaryContentDbReader <ExposureKeySetContentEntity> >();
            services.AddScoped <IReader <AppConfigContentEntity>, SafeBinaryContentDbReader <AppConfigContentEntity> >();
            services.AddScoped <IReader <ResourceBundleContentEntity>, SafeBinaryContentDbReader <ResourceBundleContentEntity> >();
            services.AddScoped <IReader <RiskCalculationContentEntity>, SafeBinaryContentDbReader <RiskCalculationContentEntity> >();


            services.AddSwaggerGen(o =>
            {
                o.SwaggerDoc("v1", new OpenApiInfo
                {
                    Title   = Title,
                    Version = "v1",
                });

                o.AddSecurityDefinition("basic", new OpenApiSecurityScheme
                {
                    Name        = "Authorization",
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "basic",
                    In          = ParameterLocation.Header,
                    Description = "Basic Authorization header using the Bearer scheme."
                });

                o.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id   = "basic"
                            }
                        },
                        new string[] {}
                    }
                });
            });
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddControllers(options =>
            {
                options.RespectBrowserAcceptHeader = true;
            });

            services.AddSeriLog(Configuration);
            services.AddBasicAuthentication();

            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "WorkFlow");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new WorkflowDbContext(builder.Build());
                return(result);
            });

            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "Content");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new ExposureContentDbContext(builder.Build());
                return(result);
            });

            services.AddSingleton <IUtcDateTimeProvider, StandardUtcDateTimeProvider>();

            services.AddScoped <HttpPostGenerateExposureKeySetsCommand, HttpPostGenerateExposureKeySetsCommand>();

            services.AddScoped(x =>
                               new ExposureKeySetBatchJobMk2(
                                   x.GetService <IGaenContentConfig>(),
                                   x.GetService <IExposureKeySetBuilder>(),
                                   x.GetService <WorkflowDbContext>(),
                                   x.GetService <ExposureContentDbContext>(),
                                   x.GetService <IUtcDateTimeProvider>(),
                                   x.GetService <IPublishingId>()
                                   ));

            services.AddSingleton <IGaenContentConfig, GaenContentConfig>();
            services.AddScoped <IExposureKeySetBuilder>(x =>
                                                        new ExposureKeySetBuilderV1(
                                                            x.GetService <IExposureKeySetHeaderInfoConfig>(),
                                                            new EcdSaSigner(new HsmCertificateProvider(new CertificateProviderConfig(x.GetService <IConfiguration>(), "ExposureKeySets:Signing:GA"))),
                                                            new CmsSigner(new HsmCertificateProvider(new CertificateProviderConfig(x.GetService <IConfiguration>(), "ExposureKeySets:Signing:NL"))),
                                                            x.GetService <IUtcDateTimeProvider>(), //TODO pass in time thru execute
                                                            new GeneratedProtobufContentFormatter()
                                                            ));
            services.AddScoped <IExposureKeySetHeaderInfoConfig, ExposureKeySetHeaderInfoConfig>();
            services.AddScoped <IPublishingId, StandardPublishingIdFormatter>();

            services.AddSwaggerGen(o =>
            {
                o.SwaggerDoc("v1", new OpenApiInfo {
                    Title = Title, Version = "v1"
                });

                o.AddSecurityDefinition("basic", new OpenApiSecurityScheme
                {
                    Name        = "Authorization",
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "basic",
                    In          = ParameterLocation.Header,
                    Description = "Basic Authorization header using the Bearer scheme."
                });

                o.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id   = "basic"
                            }
                        },
                        new string[] {}
                    }
                });
            });
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services
            .AddControllers(options => { options.RespectBrowserAcceptHeader = true; })
            .AddJsonOptions(_ =>
            {
                // This configures the serializer for ASP.Net, StandardContentEntityFormatter does that for ad-hoc occurrences.
                _.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
            });

            ComponentsContainerHelper.RegisterDefaultServices(services);

            services.AddSingleton <IUtcDateTimeProvider, StandardUtcDateTimeProvider>();
            services.AddSingleton <IGaenContentConfig, GaenContentConfig>();
            services.AddSingleton <IExposureKeySetBatchJobConfig, ExposureKeySetBatchJobConfig>();
            services.AddScoped <IPublishingId, StandardPublishingIdFormatter>();

            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "Content");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new ExposureContentDbContext(builder.Build());
                result.BeginTransaction();
                return(result);
            });

            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "WorkFlow");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new WorkflowDbContext(builder.Build());
                result.BeginTransaction();
                return(result);
            });
            services.AddScoped(x =>
            {
                var config  = new StandardEfDbConfig(Configuration, "Icc");
                var builder = new SqlServerDbContextOptionsBuilder(config);
                var result  = new IccBackendContentDbContext(builder.Build());
                result.BeginTransaction();
                return(result);
            });

            //Just for the Batch Job
            //services.AddScoped<IEfDbConfig>(x => new StandardEfDbConfig(Configuration, "Job"));
            //services.AddScoped<IExposureKeySetHeaderInfoConfig, ExposureKeySetHeaderInfoConfig>();
            services.AddScoped <IContentSigner, FakeContentSigner>();
            services.AddSingleton <IGeanTekListValidationConfig, StandardGeanCommonWorkflowConfig>();
            services.AddSingleton <ITemporaryExposureKeyValidator, TemporaryExposureKeyValidator>();
            services.AddSingleton <ITemporaryExposureKeyValidatorConfig, TemporaryExposureKeyValidatorConfig>();
            services.AddScoped <IPublishingId, StandardPublishingIdFormatter>();


            services.AddScoped(x =>
                               new ExposureKeySetBatchJobMk2(
                                   x.GetService <IGaenContentConfig>(),
                                   x.GetService <IExposureKeySetBuilder>(),
                                   x.GetService <WorkflowDbContext>(),
                                   x.GetService <ExposureContentDbContext>(),
                                   x.GetService <IUtcDateTimeProvider>(),
                                   x.GetService <IPublishingId>()
                                   ));

            services.AddSingleton <IGaenContentConfig, GaenContentConfig>();
            services.AddScoped <IExposureKeySetBuilder>(x =>
                                                        new ExposureKeySetBuilderV1(
                                                            x.GetService <IExposureKeySetHeaderInfoConfig>(),
                                                            new EcdSaSigner(new ResourceCertificateProvider("FakeECDSA.p12")),
                                                            new CmsSigner(new ResourceCertificateProvider("FakeRSA.p12")),
                                                            x.GetService <IUtcDateTimeProvider>(), //TODO pass in time thru execute
                                                            new GeneratedProtobufContentFormatter()
                                                            ));

            services.AddScoped <IExposureKeySetHeaderInfoConfig, ExposureKeySetHeaderInfoConfig>();
            services.AddSingleton <ISignatureValidator>(new FakeSignatureValidator());

            services.AddScoped(x =>
                               new ExposureKeySetBuilderV1(
                                   x.GetService <ExposureKeySetHeaderInfoConfig>(),
                                   new FakeContentSigner(),
                                   new FakeContentSigner(),
                                   x.GetService <IUtcDateTimeProvider>(),
                                   new GeneratedProtobufContentFormatter()
                                   ));

            services.AddScoped <ManifestBuilder, ManifestBuilder>();
            services.AddScoped <GetActiveExposureKeySetsListCommand, GetActiveExposureKeySetsListCommand>();

            services.AddScoped <ExposureKeySetSafeReadCommand, ExposureKeySetSafeReadCommand>();
            services.AddScoped <SafeGetRiskCalculationConfigDbCommand, SafeGetRiskCalculationConfigDbCommand>();

            services.AddScoped <HttpPostRiskCalculationConfigCommand, HttpPostRiskCalculationConfigCommand>();
            services.AddScoped <RiskCalculationConfigValidator, RiskCalculationConfigValidator>();
            services.AddScoped <RiskCalculationConfigInsertDbCommand, RiskCalculationConfigInsertDbCommand>();

            services.AddScoped <HttpPostResourceBundleCommand, HttpPostResourceBundleCommand>();
            services.AddScoped <ResourceBundleInsertDbCommand, ResourceBundleInsertDbCommand>();
            services.AddScoped <ResourceBundleValidator, ResourceBundleValidator>();

            services.AddScoped <ProvisionDatabasesCommand, ProvisionDatabasesCommand>();
            services.AddScoped <ProvisionDatabasesCommandIcc, ProvisionDatabasesCommandIcc>();
            services.AddScoped <HttpPostGenerateExposureKeySetsCommand, HttpPostGenerateExposureKeySetsCommand>();
            //services.AddScoped<HttpGetCdnContentCommand<ManifestEntity>, HttpGetCdnContentCommand<ManifestEntity>>();

            services
            .AddScoped <HttpGetSignedCdnContentOnlyCommand <ExposureKeySetContentEntity>,
                        HttpGetSignedCdnContentOnlyCommand <ExposureKeySetContentEntity> >();
            services
            .AddScoped <HttpGetCdnContentCommand <RiskCalculationContentEntity>,
                        HttpGetCdnContentCommand <RiskCalculationContentEntity> >();
            services
            .AddScoped <HttpGetCdnContentCommand <ResourceBundleContentEntity>,
                        HttpGetCdnContentCommand <ResourceBundleContentEntity> >();
            services
            .AddScoped <HttpGetCdnContentCommand <AppConfigContentEntity>,
                        HttpGetCdnContentCommand <AppConfigContentEntity> >();

            services.AddScoped <DynamicManifestReader, DynamicManifestReader>();
            services
            .AddScoped <IReader <ExposureKeySetContentEntity>, SafeBinaryContentDbReader <ExposureKeySetContentEntity>
                        >();
            services
            .AddScoped <IReader <ResourceBundleContentEntity>, SafeBinaryContentDbReader <ResourceBundleContentEntity>
                        >();
            services
            .AddScoped <IReader <RiskCalculationContentEntity>,
                        SafeBinaryContentDbReader <RiskCalculationContentEntity> >();
            services.AddScoped <IReader <AppConfigContentEntity>, SafeBinaryContentDbReader <AppConfigContentEntity> >();
            services.AddScoped <PurgeExpiredSecretsDbCommand, PurgeExpiredSecretsDbCommand>();

            services.AddScoped <HttpPostRegisterSecret, HttpPostRegisterSecret>();
            services.AddScoped <RandomNumberGenerator, RandomNumberGenerator>();
            services.AddScoped <ISecretConfig, StandardSecretConfig>();

            services.AddScoped <ISecretWriter, SecretWriter>();

            services.AddScoped <AuthorisationWriter, AuthorisationWriter>();

            services.AddScoped <HttpPostReleaseTeksCommand, HttpPostReleaseTeksCommand>();
            services.AddScoped <IReleaseTeksValidator, ReleaseTeksValidator>();

            services.AddScoped <ITekWriter, TekWriter>();

            services.AddScoped <HttpPostAppConfigCommand, HttpPostAppConfigCommand>();
            services.AddScoped <AppConfigInsertDbCommand, AppConfigInsertDbCommand>();
            services.AddScoped <AppConfigValidator, AppConfigValidator>();

            services.AddScoped <HttpPostAuthorise, HttpPostAuthorise>();
            services.AddScoped <IAuthorisationWriter, AuthorisationWriter>();

            services.AddScoped <IBasicAuthenticationConfig, BasicAuthenticationConfig>();
            services.AddBasicAuthentication();

            services.AddScoped <JwtService, JwtService>();
            services.AddAuthentication("icc_jwt")
            .AddScheme <AuthenticationSchemeOptions, JwtAuthorizationHandler>("icc_jwt", null);

            services
            .AddScoped <GetLatestContentCommand <ResourceBundleContentEntity>,
                        GetLatestContentCommand <ResourceBundleContentEntity> >();
            services
            .AddScoped <GetLatestContentCommand <RiskCalculationContentEntity>,
                        GetLatestContentCommand <RiskCalculationContentEntity> >();
            services
            .AddScoped <GetLatestContentCommand <AppConfigContentEntity>,
                        GetLatestContentCommand <AppConfigContentEntity> >();

            services.AddScoped <IContentEntityFormatter, StandardContentEntityFormatter>();
            services.AddScoped <ZippedSignedContentFormatter, ZippedSignedContentFormatter>();

            services.AddScoped <HttpGetManifestBinaryContentCommand, HttpGetManifestBinaryContentCommand>();
            services.AddScoped <DynamicManifestReader, DynamicManifestReader>();
            services.AddScoped <HttpGetManifestSasCommand, HttpGetManifestSasCommand>();

            services.AddSwaggerGen(o =>
            {
                o.SwaggerDoc("v1", new OpenApiInfo
                {
                    Title       = "Dutch Exposure Notification API (inc. dev support)",
                    Version     = "v1",
                    Description =
                        "This specification describes the interface between the Dutch exposure notification app and the backend service.\nTODO: Add signatures to manifest, riskcalculationparameters and appconfig",
                    Contact = new OpenApiContact
                    {
                        Name = "Ministerie van Volksgezondheid Welzijn en Sport backend repository", //TODO looks wrong?
                        Url  = new Uri("https://github.com/minvws/nl-covid19-notification-app-backend"),
                    },
                    License = new OpenApiLicense
                    {
                        Name = "European Union Public License v. 1.2",
                        //TODO this should be https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
                        Url = new Uri(
                            "https://github.com/minvws/nl-covid19-notification-app-backend/blob/master/LICENSE.txt")
                    },
                });
                o.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory,
                                                  "NL.Rijksoverheid.ExposureNotification.BackEnd.ServerStandAlone.xml"));
                o.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory,
                                                  "NL.Rijksoverheid.ExposureNotification.BackEnd.Components.xml"));


                o.AddSecurityDefinition("basic", new OpenApiSecurityScheme
                {
                    Name        = "Authorization",
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "basic",
                    In          = ParameterLocation.Header,
                    Description = "Basic Authorization header."
                });
                o.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id   = "basic"
                            }
                        },
                        new string[] { }
                    }
                });
            });
        }