internal RequestBuilder(
     ITimeProvider timeProvider,
     IEntityMapper entityMapper,
     IDbMultiEntityMethods dbContextService,
     IObcConfigurationProvider configurationProvider,
     IInstrumentationClient logger,
     IKeySecretReadOnlyProvider keySecretReadOnlyProvider,
     IApiClient apiClient,
     ICertificateReader certificateReader,
     IDbEntityRepository <BankClientProfile> clientProfileRepository,
     IDbEntityRepository <DomesticConsent> domesticConsentRepo,
     IDbEntityRepository <ApiProfile> apiProfileRepository,
     IKeySecretReadRepository <ActiveSoftwareStatementProfiles> activeSReadOnlyRepo,
     IKeySecretWriteRepository <ActiveSoftwareStatementProfiles> activeSrRepo,
     IKeySecretMultiItemReadRepository <SoftwareStatementProfile> sReadOnlyRepo,
     IKeySecretMultiItemWriteRepository <SoftwareStatementProfile> sRepo,
     ISoftwareStatementProfileService softwareStatementProfileService)
 {
     _certificateReader   = certificateReader.ArgNotNull(nameof(certificateReader));
     _timeProvider        = timeProvider.ArgNotNull(nameof(timeProvider));
     _entityMapper        = entityMapper.ArgNotNull(nameof(entityMapper));
     _dbContextService    = dbContextService;
     _activeSReadOnlyRepo = activeSReadOnlyRepo;
     _activeSRRepo        = activeSrRepo;
     _sReadOnlyRepo       = sReadOnlyRepo;
     _sRepo = sRepo;
     _softwareStatementProfileService = softwareStatementProfileService;
     _configurationProvider           = configurationProvider.ArgNotNull(nameof(configurationProvider));
     _logger = logger.ArgNotNull(nameof(logger));
     _keySecretReadOnlyProvider = keySecretReadOnlyProvider.ArgNotNull(nameof(keySecretReadOnlyProvider));
     _apiClient = apiClient.ArgNotNull(nameof(apiClient));
     _clientProfileRepository = clientProfileRepository.ArgNotNull(nameof(clientProfileRepository));
     _domesticConsentRepo     = domesticConsentRepo.ArgNotNull(nameof(domesticConsentRepo));
     _apiProfileRepository    = apiProfileRepository.ArgNotNull(nameof(apiProfileRepository));
 }
 internal SharedContext(
     ICertificateReader certificateReader,
     IApiClient apiClient,
     IObcConfigurationProvider configurationProvider,
     IInstrumentationClient instrumentation,
     IKeySecretReadOnlyProvider keySecretReadOnlyProvider,
     IDbEntityRepository <BankClientProfile> clientProfileRepository,
     ISoftwareStatementProfileService softwareStatementProfileService,
     IDbEntityRepository <DomesticConsent> domesticConsentRepository,
     IEntityMapper entityMapper,
     IDbEntityRepository <ApiProfile> apiProfileRepository,
     IDbMultiEntityMethods dbContextService,
     IKeySecretWriteRepository <ActiveSoftwareStatementProfiles> activeSrRepo,
     IKeySecretMultiItemReadRepository <SoftwareStatementProfile> sReadOnlyRepo,
     IKeySecretMultiItemWriteRepository <SoftwareStatementProfile> sRepo,
     IKeySecretReadRepository <ActiveSoftwareStatementProfiles> activeSReadOnlyRepo)
 {
     CertificateReader               = certificateReader;
     ApiClient                       = apiClient;
     ConfigurationProvider           = configurationProvider;
     Instrumentation                 = instrumentation;
     KeySecretReadOnlyProvider       = keySecretReadOnlyProvider;
     ClientProfileRepository         = clientProfileRepository;
     SoftwareStatementProfileService = softwareStatementProfileService;
     DomesticConsentRepository       = domesticConsentRepository;
     EntityMapper                    = entityMapper;
     ApiProfileRepository            = apiProfileRepository;
     DbContextService                = dbContextService;
     ActiveSRRepo                    = activeSrRepo;
     SReadOnlyRepo                   = sReadOnlyRepo;
     SRepo = sRepo;
     ActiveSReadOnlyRepo = activeSReadOnlyRepo;
 }
 public RequestBuilder(
     IEntityMapper entityMapper,
     IDbMultiEntityMethods dbContextService,
     IObcConfigurationProvider configurationProvider,
     IInstrumentationClient logger,
     IKeySecretReadOnlyProvider keySecretReadOnlyProvider,
     IApiClient apiClient,
     ICertificateReader certificateReader,
     IDbEntityRepository <BankClientProfile> clientProfileRepository,
     IDbEntityRepository <DomesticConsent> domesticConsentRepo,
     IDbEntityRepository <ApiProfile> apiProfileRepository,
     IKeySecretReadRepository <ActiveSoftwareStatementProfiles> activeSReadOnlyRepo,
     IKeySecretWriteRepository <ActiveSoftwareStatementProfiles> activeSrRepo,
     IKeySecretMultiItemReadRepository <SoftwareStatementProfile> sReadOnlyRepo,
     IKeySecretMultiItemWriteRepository <SoftwareStatementProfile> sRepo,
     ISoftwareStatementProfileService softwareStatementProfileService)
     : this(
         timeProvider : new TimeProvider(),
         entityMapper : entityMapper,
         dbContextService : dbContextService,
         configurationProvider : configurationProvider,
         logger : logger,
         keySecretReadOnlyProvider : keySecretReadOnlyProvider,
         apiClient : apiClient,
         certificateReader : certificateReader,
         clientProfileRepository : clientProfileRepository,
         domesticConsentRepo : domesticConsentRepo,
         apiProfileRepository : apiProfileRepository,
         activeSReadOnlyRepo : activeSReadOnlyRepo,
         activeSrRepo : activeSrRepo,
         sReadOnlyRepo : sReadOnlyRepo,
         sRepo : sRepo,
         softwareStatementProfileService : softwareStatementProfileService)
 {
 }
 public CreateBankClientProfile(
     IApiClient apiClient,
     IEntityMapper mapper,
     IDbMultiEntityMethods dbMultiEntityMethods,
     IDbEntityRepository <BankClientProfile> bankClientProfileRepo,
     ISoftwareStatementProfileService softwareStatementProfileService)
 {
     _apiClient                       = apiClient;
     _mapper                          = mapper;
     _dbMultiEntityMethods            = dbMultiEntityMethods;
     _bankClientProfileRepo           = bankClientProfileRepo;
     _softwareStatementProfileService = softwareStatementProfileService;
 }
Esempio n. 5
0
 public CreateDomesticPayment(
     IApiClient apiClient,
     IEntityMapper mapper,
     IDbEntityRepository <BankClientProfile> openBankingClientRepo,
     IDbEntityRepository <DomesticConsent> domesticConsentRepo,
     IDbEntityRepository <ApiProfile> apiProfileRepo,
     ISoftwareStatementProfileService softwareStatementProfileService)
 {
     _apiClient                       = apiClient;
     _mapper                          = mapper;
     _openBankingClientRepo           = openBankingClientRepo;
     _domesticConsentRepo             = domesticConsentRepo;
     _apiProfileRepo                  = apiProfileRepo;
     _softwareStatementProfileService = softwareStatementProfileService;
 }
Esempio n. 6
0
 public CreateDomesticPaymentConsent(
     IApiClient apiClient,
     IEntityMapper mapper,
     IDbMultiEntityMethods dbMultiEntityMethods,
     IDbEntityRepository <BankClientProfile> bankClientProfileRepo,
     IDbEntityRepository <ApiProfile> apiProfileRepo,
     IDbEntityRepository <DomesticConsent> domesticConsentRepo,
     ISoftwareStatementProfileService softwareStatementProfileService)
 {
     _apiClient                       = apiClient;
     _mapper                          = mapper;
     _dbMultiEntityMethods            = dbMultiEntityMethods;
     _bankClientProfileRepo           = bankClientProfileRepo;
     _apiProfileRepo                  = apiProfileRepo;
     _domesticConsentRepo             = domesticConsentRepo;
     _softwareStatementProfileService = softwareStatementProfileService;
 }
 public RedirectCallbackHandler(
     IApiClient apiClient,
     IEntityMapper mapper,
     IDbEntityRepository <BankClientProfile> openBankingClientRepo,
     IDbEntityRepository <DomesticConsent> domesticConsentRepo,
     ISoftwareStatementProfileService softwareStatementProfileService,
     IDbMultiEntityMethods dbMultiEntityMethods,
     IDbEntityRepository <ApiProfile> apiProfileRepo)
 {
     _apiClient                       = apiClient.ArgNotNull(nameof(apiClient));
     _mapper                          = mapper.ArgNotNull(nameof(mapper));
     _openBankingClientRepo           = openBankingClientRepo.ArgNotNull(nameof(openBankingClientRepo));
     _domesticConsentRepo             = domesticConsentRepo.ArgNotNull(nameof(domesticConsentRepo));
     _softwareStatementProfileService = softwareStatementProfileService;
     _dbContextService                = dbMultiEntityMethods;
     _apiProfileRepo                  = apiProfileRepo;
 }
 public SoftwareStatementProfileHostedService(ISoftwareStatementProfileService softwareStatementProfileService)
 {
     _softwareStatementProfileService = softwareStatementProfileService ??
                                        throw new ArgumentNullException(nameof(softwareStatementProfileService));
 }
Esempio n. 9
0
        public static IServiceCollection AddOpenBankingConnector(
            this IServiceCollection services,
            IConfiguration configuration,
            bool loadSecretsFromConfig)
        {
            const string httpClientName = "OBC";

            services.AddHttpClient(httpClientName)
            .ConfigurePrimaryHttpMessageHandler(
                sp =>
            {
                ISoftwareStatementProfileService profileService =
                    sp.GetRequiredService <ISoftwareStatementProfileService>();

                // This can be removed in .NET 5 when SoftwareStatementProfileHostedService
                // and SocketsHttpHandler used.
                profileService.SetSoftwareStatementProfileFromSecretsSync();

                HttpMessageHandler handler = new HttpRequestBuilder()
                                             .SetClientCertificates(profileService.GetCertificates())
                                             .CreateMessageHandler();

                return(handler);
            });

            services.AddSingleton <IObcConfigurationProvider>(
                sp => new NetGenericHostObcConfigurationProvider(configuration));
            services.AddSingleton <IInstrumentationClient, LoggerInstrumentationClient>();
            if (loadSecretsFromConfig)
            {
                services.AddSingleton(
                    sp =>
                {
                    IObcConfigurationProvider configProvider = sp.GetService <IObcConfigurationProvider>();

                    KeySecretBuilder builder = new KeySecretBuilder();
                    return(builder.GetKeySecretProvider(
                               config: configuration,
                               obcConfig: configProvider.GetObcConfiguration()));
                });
            }
            else
            {
                services.AddSingleton <IKeySecretProvider, MemoryKeySecretProvider>();
            }

            services.AddSingleton(x => (IKeySecretReadOnlyProvider)x.GetRequiredService <IKeySecretProvider>());
            services.AddSingleton <IApiClient>(
                sp =>
            {
                IHttpClientFactory hcf = sp.GetService <IHttpClientFactory>();

                HttpClient client = hcf.CreateClient(httpClientName);

                return(new ApiClient(instrumentation: sp.GetService <IInstrumentationClient>(), httpClient: client));
            });
            services.AddSingleton <ICertificateReader, PemParsingCertificateReader>();
            services.AddSingleton <IEntityMapper, EntityMapper>();

            // Configure DB
            switch (configuration["DbProvider"])
            {
            case "Sqlite":
                services
                // See e.g. https://jasonwatmore.com/post/2020/01/03/aspnet-core-ef-core-migrations-for-multiple-databases-sqlite-and-sql-server
                .AddDbContext <BaseDbContext, SqliteDbContext>(
                    options =>
                {
                    string connectionString = configuration.GetConnectionString("SqliteDbContext");
                    options.UseSqlite(connectionString);
                });
                break;

            default:
                throw new ArgumentException(message: "Unknown DB provider", paramName: configuration["DbProvider"]);
            }

            services.AddScoped <IDbMultiEntityMethods,
                                DbMultiEntityMethods>();
            services.AddScoped <IDbEntityRepository <BankClientProfile>,
                                DbEntityRepository <BankClientProfile> >();
            services.AddScoped <IDbEntityRepository <ApiProfile>,
                                DbEntityRepository <ApiProfile> >();
            services.AddScoped <IDbEntityRepository <DomesticConsent>,
                                DbEntityRepository <DomesticConsent> >();
            services.AddSingleton <IKeySecretReadRepository <ActiveSoftwareStatementProfiles>,
                                   KeySecretReadRepository <ActiveSoftwareStatementProfiles> >();
            services.AddSingleton <IKeySecretWriteRepository <ActiveSoftwareStatementProfiles>,
                                   KeySecretWriteRepository <ActiveSoftwareStatementProfiles> >();
            services.AddSingleton <IKeySecretMultiItemWriteRepository <SoftwareStatementProfile>,
                                   KeySecretMultiItemWriteRepository <SoftwareStatementProfile> >();
            services.AddSingleton <IKeySecretMultiItemReadRepository <SoftwareStatementProfile>,
                                   KeySecretMultiItemReadRepository <SoftwareStatementProfile> >();
            services.AddSingleton <ISoftwareStatementProfileService, SoftwareStatementProfileService>();
            services.AddScoped <IOpenBankingRequestBuilder, RequestBuilder>();

            // Startup tasks
            services.AddHostedService <StartupTasksHostedService>();

            // This can be enabled in .NET 5 when SoftwareStatementProfileHostedService
            // and SocketsHttpHandler used.
            // services.AddHostedService<SoftwareStatementProfileHostedService>();

            return(services);
        }
 public CreateSoftwareStatementProfile(ISoftwareStatementProfileService softwareStatementProfileService)
 {
     _softwareStatementProfileService = softwareStatementProfileService;
 }