示例#1
0
        private void _registerServices()
        {
            // Add framework services.
            NpgsqlLogManager.IsParameterLoggingEnabled = true;

            _services.AddLogging();
            _services.AddScoped <DbConnection, NpgsqlConnection>((svc) => new NpgsqlConnection(_configuration.GetConnectionString("Default")));
            _services.AddScoped <NpgsqlConnection>((svc) => new NpgsqlConnection(_configuration.GetConnectionString("Default")));

            var signingKey    = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration.GetSection("Kroeg")["TokenSigningKey"]));
            var tokenSettings = new JwtTokenSettings
            {
                Audience             = _configuration.GetSection("Kroeg")["BaseUri"],
                Issuer               = _configuration.GetSection("Kroeg")["BaseUri"],
                ExpiryTime           = TimeSpan.FromDays(30),
                Credentials          = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
                ValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = signingKey,

                    ValidateIssuer = true,
                    ValidIssuer    = _configuration.GetSection("Kroeg")["BaseUri"],

                    ValidateAudience = true,
                    ValidAudience    = _configuration.GetSection("Kroeg")["BaseUri"],

                    ValidateLifetime = true,
                    ClockSkew        = TimeSpan.Zero
                }
            };

            _services.AddSingleton(tokenSettings);

            _services.AddSingleton(new EntityData(_configuration.GetSection("Kroeg"))
            {
                EntityNames = _configuration.GetSection("EntityNames")
            });

            _services.AddScoped <INotifier, LocalNotifier>();

            _services.AddSingleton <BackgroundTaskQueuer>();
            _services.AddSingleton(_configuration);
            _services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();

            _services.AddTransient <DeliveryService>();
            _services.AddTransient <RelevantEntitiesService>();
            _services.AddTransient <ActivityService>();
            _services.AddTransient <AtomEntryParser>();
            _services.AddTransient <AtomEntryGenerator>();

            _services.AddScoped <TripleEntityStore>();
            _services.AddScoped <CollectionTools>();
            _services.AddScoped <FakeEntityService>();
            _services.AddScoped <EntityFlattener>();
            _services.AddScoped <KeyService>();

            _services.AddScoped <IEntityStore>((provider) =>
            {
                var triple            = provider.GetRequiredService <TripleEntityStore>();
                var flattener         = provider.GetRequiredService <EntityFlattener>();
                var httpAccessor      = new _nullHttpContextAccessor();
                var fakeEntityService = provider.GetService <FakeEntityService>();
                var retrieving        = new RetrievingEntityStore(triple, flattener, provider, httpAccessor);
                return(new FakeEntityStore(fakeEntityService, retrieving));
            });
            _services.AddTransient <TemplateService>();
            _services.AddTransient <SignatureVerifier>();


            _services.AddScoped <DatabaseManager>();
            _services.AddTransient <Commands.GetCommand>();
            _services.AddTransient <Commands.AttributeCommand>();
            _services.AddTransient <Commands.TriplesCommand>();
            _services.AddTransient <Commands.RefreshCommand>();
            _services.AddTransient <Commands.CalculateVisibilityCommand>();
        }
示例#2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();


            services.AddScoped <NpgsqlConnection>((svc) => new NpgsqlConnection(Configuration.GetConnectionString("Default")));
            services.AddScoped <DbConnection, NpgsqlConnection>((svc) => svc.GetService <NpgsqlConnection>());

            services.AddTransient <IUserStore <APUser>, KroegUserStore>();
            services.AddTransient <IUserPasswordStore <APUser>, KroegUserStore>();
            services.AddTransient <IRoleStore <IdentityRole>, KroegUserStore>();

            services.AddIdentity <APUser, IdentityRole>()
            .AddDefaultTokenProviders();

            services.AddAuthorization(options =>
            {
                options.AddPolicy("admin", policy => policy.RequireClaim("admin"));
                options.AddPolicy("pass", policy => policy.AddAuthenticationSchemes(IdentityConstants.ApplicationScheme).RequireAuthenticatedUser());
            });

            services.Configure <IdentityOptions>(options =>
            {
                options.Password.RequireDigit           = false;
                options.Password.RequiredLength         = 0;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase       = false;
                options.Password.RequireLowercase       = false;
            });

            var signingKey    = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration.GetSection("Kroeg")["TokenSigningKey"]));
            var tokenSettings = new JwtTokenSettings
            {
                Audience             = Configuration.GetSection("Kroeg")["BaseUri"],
                Issuer               = Configuration.GetSection("Kroeg")["BaseUri"],
                ExpiryTime           = TimeSpan.FromDays(30),
                Credentials          = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
                ValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = signingKey,

                    ValidateIssuer = true,
                    ValidIssuer    = Configuration.GetSection("Kroeg")["BaseUri"],

                    ValidateAudience = true,
                    ValidAudience    = Configuration.GetSection("Kroeg")["BaseUri"],

                    ValidateLifetime = true,
                    ClockSkew        = TimeSpan.Zero
                }
            };

            services.AddSingleton(tokenSettings);

            services.AddSingleton(new EntityData(Configuration.GetSection("Kroeg"))
            {
                EntityNames = Configuration.GetSection("EntityNames")
            });

            services.AddScoped <INotifier, LocalNotifier>();

            services.AddSingleton(Configuration);
            services.AddTransient <IAuthorizer, DefaultAuthorizer>();

            services.AddTransient <DeliveryService>();
            services.AddTransient <RelevantEntitiesService>();
            services.AddTransient <ActivityService>();
            services.AddTransient <AtomEntryParser>();
            services.AddTransient <AtomEntryGenerator>();

            services.AddScoped <TripleEntityStore>();
            services.AddScoped <CollectionTools>();
            services.AddScoped <FakeEntityService>();
            services.AddScoped <EntityFlattener>();
            services.AddScoped <KeyService>();

            services.AddScoped <IEntityStore>((provider) =>
            {
                var triple            = provider.GetRequiredService <TripleEntityStore>();
                var flattener         = provider.GetRequiredService <EntityFlattener>();
                var httpAccessor      = provider.GetService <IHttpContextAccessor>();
                var fakeEntityService = provider.GetService <FakeEntityService>();
                var retrieving        = new RetrievingEntityStore(triple, flattener, provider, httpAccessor);
                return(new FakeEntityStore(fakeEntityService, retrieving));
            });
            services.AddSingleton <TemplateService>();
            services.AddTransient <SignatureVerifier>();

            services.AddAuthentication(o => {
                o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                o.DefaultChallengeScheme    = IdentityConstants.ApplicationScheme;
                o.DefaultSignInScheme       = IdentityConstants.ApplicationScheme;
            })
            .AddJwtBearer((options) => {
                options.TokenValidationParameters = tokenSettings.ValidationParameters;

                options.Audience     = Configuration.GetSection("Kroeg")["BaseUri"];
                options.ClaimsIssuer = Configuration.GetSection("Kroeg")["BaseUri"];
            });

            services.ConfigureApplicationCookie((options) => {
                options.Cookie.Name = "Kroeg.Auth";
                options.LoginPath   = "/auth/login";
            });

            var typeMap = new Dictionary <string, Type>();

            foreach (var module in Configuration.GetSection("Kroeg").GetSection("Modules").GetChildren())
            {
                var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(Path.Combine(Directory.GetCurrentDirectory(), module.Value));
                foreach (var type in assembly.GetTypes())
                {
                    if (type.IsSubclassOf(typeof(BaseHandler)))
                    {
                        typeMap[type.FullName] = type;
                    }
                }
            }

            foreach (var extra in Configuration.GetSection("Kroeg").GetSection("Filters").GetChildren())
            {
                if (typeMap.ContainsKey(extra.Value))
                {
                    EntityData.ExtraFilters.Add(typeMap[extra.Value]);
                }
            }

            services.AddScoped <DatabaseManager>();
        }
示例#3
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();

            services.AddDbContext <APContext>(options => options.UseNpgsql(Configuration.GetConnectionString("Default")).EnableSensitiveDataLogging());

            services.AddIdentity <APUser, IdentityRole>()
            .AddEntityFrameworkStores <APContext>()
            .AddDefaultTokenProviders();

            services.AddAuthorization(options =>
            {
                options.AddPolicy("admin", policy => policy.RequireClaim("admin"));
                options.AddPolicy("pass", policy => policy.AddAuthenticationSchemes(IdentityConstants.ApplicationScheme).RequireAuthenticatedUser());
            });

            services.Configure <IdentityOptions>(options =>
            {
                options.Password.RequireDigit           = false;
                options.Password.RequiredLength         = 0;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase       = false;
                options.Password.RequireLowercase       = false;
            });

            var signingKey    = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration.GetSection("Kroeg")["TokenSigningKey"]));
            var tokenSettings = new JwtTokenSettings
            {
                Audience             = Configuration.GetSection("Kroeg")["BaseUri"],
                Issuer               = Configuration.GetSection("Kroeg")["BaseUri"],
                ExpiryTime           = TimeSpan.FromDays(30),
                Credentials          = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
                ValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = signingKey,

                    ValidateIssuer = true,
                    ValidIssuer    = Configuration.GetSection("Kroeg")["BaseUri"],

                    ValidateAudience = true,
                    ValidAudience    = Configuration.GetSection("Kroeg")["BaseUri"],

                    ValidateLifetime = true,
                    ClockSkew        = TimeSpan.Zero
                }
            };

            services.AddSingleton(tokenSettings);

            services.AddSingleton(new EntityData(Configuration.GetSection("Kroeg"))
            {
                EntityNames = Configuration.GetSection("EntityNames")
            });

            var redis = Configuration.GetSection("Kroeg").GetValue <string>("Redis", null);

            if (!string.IsNullOrEmpty(redis))
            {
                services.AddSingleton(new RedisNotifierBase(redis));
                services.AddTransient <INotifier>((a) => ActivatorUtilities.CreateInstance <RedisNotifier>(a));
            }
            else
            {
                services.AddSingleton <INotifier>(new LocalNotifier());
            }

            services.AddSingleton <BackgroundTaskQueuer>();

            services.AddSingleton(Configuration);

            services.AddTransient <EntityFlattener>();
            services.AddTransient <CollectionTools>();
            services.AddTransient <DeliveryService>();
            services.AddTransient <RelevantEntitiesService>();
            services.AddTransient <DatabaseEntityStore>();
            services.AddTransient <ActivityService>();
            services.AddTransient <AtomEntryParser>();
            services.AddTransient <AtomEntryGenerator>();
            services.AddTransient <FakeEntityService>();
            services.AddTransient <IEntityStore>((provider) =>
            {
                var dbservice         = provider.GetRequiredService <DatabaseEntityStore>();
                var flattener         = provider.GetRequiredService <EntityFlattener>();
                var httpAccessor      = provider.GetService <IHttpContextAccessor>();
                var fakeEntityService = provider.GetService <FakeEntityService>();
                var retrieving        = new RetrievingEntityStore(dbservice, flattener, provider, httpAccessor);
                return(new FakeEntityStore(fakeEntityService, retrieving));
            });
            services.AddTransient <TemplateService>();
            services.AddTransient <SignatureVerifier>();

            services.AddAuthentication(o => {
                o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                o.DefaultChallengeScheme    = IdentityConstants.ApplicationScheme;
                o.DefaultSignInScheme       = IdentityConstants.ApplicationScheme;
            })
            .AddJwtBearer((options) => {
                options.TokenValidationParameters = tokenSettings.ValidationParameters;

                options.Audience     = Configuration.GetSection("Kroeg")["BaseUri"];
                options.ClaimsIssuer = Configuration.GetSection("Kroeg")["BaseUri"];
            });

            services.ConfigureApplicationCookie((options) => {
                options.Cookie.Name = "Kroeg.Auth";
                options.LoginPath   = "/auth/login";
            });
        }