コード例 #1
0
ファイル: LoggerContext.cs プロジェクト: Definux/Emeraude
 /// <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;
 }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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());
        }
コード例 #4
0
 /// <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;
 }
コード例 #5
0
 /// <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;
 }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
ファイル: OptionsExtensions.cs プロジェクト: Definux/Emeraude
 /// <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);
 }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
        /// <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);
        }
コード例 #10
0
        /// <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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
 /// <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;
 }
コード例 #13
0
 /// <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();
コード例 #14
0
 /// <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;
 }