Exemple #1
0
        public void Setup()
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            var config = TestsHelper.GetConfig();
            var env    = TestsHelper.GetEnvironment();

            var connectionString = config.GetConnectionString("DefaultConnection");
            var logPath          = config.GetValue <string>("LogPath");

            logger      = new Logger(logPath);
            tDispatcher = new Dispatcher();
            con         = new SqliteConnection("DataSource=:memory:");
            con.Open();
            dbContextOptionsBuilder = new DbContextOptionsBuilder <PuckContext>();
            dbContextOptionsBuilder
            .UseSqlite(con);
            context = new PuckContext(dbContextOptionsBuilder.Options);
            repo    = new Puck_Repository(context);
            var dbCreated       = repo.Context.Database.EnsureCreated();
            var indexerSearcher = new Content_Indexer_Searcher(logger, config, env);

            indexer                   = indexerSearcher;
            searcher                  = indexerSearcher;
            roleManager               = MockHelpers.MockRoleManager <PuckRole>().Object;
            userManager               = MockHelpers.MockUserManager().Object;
            apiHelper                 = new ApiHelper(roleManager, userManager, repo, tDispatcher, indexer, logger);
            contentService            = new ContentService(config, roleManager, userManager, repo, tDispatcher, indexer, logger, apiHelper);
            PuckCache._puckSearcher   = searcher;
            PuckCache.ServiceProvider = MockHelpers.MockServiceProvider(repo).Object;
            PuckCache.MaxRevisions    = 20;
            TestsHelper.SetAQNMappings();
            TestsHelper.SetAnalyzerMappings();
            indexer.DeleteAll();
        }
        public static void AddPuckServices(this IServiceCollection services, IHostEnvironment env, IConfiguration config)
        {
            PuckCache.ContentRootPath = env.ContentRootPath;
            var logger          = new Logger();
            var indexerSearcher = new Content_Indexer_Searcher(logger, config, env);

            services.AddTransient <I_Puck_Repository, Puck_Repository>();
            services.AddSingleton <I_Content_Indexer>(indexerSearcher);
            services.AddSingleton <I_Content_Searcher>(indexerSearcher);
            services.AddTransient <I_Log, Logger>();
            services.AddSingleton <I_Task_Dispatcher, Dispatcher>();
            services.AddTransient <I_Api_Helper, ApiHelper>();
            services.AddTransient <I_Log_Helper, LogHelper>();
            services.AddTransient <I_Content_Service, ContentService>();
            services.AddHostedService <Dispatcher>((IServiceProvider serviceProvider) => { return(serviceProvider.GetService <I_Task_Dispatcher>() as Dispatcher); });
        }
Exemple #3
0
        public Services GetServices(string type)
        {
            if (ServiceDictionary.ContainsKey(type))
            {
                PuckCache.ServiceProvider = MockHelpers.MockServiceProvider(ServiceDictionary[type].Repo).Object;
                PuckCache._puckSearcher   = ServiceDictionary[type].Searcher;
                return(ServiceDictionary[type]);
            }

            var services = new Models.Services();

            var config = TestsHelper.GetConfig();
            var env    = TestsHelper.GetEnvironment();

            var connectionString = config.GetConnectionString(type);
            var logPath          = config.GetValue <string>("LogPath");

            services.Logger      = new Logger(logPath);
            services.TDispatcher = new Dispatcher();
            if (type == DbConstants.SQLite)
            {
                services.Con = new SqliteConnection(connectionString);
                services.Con.Open();
                services.DbContextOptionsBuilder = new DbContextOptionsBuilder <PuckContext>();
                services.DbContextOptionsBuilder
                .UseSqlite(services.Con);
            }
            else if (type == DbConstants.MySql)
            {
                services.DbContextOptionsBuilder = new DbContextOptionsBuilder <PuckContext>();
                services.DbContextOptionsBuilder
                .UseMySql(connectionString, ServerVersion.AutoDetect(connectionString));
            }
            else if (type == DbConstants.PostgreSQL)
            {
                services.DbContextOptionsBuilder = new DbContextOptionsBuilder <PuckContext>();
                services.DbContextOptionsBuilder
                .UseNpgsql(connectionString);
            }
            else if (type == DbConstants.SQLServer)
            {
                services.DbContextOptionsBuilder = new DbContextOptionsBuilder <PuckContext>();
                services.DbContextOptionsBuilder
                .UseSqlServer(connectionString);
            }
            services.Context = new PuckContext(services.DbContextOptionsBuilder.Options);
            services.Repo    = new Puck_Repository(services.Context);

            if (services.Repo.Context.Database.GetService <IRelationalDatabaseCreator>().Exists())
            {
                var dbDeleted = services.Repo.Context.Database.EnsureDeleted();
            }
            var dbCreated = services.Repo.Context.Database.EnsureCreated();
            Content_Indexer_Searcher indexerSearcher = null;

            if (ServiceDictionary.Any(x => x.Value.Indexer != null))
            {
                indexerSearcher = ServiceDictionary.Where(x => x.Value.Indexer != null).FirstOrDefault().Value.Indexer as Content_Indexer_Searcher;
            }
            else
            {
                indexerSearcher = new Content_Indexer_Searcher(services.Logger, config, env);
            }
            services.Indexer        = indexerSearcher;
            services.Searcher       = indexerSearcher;
            services.RoleManager    = MockHelpers.MockRoleManager <PuckRole>().Object;
            services.UserManager    = MockHelpers.MockUserManager().Object;
            services.ApiHelper      = new ApiHelper(services.RoleManager, services.UserManager, services.Repo, services.TDispatcher, services.Indexer, services.Logger, config);
            services.ContentService = new ContentService(config, services.RoleManager, services.UserManager, services.Repo, services.TDispatcher, services.Indexer, services.Logger, services.ApiHelper, new MemoryCache(new MemoryCacheOptions()
            {
                SizeLimit = null
            }));
            PuckCache._puckSearcher   = services.Searcher;
            PuckCache.ServiceProvider = MockHelpers.MockServiceProvider(services.Repo).Object;
            PuckCache.MaxRevisions    = 20;
            TestsHelper.SetAQNMappings();
            TestsHelper.SetAnalyzerMappings();
            ServiceDictionary[type] = services;
            return(services);
        }
        public static void AddPuckServices <TUser, TRole, TDbContext>(this IServiceCollection services, IHostEnvironment env, IConfiguration config, ServiceLifetime dbContextLifetime
                                                                      , Action <CookieAuthenticationOptions> configureCookieAuthenticationOptions = null, Action <IdentityOptions> configureIdentityOptions = null
                                                                      , Action <IdentityBuilder> configureIdentityBuilder = null)
            where TDbContext : DbContext where TUser : IdentityUser where TRole : IdentityRole
        {
            PuckCache.ContentRootPath = env.ContentRootPath;
            var logger          = new Logger();
            var indexerSearcher = new Content_Indexer_Searcher(logger, config, env);

            services.AddTransient <I_Puck_Repository, Puck_Repository>();
            services.AddSingleton <I_Content_Indexer>(indexerSearcher);
            services.AddSingleton <I_Content_Searcher>(indexerSearcher);
            services.AddTransient <I_Log, Logger>();
            services.AddSingleton <I_Task_Dispatcher, Dispatcher>();
            services.AddTransient <I_Api_Helper, ApiHelper>();
            services.AddTransient <I_Log_Helper, LogHelper>();
            services.AddTransient <I_Content_Service, ContentService>();
            services.AddHostedService <Dispatcher>((IServiceProvider serviceProvider) => { return(serviceProvider.GetService <I_Task_Dispatcher>() as Dispatcher); });
            services.AddScoped <PuckCookieAuthenticationEvents>();

            //services.AddDefaultIdentity<PuckUser>(options => { options.SignIn.RequireConfirmedAccount = false; })
            services.AddAuthentication(o =>
            {
                o.DefaultScheme       = IdentityConstants.ApplicationScheme;
                o.DefaultSignInScheme = IdentityConstants.ExternalScheme;
            }).AddIdentityCookies(o => {
                o.ApplicationCookie.Configure(x => {
                    x.EventsType = typeof(PuckCookieAuthenticationEvents);
                    configureCookieAuthenticationOptions?.Invoke(x);
                });
            });

            var identityBuilder = services.AddIdentityCore <PuckUser>(o =>
            {
                o.Stores.MaxLengthForKeys        = 128;
                o.SignIn.RequireConfirmedAccount = false;
            })
                                  .AddDefaultTokenProviders()
                                  .AddRoles <PuckRole>();

            services.AddScoped <ISecurityStampValidator, SecurityStampValidator <TUser> >();
            services.AddScoped <ISecurityStampValidator, SecurityStampValidator <PuckUser> >();

            if (config.GetValue <bool?>("UseSQLServer") ?? false)
            {
                services.AddEntityFrameworkSqlServer().AddDbContext <PuckContextSQLServer>(optionsLifetime: ServiceLifetime.Transient);
                identityBuilder.AddEntityFrameworkStores <PuckContextSQLServer>();
                services.AddTransient <I_Puck_Context>(x => x.GetService <PuckContextSQLServer>());
                //add front end db context and identity
                services.AddDbContext <TDbContext>(x => x.UseSqlServer(config.GetConnectionString("SQLServer")), optionsLifetime: dbContextLifetime);
                var identBuilder = services.AddIdentityCore <TUser>(options => {
                    options.SignIn.RequireConfirmedAccount = false;
                    configureIdentityOptions?.Invoke(options);
                })
                                   .AddRoles <TRole>()
                                   .AddEntityFrameworkStores <TDbContext>();
                configureIdentityBuilder?.Invoke(identBuilder);
            }
            else if (config.GetValue <bool?>("UsePostgreSQL") ?? false)
            {
                services.AddEntityFrameworkNpgsql().AddDbContext <PuckContextPostgreSQL>(optionsLifetime: ServiceLifetime.Transient);
                identityBuilder.AddEntityFrameworkStores <PuckContextPostgreSQL>();
                services.AddTransient <I_Puck_Context>(x => x.GetService <PuckContextPostgreSQL>());
                //add front end db context and identity
                services.AddDbContext <TDbContext>(x => x.UseNpgsql(config.GetConnectionString("PostgreSQL")), optionsLifetime: dbContextLifetime);
                var identBuilder = services.AddIdentityCore <TUser>(options => {
                    options.SignIn.RequireConfirmedAccount = false;
                    configureIdentityOptions?.Invoke(options);
                })
                                   .AddRoles <TRole>()
                                   .AddEntityFrameworkStores <TDbContext>();
                configureIdentityBuilder?.Invoke(identBuilder);
            }
            else if (config.GetValue <bool?>("UseMySQL") ?? false)
            {
                services.AddEntityFrameworkMySql().AddDbContext <PuckContextMySQL>(optionsLifetime: ServiceLifetime.Transient);
                identityBuilder.AddEntityFrameworkStores <PuckContextMySQL>();
                services.AddTransient <I_Puck_Context>(x => x.GetService <PuckContextMySQL>());
                //add front end db context and identity
                services.AddDbContext <TDbContext>(x => x.UseMySql(config.GetConnectionString("MySQL"), ServerVersion.AutoDetect(config.GetConnectionString("MySQL"))), optionsLifetime: dbContextLifetime);
                var identBuilder = services.AddIdentityCore <TUser>(options => {
                    options.SignIn.RequireConfirmedAccount = false;
                    configureIdentityOptions?.Invoke(options);
                })
                                   .AddRoles <TRole>()
                                   .AddEntityFrameworkStores <TDbContext>();
                configureIdentityBuilder?.Invoke(identBuilder);
            }
            else if (config.GetValue <bool?>("UseSQLite") ?? false)
            {
                services.AddEntityFrameworkSqlite().AddDbContext <PuckContextSQLite>(optionsLifetime: ServiceLifetime.Transient);
                identityBuilder.AddEntityFrameworkStores <PuckContextSQLite>();
                services.AddTransient <I_Puck_Context>(x => x.GetService <PuckContextSQLite>());
                //add front end db context and identity
                services.AddDbContext <TDbContext>(x => x.UseSqlite(config.GetConnectionString("SQLite")), optionsLifetime: dbContextLifetime);
                var identBuilder = services.AddIdentityCore <TUser>(options => {
                    options.SignIn.RequireConfirmedAccount = false;
                    configureIdentityOptions?.Invoke(options);
                })
                                   .AddRoles <TRole>()
                                   .AddEntityFrameworkStores <TDbContext>();
                configureIdentityBuilder?.Invoke(identBuilder);
            }

            services.AddAuthentication()
            .AddCookie(puck.core.Constants.Mvc.AuthenticationScheme, options => {
                options.LoginPath           = "/puck/admin/in";
                options.LogoutPath          = "/puck/admin/out";
                options.AccessDeniedPath    = "/puck/admin/in";
                options.ForwardAuthenticate = IdentityConstants.ApplicationScheme;
            });

            services.AddScoped <SignInManager <PuckUser> >();
            services.AddScoped <SignInManager <TUser> >();
            services.AddScoped <IUserClaimsPrincipalFactory <PuckUser>, PuckClaimsPrincipalFactory>();
        }