コード例 #1
0
 public static IServiceCollection AddBewitFilter(
     this IServiceCollection services,
     BewitOptions options,
     Action <BewitPayloadContext> payloadBuilder)
 {
     return(services.AddBewitFilter(options, rb => { }, payloadBuilder));
 }
コード例 #2
0
        public static IServiceCollection AddBewitFilter(
            this IServiceCollection services,
            IConfiguration configuration)
        {
            BewitOptions options = configuration.GetSection("Bewit").Get <BewitOptions>();

            return(services.AddBewitFilter(options, rb => { }, pb => { }));
        }
コード例 #3
0
        public static IRequestExecutorBuilder UseBewitAuthorization(
            this IRequestExecutorBuilder builder,
            IConfiguration configuration)
        {
            BewitOptions options = configuration.GetSection("Bewit").Get <BewitOptions>();

            return(builder.UseBewitAuthorization(options, build => { }));
        }
コード例 #4
0
        public static IServiceCollection AddBewitEndpointAuthorization(
            this IServiceCollection services,
            IConfiguration configuration)
        {
            BewitOptions options = configuration.GetSection("Bewit").Get <BewitOptions>();

            return(services.AddBewitEndpointAuthorization(options));
        }
コード例 #5
0
        public static IServiceCollection AddBewitFilter(
            this IServiceCollection services,
            IConfiguration configuration,
            Action <BewitPayloadContext> payloadBuilder)
        {
            BewitOptions options = configuration.GetSection("Bewit").Get <BewitOptions>();

            return(services.AddBewitFilter(options, rb => { }, payloadBuilder));
        }
コード例 #6
0
        public static IServiceCollection AddBewitValidation(
            this IServiceCollection services,
            IConfiguration configuration,
            Action <BewitRegistrationBuilder> build)
        {
            BewitOptions options = configuration.GetSection("Bewit").Get <BewitOptions>();

            return(services.AddBewitValidation(options, build));
        }
コード例 #7
0
 public static IServiceCollection AddBewitValidation <TPayload>(
     this IServiceCollection services,
     BewitOptions options)
 {
     return(services.AddBewitValidation(options, builder =>
     {
         builder.AddPayload <TPayload>();
     }));
 }
コード例 #8
0
 public static IServiceCollection AddBewitGeneration <TPayload>(
     this IServiceCollection services,
     BewitOptions options)
 {
     return(services.AddBewitGeneration(options, registrationBuilder =>
     {
         registrationBuilder.AddPayload <TPayload>();
     }));
 }
コード例 #9
0
        public static IServiceCollection AddBewitUrlAuthorizationFilter(
            this IServiceCollection services,
            IConfiguration configuration,
            Action <BewitRegistrationBuilder> registrationBuilder,
            Action <BewitPayloadContext> payloadBuilder)
        {
            BewitOptions options = configuration.GetSection("Bewit").Get <BewitOptions>();

            return(services.AddBewitUrlAuthorizationFilter(options, registrationBuilder, payloadBuilder));
        }
コード例 #10
0
        public static IRequestExecutorBuilder UseBewitAuthorization(
            this IRequestExecutorBuilder builder,
            BewitOptions options,
            Action <BewitRegistrationBuilder> build)
        {
            builder
            .UseRequest <BewitTokenHeaderRequestMiddleware>()
            .Services
            .AddBewitValidation(options, build);

            return(builder);
        }
コード例 #11
0
        public static IServiceCollection AddBewitGeneration <TPayload>(
            this IServiceCollection services,
            IConfiguration configuration,
            Action <BewitRegistrationBuilder> build)
        {
            BewitOptions options = configuration.GetSection("Bewit").Get <BewitOptions>();

            return(services.AddBewitGeneration(options, registrationBuilder =>
            {
                registrationBuilder.AddPayload <TPayload>();
                build(registrationBuilder);
            }));
        }
コード例 #12
0
 public static IServiceCollection AddBewitUrlAuthorizationFilter(
     this IServiceCollection services,
     BewitOptions options,
     Action <BewitRegistrationBuilder> registrationBuilder,
     Action <BewitPayloadContext> payloadBuilder)
 {
     services.AddBewitValidation(options, b =>
     {
         payloadBuilder(b.AddPayload <string>());
         registrationBuilder(b);
     });
     services.AddTransient <BewitUrlAuthorizationAttribute>();
     return(services);
 }
コード例 #13
0
ファイル: Startup.cs プロジェクト: SwissLife-OSS/bewit
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services
            // Add some sample data
            .AddSingleton(new DocumentsRepository(
                              new List <Document>
            {
                new Document(
                    "hello_world.pdf",
                    "application/pdf")
            }));

            var bewitOptions = new BewitOptions
            {
                TokenDuration = TimeSpan.FromMinutes(5),
                Secret        = "ax54Z$tgs87454"
            };

            // Add support for generating bewits in the GraphQL Api
            services.AddBewitGeneration(
                bewitOptions,
                builder =>
            {
                builder.AddPayload <FooPayload>();
                builder.AddPayload <BarPayload>().UseMongoPersistence(new MongoNonceOptions
                {
                    ConnectionString = "mongodb://localhost:27017"
                });
            });

            services.AddHttpContextAccessor();

            // Add GraphQL Services
            services
            .AddGraphQLServer()
            .AddQueryType <QueryType>()
            .AddMutationType <MutationType>()
            .AddType <DocumentType>()
            .UseBewitAuthorization(bewitOptions, builder =>
            {
                builder.AddPayload <FooPayload>();
                builder.AddPayload <BarPayload>().UseMongoPersistence(new MongoNonceOptions
                {
                    ConnectionString = "mongodb://localhost:27017"
                });
            });

            services.AddRouting();
        }
コード例 #14
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            var bewitOptions = new BewitOptions
            {
                TokenDuration = TimeSpan.FromMinutes(5),
                Secret        = "ax54Z$tgs87454"
            };

            // Add support for generating bewits
            services.AddBewitGeneration <string>(bewitOptions);

            // Add support for endpoint authorization
            services.AddBewitEndpointAuthorization(bewitOptions);

            services.AddRouting();
        }
コード例 #15
0
        public void Constructor_WithTokenDurationInitialization_ShouldConstruct()
        {
            //Arrange
            const string secret = "123";

            //Act
            var options = new BewitOptions
            {
                Secret        = secret,
                TokenDuration = TimeSpan.FromMinutes(2)
            };

            //Assert
            options.Should().NotBeNull();
            options.Secret.Should().Be(secret);
            options.TokenDuration.Should().Be(TimeSpan.FromMinutes(2));
        }
コード例 #16
0
        public void Constructor_OnlyMandatoryParameters_ShouldConstruct()
        {
            //Arrange
            const string secret = "123";

            //Act

            var options = new BewitOptions
            {
                Secret = secret
            };

            //Assert
            options.Should().NotBeNull();
            options.Secret.Should().Be(secret);
            options.TokenDuration.Should().Be(TimeSpan.FromMinutes(1));
        }
コード例 #17
0
        public static async Task <string> CreateBadToken()
        {
            var bewitOptions = new BewitOptions
            {
                Secret = "badSecret", TokenDuration = TimeSpan.FromMinutes(5)
            };

            ServiceProvider serviceProvider = new ServiceCollection()
                                              .AddBewitGeneration(bewitOptions, b => b.AddPayload <string>())
                                              .BuildServiceProvider();

            IBewitTokenGenerator <string> bewitGenerator = serviceProvider
                                                           .GetService <IBewitTokenGenerator <string> >();

            return((await bewitGenerator
                    .GenerateBewitTokenAsync("badPayload", default))
                   .ToString());
        }
コード例 #18
0
        public void FromConfiguration_WithAllKeys_ShouldBindAllKeys()
        {
            //Arrange
            IConfiguration config = new ConfigurationBuilder()
                                    .AddInMemoryCollection(new[]
            {
                new KeyValuePair <string, string>("Secret", "123"),
                new KeyValuePair <string, string>("TokenDuration", "2.03:00:00")
            }).Build();

            //Act
            BewitOptions options = config.Get <BewitOptions>();

            //Assert
            options.Should().NotBeNull();
            options.Secret.Should().Be("123");
            options.TokenDuration.Should().Be(TimeSpan.FromDays(2) + TimeSpan.FromHours(3));
        }
コード例 #19
0
        public static IServiceCollection AddBewitGeneration(
            this IServiceCollection services,
            BewitOptions options,
            Action <BewitRegistrationBuilder> build)
        {
            options.Validate();

            var builder = new BewitRegistrationBuilder();

            build(builder);

            services.TryAddSingleton(options);
            services.TryAddSingleton <ICryptographyService, HmacSha256CryptographyService>();
            services.TryAddSingleton <IVariablesProvider, VariablesProvider>();
            services.TryAddSingleton <INonceRepository, DefaultNonceRepository>();

            foreach (BewitPayloadContext context in builder.Payloads)
            {
                if (context.CreateRepository == default)
                {
                    context.SetRepository(() => new DefaultNonceRepository());
                }

                if (context.CreateCryptographyService == default)
                {
                    context.SetCryptographyService(() => new HmacSha256CryptographyService(options));
                }

                if (context.CreateVariablesProvider == default)
                {
                    context.SetVariablesProvider(() => new VariablesProvider());
                }

                Type implementation      = typeof(BewitTokenGenerator <>);
                Type typedImplementation = implementation.MakeGenericType(context.Type);
                Type service             = typeof(IBewitTokenGenerator <>);
                Type typedService        = service.MakeGenericType(context.Type);

                services.AddSingleton(typedService, sp => ActivatorUtilities
                                      .CreateInstance(sp, typedImplementation, context));
            }

            return(services);
        }
コード例 #20
0
        internal static TestServer CreateServer <T>(BewitOptions options)
        {
            NonceRepository   = new DefaultNonceRepository();
            VariablesProvider = new MockedVariablesProvider();

            IWebHostBuilder hostBuilder = new WebHostBuilder()
                                          .ConfigureServices(services =>
            {
                services.AddMvc();
                services
                .AddTransient <BewitAttribute>()
                .AddSingleton(options)
                .AddBewitValidation(options, b => b.AddPayload <T>()
                                    .SetVariablesProvider(() => VariablesProvider));
            })
                                          .Configure(app => app.UseRouting().UseEndpoints(c => c.MapControllers()));
            var server = new TestServer(hostBuilder);

            return(server);
        }
コード例 #21
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services
            // Add some sample data
            .AddSingleton(new DocumentsRepository(
                              new List <Document>
            {
                new Document(
                    "hello_world.pdf",
                    ReadEmbeddedResource("Host.Files.hello_world.pdf"),
                    "application/pdf")
            }));

            var bewitOptions = new BewitOptions
            {
                TokenDuration = TimeSpan.FromMinutes(5),
                Secret        = "ax54Z$tgs87454"
            };

            // Add support for generating bewits in the GraphQL Api
            services.AddBewitGeneration(
                bewitOptions,
                builder => builder.AddPayload <string>());

            // Add support for validating bewits in the Mvc Api
            services.AddBewitUrlAuthorizationFilter(
                bewitOptions,
                builder => { });

            // Add GraphQL Services
            services
            .AddGraphQLServer()
            .AddQueryType <Query>()
            .AddMutationType <MutationType>()
            .AddType <DocumentType>();

            //Add MVC Services
            services.AddControllers();

            services.AddRouting();
        }
コード例 #22
0
        public BewitTokenGenerator(
            BewitOptions options,
            BewitPayloadContext context)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

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

            _tokenDuration       = options.TokenDuration;
            _cryptographyService = context.CreateCryptographyService?.Invoke()
                                   ?? throw new ArgumentNullException(nameof(BewitPayloadContext.CreateCryptographyService));
            _variablesProvider = context.CreateVariablesProvider?.Invoke()
                                 ?? throw new ArgumentNullException(nameof(BewitPayloadContext.CreateVariablesProvider));
            _repository = context.CreateRepository?.Invoke()
                          ?? throw new ArgumentNullException(nameof(BewitPayloadContext.CreateRepository));
        }
コード例 #23
0
 public static IServiceCollection AddBewitValidation(
     this IServiceCollection services,
     BewitOptions options)
 {
     return(services.AddBewitValidation(options, build => { }));
 }
コード例 #24
0
 public static IServiceCollection AddBewitEndpointAuthorization(
     this IServiceCollection services,
     BewitOptions options)
 {
     return(services.AddBewitValidation <string>(options));
 }
コード例 #25
0
 public static IRequestExecutorBuilder UseBewitAuthorization(
     this IRequestExecutorBuilder builder,
     BewitOptions options)
 {
     return(builder.UseBewitAuthorization(options, build => { }));
 }