Beispiel #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="UmbracoDatabaseFactory"/>.
        /// </summary>
        /// <remarks>Used by the other ctor and in tests.</remarks>
        public UmbracoDatabaseFactory(
            ILogger <UmbracoDatabaseFactory> logger,
            ILoggerFactory loggerFactory,
            IOptions <GlobalSettings> globalSettings,
            IOptionsMonitor <ConnectionStrings> connectionStrings,
            IMapperCollection mappers,
            IDbProviderFactoryCreator dbProviderFactoryCreator,
            DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
            NPocoMapperCollection npocoMappers)
        {
            _globalSettings               = globalSettings;
            _mappers                      = mappers ?? throw new ArgumentNullException(nameof(mappers));
            _dbProviderFactoryCreator     = dbProviderFactoryCreator ?? throw new ArgumentNullException(nameof(dbProviderFactoryCreator));
            _databaseSchemaCreatorFactory = databaseSchemaCreatorFactory ?? throw new ArgumentNullException(nameof(databaseSchemaCreatorFactory));
            _npocoMappers                 = npocoMappers;
            _logger        = logger ?? throw new ArgumentNullException(nameof(logger));
            _loggerFactory = loggerFactory;

            ConnectionStrings umbracoConnectionString = connectionStrings.Get(Constants.System.UmbracoConnectionName);

            if (!umbracoConnectionString.IsConnectionStringConfigured())
            {
                logger.LogDebug("Missing connection string, defer configuration.");
                return; // not configured
            }

            Configure(umbracoConnectionString);
        }
Beispiel #2
0
        public SqlMainDomLock(
            ILoggerFactory loggerFactory,
            IOptions <GlobalSettings> globalSettings,
            IOptionsMonitor <ConnectionStrings> connectionStrings,
            IDbProviderFactoryCreator dbProviderFactoryCreator,
            IMainDomKeyGenerator mainDomKeyGenerator,
            DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
            NPocoMapperCollection npocoMappers)
        {
            // unique id for our appdomain, this is more unique than the appdomain id which is just an INT counter to its safer
            _lockId          = Guid.NewGuid().ToString();
            _logger          = loggerFactory.CreateLogger <SqlMainDomLock>();
            _globalSettings  = globalSettings;
            _sqlServerSyntax = new SqlServerSyntaxProvider(_globalSettings);

            _dbFactory = new UmbracoDatabaseFactory(
                loggerFactory.CreateLogger <UmbracoDatabaseFactory>(),
                loggerFactory,
                _globalSettings,
                new MapperCollection(() => Enumerable.Empty <BaseMapper>()),
                dbProviderFactoryCreator,
                databaseSchemaCreatorFactory,
                npocoMappers,
                connectionStrings.CurrentValue.UmbracoConnectionString.ConnectionString);

            MainDomKey = MainDomKeyPrefix + "-" + mainDomKeyGenerator.GenerateKey();
        }
Beispiel #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DatabaseBuilder"/> class.
 /// </summary>
 public DatabaseBuilder(
     IScopeProvider scopeProvider,
     IScopeAccessor scopeAccessor,
     IUmbracoDatabaseFactory databaseFactory,
     IRuntimeState runtimeState,
     ILoggerFactory loggerFactory,
     IKeyValueService keyValueService,
     IDbProviderFactoryCreator dbProviderFactoryCreator,
     IConfigManipulator configManipulator,
     IOptionsMonitor <GlobalSettings> globalSettings,
     IOptionsMonitor <ConnectionStrings> connectionStrings,
     IMigrationPlanExecutor migrationPlanExecutor,
     DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
     IEnumerable <IDatabaseProviderMetadata> databaseProviderMetadata)
 {
     _scopeProvider                = scopeProvider;
     _scopeAccessor                = scopeAccessor;
     _databaseFactory              = databaseFactory;
     _runtimeState                 = runtimeState;
     _logger                       = loggerFactory.CreateLogger <DatabaseBuilder>();
     _keyValueService              = keyValueService;
     _dbProviderFactoryCreator     = dbProviderFactoryCreator;
     _configManipulator            = configManipulator;
     _globalSettings               = globalSettings;
     _connectionStrings            = connectionStrings;
     _migrationPlanExecutor        = migrationPlanExecutor;
     _databaseSchemaCreatorFactory = databaseSchemaCreatorFactory;
     _databaseProviderMetadata     = databaseProviderMetadata;
 }
 public SqlMainDomLock(
     ILogger <SqlMainDomLock> logger,
     ILoggerFactory loggerFactory,
     IOptions <GlobalSettings> globalSettings,
     IOptionsMonitor <ConnectionStrings> connectionStrings,
     IDbProviderFactoryCreator dbProviderFactoryCreator,
     IHostingEnvironment hostingEnvironment,
     DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
     NPocoMapperCollection npocoMappers,
     string connectionStringName)
 {
     // unique id for our appdomain, this is more unique than the appdomain id which is just an INT counter to its safer
     _lockId             = Guid.NewGuid().ToString();
     _logger             = logger;
     _globalSettings     = globalSettings;
     _sqlServerSyntax    = new SqlServerSyntaxProvider(_globalSettings);
     _hostingEnvironment = hostingEnvironment;
     _dbFactory          = new UmbracoDatabaseFactory(
         loggerFactory.CreateLogger <UmbracoDatabaseFactory>(),
         loggerFactory,
         _globalSettings,
         new MapperCollection(() => Enumerable.Empty <BaseMapper>()),
         dbProviderFactoryCreator,
         databaseSchemaCreatorFactory,
         npocoMappers,
         connectionStringName);
     MainDomKey = MainDomKeyPrefix + "-" + (Environment.MachineName + MainDom.GetMainDomId(_hostingEnvironment)).GenerateHash <SHA1>();
 }
Beispiel #5
0
 public NewInstallStep(
     IUserService userService,
     DatabaseBuilder databaseBuilder,
     IHttpClientFactory httpClientFactory,
     IOptions <UserPasswordConfigurationSettings> passwordConfiguration,
     IOptions <SecuritySettings> securitySettings,
     IOptionsMonitor <ConnectionStrings> connectionStrings,
     ICookieManager cookieManager,
     IBackOfficeUserManager userManager,
     IDbProviderFactoryCreator dbProviderFactoryCreator,
     IEnumerable <IDatabaseProviderMetadata> databaseProviderMetadata)
     : this(
         userService,
         databaseBuilder,
         httpClientFactory,
         passwordConfiguration,
         securitySettings,
         connectionStrings,
         cookieManager,
         userManager,
         dbProviderFactoryCreator,
         databaseProviderMetadata,
         StaticServiceProvider.Instance.GetRequiredService <ILocalizedTextService>(),
         StaticServiceProvider.Instance.GetRequiredService <IMetricsConsentService>())
 {
 }
Beispiel #6
0
 public NewInstallStep(
     IUserService userService,
     DatabaseBuilder databaseBuilder,
     IHttpClientFactory httpClientFactory,
     IOptions <UserPasswordConfigurationSettings> passwordConfiguration,
     IOptions <SecuritySettings> securitySettings,
     IOptionsMonitor <ConnectionStrings> connectionStrings,
     ICookieManager cookieManager,
     IBackOfficeUserManager userManager,
     IDbProviderFactoryCreator dbProviderFactoryCreator,
     IEnumerable <IDatabaseProviderMetadata> databaseProviderMetadata,
     ILocalizedTextService localizedTextService,
     IMetricsConsentService metricsConsentService)
 {
     _userService              = userService ?? throw new ArgumentNullException(nameof(userService));
     _databaseBuilder          = databaseBuilder ?? throw new ArgumentNullException(nameof(databaseBuilder));
     _httpClientFactory        = httpClientFactory;
     _passwordConfiguration    = passwordConfiguration.Value ?? throw new ArgumentNullException(nameof(passwordConfiguration));
     _securitySettings         = securitySettings.Value ?? throw new ArgumentNullException(nameof(securitySettings));
     _connectionStrings        = connectionStrings;
     _cookieManager            = cookieManager;
     _userManager              = userManager ?? throw new ArgumentNullException(nameof(userManager));
     _dbProviderFactoryCreator = dbProviderFactoryCreator ?? throw new ArgumentNullException(nameof(dbProviderFactoryCreator));
     _databaseProviderMetadata = databaseProviderMetadata;
     _localizedTextService     = localizedTextService;
     _metricsConsentService    = metricsConsentService;
 }
Beispiel #7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UmbracoDatabaseFactory"/>.
 /// </summary>
 /// <remarks>Used by the other ctor and in tests.</remarks>
 public UmbracoDatabaseFactory(
     ILogger <UmbracoDatabaseFactory> logger,
     ILoggerFactory loggerFactory,
     IOptions <GlobalSettings> globalSettings,
     IOptionsMonitor <ConnectionStrings> connectionStrings,
     IMapperCollection mappers,
     IDbProviderFactoryCreator dbProviderFactoryCreator,
     DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
     NPocoMapperCollection npocoMappers) :
     this(logger, loggerFactory, globalSettings, mappers, dbProviderFactoryCreator, databaseSchemaCreatorFactory, npocoMappers, connectionStrings?.CurrentValue?.UmbracoConnectionString?.ConnectionString)
 {
 }
Beispiel #8
0
 public TestUmbracoDatabaseFactoryProvider(
     ILoggerFactory loggerFactory,
     IOptions <GlobalSettings> globalSettings,
     IOptionsMonitor <ConnectionStrings> connectionStrings,
     IMapperCollection mappers,
     IDbProviderFactoryCreator dbProviderFactoryCreator,
     DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
     NPocoMapperCollection npocoMappers)
 {
     _loggerFactory                = loggerFactory;
     _globalSettings               = globalSettings;
     _connectionStrings            = connectionStrings;
     _mappers                      = mappers;
     _dbProviderFactoryCreator     = dbProviderFactoryCreator;
     _databaseSchemaCreatorFactory = databaseSchemaCreatorFactory;
     _npocoMappers                 = npocoMappers;
 }
Beispiel #9
0
 public UnattendedInstaller(
     DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
     IEventAggregator eventAggregator,
     IOptions <UnattendedSettings> unattendedSettings,
     IUmbracoDatabaseFactory databaseFactory,
     IDbProviderFactoryCreator dbProviderFactoryCreator,
     ILogger <UnattendedInstaller> logger,
     IRuntimeState runtimeState)
 {
     _databaseSchemaCreatorFactory = databaseSchemaCreatorFactory ?? throw new ArgumentNullException(nameof(databaseSchemaCreatorFactory));
     _eventAggregator          = eventAggregator ?? throw new ArgumentNullException(nameof(eventAggregator));
     _unattendedSettings       = unattendedSettings;
     _databaseFactory          = databaseFactory;
     _dbProviderFactoryCreator = dbProviderFactoryCreator;
     _logger       = logger;
     _runtimeState = runtimeState;
 }
Beispiel #10
0
    private static IUmbracoBuilder AddMainDom(this IUmbracoBuilder builder)
    {
        builder.Services.AddSingleton <IMainDomKeyGenerator, DefaultMainDomKeyGenerator>();
        builder.Services.AddSingleton <IMainDomLock>(factory =>
        {
            IOptions <GlobalSettings> globalSettings = factory.GetRequiredService <IOptions <GlobalSettings> >();
            IOptionsMonitor <ConnectionStrings> connectionStrings =
                factory.GetRequiredService <IOptionsMonitor <ConnectionStrings> >();
            IHostingEnvironment hostingEnvironment = factory.GetRequiredService <IHostingEnvironment>();

            IDbProviderFactoryCreator dbCreator = factory.GetRequiredService <IDbProviderFactoryCreator>();
            DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory =
                factory.GetRequiredService <DatabaseSchemaCreatorFactory>();
            ILoggerFactory loggerFactory             = factory.GetRequiredService <ILoggerFactory>();
            NPocoMapperCollection npocoMappers       = factory.GetRequiredService <NPocoMapperCollection>();
            IMainDomKeyGenerator mainDomKeyGenerator = factory.GetRequiredService <IMainDomKeyGenerator>();

            switch (globalSettings.Value.MainDomLock)
            {
            case "SqlMainDomLock":
                return(new SqlMainDomLock(
                           loggerFactory,
                           globalSettings,
                           connectionStrings,
                           dbCreator,
                           mainDomKeyGenerator,
                           databaseSchemaCreatorFactory,
                           npocoMappers));

            case "MainDomSemaphoreLock":
                return(new MainDomSemaphoreLock(
                           loggerFactory.CreateLogger <MainDomSemaphoreLock>(),
                           hostingEnvironment));

            case "FileSystemMainDomLock":
            default:
                return(new FileSystemMainDomLock(
                           loggerFactory.CreateLogger <FileSystemMainDomLock>(),
                           mainDomKeyGenerator, hostingEnvironment,
                           factory.GetRequiredService <IOptionsMonitor <GlobalSettings> >()));
            }
        });

        return(builder);
    }
Beispiel #11
0
 public SqlMainDomLock(
     ILogger <SqlMainDomLock> logger,
     ILoggerFactory loggerFactory,
     IOptions <GlobalSettings> globalSettings,
     IOptionsMonitor <ConnectionStrings> connectionStrings,
     IDbProviderFactoryCreator dbProviderFactoryCreator,
     IHostingEnvironment hostingEnvironment,
     DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
     NPocoMapperCollection npocoMappers)
     : this(
         loggerFactory,
         globalSettings,
         connectionStrings,
         dbProviderFactoryCreator,
         StaticServiceProvider.Instance.GetRequiredService <IMainDomKeyGenerator>(),
         databaseSchemaCreatorFactory,
         npocoMappers)
 {
 }
Beispiel #12
0
 public SqlMainDomLock(
     ILogger <SqlMainDomLock> logger,
     ILoggerFactory loggerFactory,
     IOptions <GlobalSettings> globalSettings,
     IOptionsMonitor <ConnectionStrings> connectionStrings,
     IDbProviderFactoryCreator dbProviderFactoryCreator,
     IHostingEnvironment hostingEnvironment,
     DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
     NPocoMapperCollection npocoMappers)
     : this(
         logger,
         loggerFactory,
         globalSettings,
         connectionStrings,
         dbProviderFactoryCreator,
         hostingEnvironment,
         databaseSchemaCreatorFactory,
         npocoMappers,
         connectionStrings.CurrentValue.UmbracoConnectionString.ConnectionString
         )
 {
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="UmbracoDatabaseFactory"/>.
        /// </summary>
        /// <remarks>Used by the other ctor and in tests.</remarks>
        public UmbracoDatabaseFactory(
            ILogger <UmbracoDatabaseFactory> logger,
            ILoggerFactory loggerFactory,
            IOptions <GlobalSettings> globalSettings,
            IOptionsMonitor <ConnectionStrings> connectionStrings,
            IMapperCollection mappers,
            IDbProviderFactoryCreator dbProviderFactoryCreator,
            DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
            NPocoMapperCollection npocoMappers)
        {
            _globalSettings               = globalSettings;
            _mappers                      = mappers ?? throw new ArgumentNullException(nameof(mappers));
            _dbProviderFactoryCreator     = dbProviderFactoryCreator ?? throw new ArgumentNullException(nameof(dbProviderFactoryCreator));
            _databaseSchemaCreatorFactory = databaseSchemaCreatorFactory ?? throw new ArgumentNullException(nameof(databaseSchemaCreatorFactory));
            _npocoMappers                 = npocoMappers;
            _logger        = logger ?? throw new ArgumentNullException(nameof(logger));
            _loggerFactory = loggerFactory;

            var settings = connectionStrings.CurrentValue.UmbracoConnectionString;

            if (settings == null)
            {
                logger.LogDebug("Missing connection string, defer configuration.");
                return; // not configured
            }

            // could as well be <add name="umbracoDbDSN" connectionString="" providerName="" />
            // so need to test the values too
            if (settings.IsConnectionStringConfigured() == false)
            {
                logger.LogDebug("Empty connection string or provider name, defer configuration.");
                return; // not configured
            }

            Configure(settings.ConnectionString, settings.ProviderName);
        }