private static IGrandIdAuthenticationBuilder AddGrandIdApiClient(this IGrandIdAuthenticationBuilder builder, string apiKey, string bankIdServiceKey)
        {
            builder.AuthenticationBuilder.Services.TryAddTransient(x => new GrandIdApiClientConfiguration(apiKey, bankIdServiceKey));
            builder.AuthenticationBuilder.Services.TryAddTransient <IGrandIdApiClient, GrandIdApiClient>();

            return(builder);
        }
        internal static IGrandIdAuthenticationBuilder AddBankIdScheme(this IGrandIdAuthenticationBuilder builder, string authenticationScheme, string displayName, PathString callpackPath, GrandIdBankIdMode mode, Action <GrandIdBankIdAuthenticationOptions> configureOptions)
        {
            builder.AuthenticationBuilder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IPostConfigureOptions <GrandIdBankIdAuthenticationOptions>, GrandIdBankIdAuthenticationPostConfigureOptions>());
            builder.AuthenticationBuilder.Services.Configure <GrandIdBankIdAuthenticationOptions>(authenticationScheme, options =>
            {
                options.CallbackPath      = callpackPath;
                options.GrandIdBankIdMode = mode;
            });

            builder.AuthenticationBuilder.AddScheme <GrandIdBankIdAuthenticationOptions, GrandIdBankIdAuthenticationHandler>(
                authenticationScheme,
                displayName,
                configureOptions
                );

            return(builder);
        }
        private static IGrandIdAuthenticationBuilder UseEnvironment(this IGrandIdAuthenticationBuilder builder, Uri apiBaseUrl, Action <IGrandIdEnvironmentConfiguration> configuration)
        {
            var environmentConfiguration = new GrandIdEnvironmentConfiguration();

            configuration(environmentConfiguration);

            if (string.IsNullOrEmpty(environmentConfiguration.ApiKey))
            {
                throw new InvalidOperationException($"A valid '{nameof(environmentConfiguration.ApiKey)}' must be provided.'");
            }

            builder.EnableHttpClient();
            builder.ConfigureHttpClient(httpClient =>
            {
                httpClient.BaseAddress = apiBaseUrl;
            });

            builder.AddGrandIdApiClient(environmentConfiguration.ApiKey, environmentConfiguration.BankIdServiceKey);

            return(builder);
        }
 public static IGrandIdAuthenticationBuilder AddBankIdChooseDevice(this IGrandIdAuthenticationBuilder builder, string authenticationScheme, string displayName, Action <GrandIdBankIdAuthenticationOptions> configureOptions)
 => AddBankIdScheme(builder, authenticationScheme, displayName, GrandIdAuthenticationDefaults.BankIdChooseDeviceCallpackPath, GrandIdBankIdMode.ChooseDevice, configureOptions);
 public static IGrandIdAuthenticationBuilder AddBankIdChooseDevice(this IGrandIdAuthenticationBuilder builder, Action <GrandIdBankIdAuthenticationOptions> configureOptions)
 => AddBankIdChooseDevice(builder, GrandIdAuthenticationDefaults.BankIdChooseDeviceAuthenticationScheme, GrandIdAuthenticationDefaults.BankIdChooseDeviceDisplayName, configureOptions);
 public static IGrandIdAuthenticationBuilder AddBankIdChooseDevice(this IGrandIdAuthenticationBuilder builder)
 => AddBankIdChooseDevice(builder, options => { });
 /// <summary>
 /// Configures options that will apply to all GrandID BankID schemes.
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="configureOptions"></param>
 /// <returns></returns>
 public static IGrandIdAuthenticationBuilder ConfigureBankId(this IGrandIdAuthenticationBuilder builder, Action <GrandIdBankIdAuthenticationOptions> configureOptions)
 {
     builder.AuthenticationBuilder.Services.ConfigureAll(configureOptions);
     return(builder);
 }
        private static IGrandIdAuthenticationBuilder UseSimulatedEnvironment(this IGrandIdAuthenticationBuilder builder, Func <IServiceProvider, IGrandIdApiClient> grandIdDevelopmentApiClient)
        {
            builder.AuthenticationBuilder.Services.TryAddSingleton(grandIdDevelopmentApiClient);

            return(builder);
        }
 public static IGrandIdAuthenticationBuilder UseSimulatedEnvironment(this IGrandIdAuthenticationBuilder builder, string givenName, string surname, string personalIdentityNumber)
 => UseSimulatedEnvironment(builder, x => new GrandIdSimulatedApiClient(givenName, surname, personalIdentityNumber));
 /// <summary>
 /// Configures the GrandID client to a simulated, in memory implementation for development and/or test purposes.
 /// </summary>
 /// <param name="builder"></param>
 /// <returns></returns>
 public static IGrandIdAuthenticationBuilder UseSimulatedEnvironment(this IGrandIdAuthenticationBuilder builder)
 => UseSimulatedEnvironment(builder, x => new GrandIdSimulatedApiClient());
 /// <summary>
 /// Configures the GrandID client to use the production endpoint of GrandID REST API.
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="configuration">Configure GrandID.</param>
 /// <returns></returns>
 public static IGrandIdAuthenticationBuilder UseProductionEnvironment(this IGrandIdAuthenticationBuilder builder, Action <IGrandIdEnvironmentConfiguration> configuration)
 {
     return(builder.UseEnvironment(GrandIdUrls.ProductionApiBaseUrl, configuration));
 }