/// <summary> /// Initializes a new instance of the <see cref="LoggerContext"/> class. /// </summary> /// <param name="options"></param> /// <param name="httpContextAccessor"></param> /// <param name="optionsAccessor"></param> public LoggerContext( DbContextOptions <LoggerContext> options, IHttpContextAccessor httpContextAccessor, IOptions <EmOptions> optionsAccessor) : base(options) { this.httpContextAccessor = httpContextAccessor; this.options = optionsAccessor.Value; }
/// <summary> /// Add external Emeraude files options /// </summary> /// <param name="options"></param> /// <param name="filesOptionsAction"></param> public static void ConfigureFilesInfrastructure( this EmOptions options, Action <EmFilesOptions> filesOptionsAction) { EmFilesOptions filesOptions = new EmFilesOptions(); filesOptionsAction.Invoke(filesOptions); options.AddExternalOptions(filesOptions); }
/// <summary> /// Apply Emeraude base options. In case you want to override the method check the documentation first. /// </summary> /// <param name="options"></param> public static void ApplyEmeraudeBaseOptions(this EmOptions options) { options.AddAssembly("Definux.Emeraude.Admin"); options.AddAssembly("Definux.Emeraude.Admin.ClientBuilder"); options.AddAssembly("Definux.Emeraude.Client"); options.AddAssembly("Definux.Emeraude.Application"); options.AddDatabaseInitializer <IApplicationDatabaseInitializer>(); options.SetEmeraudeAssembly(Assembly.GetExecutingAssembly()); }
/// <summary> /// Initializes a new instance of the <see cref="ApplicationDatabaseInitializer"/> class. /// </summary> /// <param name="context"></param> /// <param name="userManager"></param> /// <param name="roleManager"></param> /// <param name="optionsAccessor"></param> public ApplicationDatabaseInitializer( IEmContext context, IUserManager userManager, IRoleManager roleManager, IOptions <EmOptions> optionsAccessor) { this.context = context; this.userManager = userManager; this.roleManager = roleManager; this.options = optionsAccessor.Value; }
/// <summary> /// Initializes a new instance of the <see cref="AdminManageController"/> class. /// </summary> /// <param name="userManager"></param> /// <param name="urlEncoder"></param> /// <param name="twoFactorAuthenticationService"></param> /// <param name="optionsAccessor"></param> public AdminManageController( UserManager <User> userManager, UrlEncoder urlEncoder, ITwoFactorAuthenticationService twoFactorAuthenticationService, IOptions <EmOptions> optionsAccessor) { this.userManager = userManager; this.urlEncoder = urlEncoder; this.twoFactorAuthenticationService = twoFactorAuthenticationService; this.options = optionsAccessor.Value; }
/// <summary> /// Register required services for Emeraude localization. /// </summary> /// <param name="services"></param> /// <param name="options"></param> /// <returns></returns> public static IServiceCollection RegisterEmeraudeLocalization(this IServiceCollection services, EmOptions options) { if (!options.TestMode) { services.AddDbContext <LocalizationContext>(options => options.UseSqlite( connectionString: LocalesDatabaseSqlLiteConnectionString, sqliteOptionsAction: b => b.MigrationsAssembly(AssemblyInfo.GetAssembly().FullName))); } else { services.AddDbContext <LocalizationContext>(opt => opt.UseInMemoryDatabase(databaseName: "test_localization_database")); } services.AddScoped <ICurrentLanguageProvider, CurrentLanguageProvider>(); services.AddScoped <ILocalizationContext, LocalizationContext>(); services.AddScoped <ILocalizer, Localizer>(); services.AddScoped <IEmLocalizer, Localizer>(); services.AddScoped <ILanguageStore, LanguageStore>(); if (options.ExecuteMigrations) { try { var serviceProvider = services.BuildServiceProvider(); serviceProvider.GetService <LocalizationContext>().Database.Migrate(); } catch (Exception) { } } return(services); }
/// <summary> /// Add external m /// </summary> /// <param name="options"></param> /// <param name="seoOptionsAction"></param> public static void ConfigureSeo( this EmOptions options, Action <DefinuxSeoOptions> seoOptionsAction) { options.AddExternalOptions(seoOptionsAction); }
/// <summary> /// Register Emeraude logger feature elements and services. /// </summary> /// <param name="services"></param> /// <param name="configuration"></param> /// <param name="options"></param> /// <returns></returns> public static IServiceCollection RegisterEmeraudeLogger(this IServiceCollection services, IConfiguration configuration, EmOptions options) { string connectionString = configuration.GetConnectionString(LoggerConnectionStringKey); switch (options.LoggerContextProvider) { case DatabaseContextProvider.MicrosoftSqlServer: services.AddDbContext <LoggerContext>(contextOptions => contextOptions.UseSqlServer( connectionString, b => b.MigrationsAssembly(options.MigrationsAssembly))); break; case DatabaseContextProvider.PostgreSql: services.AddDbContext <LoggerContext>(contextOptions => contextOptions.UseNpgsql( connectionString, b => b.MigrationsAssembly(options.MigrationsAssembly))); break; case DatabaseContextProvider.InMemoryDatabase: services.AddDbContext <LoggerContext>(contextOptions => contextOptions.UseInMemoryDatabase(databaseName: "InMemoryLoggerContextDatabase")); break; } services.AddScoped <ILoggerContext, LoggerContext>(); if (!options.UseExternalLoggerImplementation) { services.AddScoped <ILogger, Logger>(); services.AddScoped <IEmLogger, Logger>(); } if (options.ExecuteMigrations) { try { var serviceProvider = services.BuildServiceProvider(); serviceProvider.GetService <LoggerContext>().Database.Migrate(); } catch (Exception) { } } return(services); }
/// <summary> /// Configures Emeraude database. /// </summary> /// <typeparam name="TContextInterface">Interface of the application database context.</typeparam> /// <typeparam name="TContextImplementation">Implementation of the application database context.</typeparam> /// <param name="services"></param> /// <param name="configuration"></param> /// <param name="options"></param> /// <returns></returns> public static IServiceCollection ConfigureDatabases <TContextInterface, TContextImplementation>(this IServiceCollection services, IConfiguration configuration, EmOptions options) where TContextInterface : class, IEmContext where TContextImplementation : EmContext <TContextImplementation>, TContextInterface { string connectionString = configuration.GetConnectionString(DatabaseConnectionStringKey); switch (options.DatabaseContextProvider) { case DatabaseContextProvider.MicrosoftSqlServer: services.AddDbContext <TContextImplementation>(contextOptions => contextOptions.UseSqlServer( connectionString, b => b.MigrationsAssembly(options.MigrationsAssembly))); break; case DatabaseContextProvider.PostgreSql: services.AddDbContext <TContextImplementation>(contextOptions => contextOptions.UseNpgsql( connectionString, b => b.MigrationsAssembly(options.MigrationsAssembly))); break; case DatabaseContextProvider.InMemoryDatabase: services.AddDbContext <TContextImplementation>(contextOptions => contextOptions.UseInMemoryDatabase(databaseName: "InMemoryEntityContextDatabase")); break; } services.AddScoped <IEmContext, TContextImplementation>(); services.AddScoped <TContextInterface, TContextImplementation>(); services.AddTransient <IDatabaseInitializerManager, DatabaseInitializerManager>(); if (options.ExecuteMigrations) { try { var serviceProvider = services.BuildServiceProvider(); serviceProvider.GetService <TContextImplementation>().Database.Migrate(); } catch (Exception) { } } return(services); }
/// <summary> /// Configure Emeraude framework required services and functionalities. /// </summary> /// <typeparam name="TContextInterface">Interface of the application database context.</typeparam> /// <typeparam name="TContextImplementation">Implementation of the application database context.</typeparam> /// <param name="services"></param> /// <param name="optionsAction"></param> /// <returns></returns> public static EmeraudeSettingsBuilder AddEmeraude <TContextInterface, TContextImplementation>( this IServiceCollection services, Action <EmOptions> optionsAction = null) where TContextInterface : class, IEmContext where TContextImplementation : EmContext <TContextImplementation>, TContextInterface { var settingsBuilder = new EmeraudeSettingsBuilder { Services = services, }; var options = new EmOptions(); optionsAction?.Invoke(options); var applicationAssembly = Assembly.GetCallingAssembly().GetName().Name; var serviceProvider = services.BuildServiceProvider(); var configuration = serviceProvider.GetService <IConfiguration>(); services.RegisterEmeraudeOptions(optionsAction); services.AddHttpContextAccessor(); services.ConfigureDatabases <TContextInterface, TContextImplementation>(configuration, options); services.ConfigureMapper(applicationAssembly, options.Mapping); services.ConfigureIdentityOptions <TContextImplementation>(); services.ConfigureRazorViews(); settingsBuilder.AuthenticationBuilder = services.AddEmeraudeAuthentication(options.Account); services.ConfigureGoogleReCaptcha(); services.LoadSmtpOptions(); services.RegisterEmeraudeIdentity(); services.RegisterEmeraudeLogger(configuration, options); services.RegisterEmeraudeLocalization(options); services.RegisterEmailInfrastructure(options.GetExternalOption <EmEmailOptions>()); services.RegisterEmeraudeSystemFilesManagement(options.GetExternalOption <EmFilesOptions>()); services.ConfigureAuthorizationPolicies(); services.AddEmeraudeAdmin(); services.AddEmeraudeClient(); services.AddDefinuxSeo(options.GetExternalOption <Action <DefinuxSeoOptions> >()); services.RegisterMediatR(options.Assemblies); services.AddCqrsBehaviours(); services.AddDatabaseInitializer <IApplicationDatabaseInitializer, ApplicationDatabaseInitializer>(); services.RegisterHtmlOptimizationServices(); services.ConfigureMvc(options); return(settingsBuilder); }
private static IServiceCollection ConfigureMvc(this IServiceCollection services, EmOptions emeraudeOptions) { services.AddMvc(options => { options.Filters.Add(new RequestExceptionFilter()); options.UseCentralEmPagesRoutePrefix(); options.ModelBinderProviders.Insert(0, new DateTimeModelBinderProvider()); }) .AddFluentValidation(options => { options.RegisterValidatorsFromAssemblies(emeraudeOptions.Assemblies); }) .ConfigureApplicationPartManager(p => { p.ApplicationParts.Add(ApplicationAssemblyPart.AssemblyPart); p.AddAdminUIApplicationParts(); p.AddClientUIApplicationParts(); p.FeatureProviders.Add(new ViewComponentFeatureProvider()); }) .AddJsonOptions(options => options.JsonSerializerOptions.Converters.Add(new TimeSpanConverter())) .AddXmlSerializerFormatters(); return(services); }
/// <summary> /// Initializes a new instance of the <see cref="TwoFactorAuthenticationService"/> class. /// </summary> /// <param name="userManager"></param> /// <param name="urlEncoder"></param> /// <param name="optionsAccessor"></param> public TwoFactorAuthenticationService(UserManager <User> userManager, UrlEncoder urlEncoder, IOptions <EmOptions> optionsAccessor) { this.userManager = userManager; this.urlEncoder = urlEncoder; this.options = optionsAccessor.Value; }
/// <summary> /// Get Emeraude files infrastructure options. /// </summary> /// <param name="options"></param> /// <returns></returns> public static EmFilesOptions GetFilesOptions(this EmOptions options) => options.GetExternalOption <EmFilesOptions>() ?? new EmFilesOptions();
/// <summary> /// Initializes a new instance of the <see cref="AdminDashboardController"/> class. /// </summary> /// <param name="optionsAccessor"></param> public AdminDashboardController(IOptions <EmOptions> optionsAccessor) { this.options = optionsAccessor.Value; }