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); }); }
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>(); }