Merge pull request #11068 from umbraco/v9/bugfix/options-monitor-connection-strings
Fixes reading connection strings after install
This commit is contained in:
@@ -219,7 +219,7 @@ namespace Umbraco.Cms.Infrastructure.DependencyInjection
|
||||
builder.Services.AddSingleton<IMainDomLock>(factory =>
|
||||
{
|
||||
var globalSettings = factory.GetRequiredService<IOptions<GlobalSettings>>();
|
||||
var connectionStrings = factory.GetRequiredService<IOptions<ConnectionStrings>>();
|
||||
var connectionStrings = factory.GetRequiredService<IOptionsMonitor<ConnectionStrings>>();
|
||||
var hostingEnvironment = factory.GetRequiredService<IHostingEnvironment>();
|
||||
|
||||
var dbCreator = factory.GetRequiredService<IDbProviderFactoryCreator>();
|
||||
|
||||
@@ -22,37 +22,33 @@ namespace Umbraco.Cms.Infrastructure.Install
|
||||
{
|
||||
public sealed class InstallHelper
|
||||
{
|
||||
private static HttpClient _httpClient;
|
||||
private readonly DatabaseBuilder _databaseBuilder;
|
||||
private readonly ILogger<InstallHelper> _logger;
|
||||
private readonly IUmbracoVersion _umbracoVersion;
|
||||
private readonly ConnectionStrings _connectionStrings;
|
||||
private readonly IOptionsMonitor<ConnectionStrings> _connectionStrings;
|
||||
private readonly IInstallationService _installationService;
|
||||
private readonly ICookieManager _cookieManager;
|
||||
private readonly IUserAgentProvider _userAgentProvider;
|
||||
private readonly IUmbracoDatabaseFactory _umbracoDatabaseFactory;
|
||||
private readonly IJsonSerializer _jsonSerializer;
|
||||
private InstallationType? _installationType;
|
||||
|
||||
public InstallHelper(DatabaseBuilder databaseBuilder,
|
||||
ILogger<InstallHelper> logger,
|
||||
IUmbracoVersion umbracoVersion,
|
||||
IOptions<ConnectionStrings> connectionStrings,
|
||||
IOptionsMonitor<ConnectionStrings> connectionStrings,
|
||||
IInstallationService installationService,
|
||||
ICookieManager cookieManager,
|
||||
IUserAgentProvider userAgentProvider,
|
||||
IUmbracoDatabaseFactory umbracoDatabaseFactory,
|
||||
IJsonSerializer jsonSerializer)
|
||||
IUmbracoDatabaseFactory umbracoDatabaseFactory)
|
||||
{
|
||||
_logger = logger;
|
||||
_umbracoVersion = umbracoVersion;
|
||||
_databaseBuilder = databaseBuilder;
|
||||
_connectionStrings = connectionStrings.Value ?? throw new ArgumentNullException(nameof(connectionStrings));
|
||||
_connectionStrings = connectionStrings;
|
||||
_installationService = installationService;
|
||||
_cookieManager = cookieManager;
|
||||
_userAgentProvider = userAgentProvider;
|
||||
_umbracoDatabaseFactory = umbracoDatabaseFactory;
|
||||
_jsonSerializer = jsonSerializer;
|
||||
|
||||
//We need to initialize the type already, as we can't detect later, if the connection string is added on the fly.
|
||||
GetInstallationType();
|
||||
@@ -118,7 +114,7 @@ namespace Umbraco.Cms.Infrastructure.Install
|
||||
{
|
||||
get
|
||||
{
|
||||
var databaseSettings = _connectionStrings.UmbracoConnectionString;
|
||||
var databaseSettings = _connectionStrings.CurrentValue.UmbracoConnectionString;
|
||||
if (databaseSettings.IsConnectionStringConfigured() == false)
|
||||
{
|
||||
//no version or conn string configured, must be a brand new install
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
@@ -18,12 +18,12 @@ namespace Umbraco.Cms.Infrastructure.Install.InstallSteps
|
||||
{
|
||||
private readonly DatabaseBuilder _databaseBuilder;
|
||||
private readonly ILogger<DatabaseConfigureStep> _logger;
|
||||
private readonly ConnectionStrings _connectionStrings;
|
||||
private readonly IOptionsMonitor<ConnectionStrings> _connectionStrings;
|
||||
|
||||
public DatabaseConfigureStep(DatabaseBuilder databaseBuilder, IOptions<ConnectionStrings> connectionStrings, ILogger<DatabaseConfigureStep> logger)
|
||||
public DatabaseConfigureStep(DatabaseBuilder databaseBuilder, IOptionsMonitor<ConnectionStrings> connectionStrings, ILogger<DatabaseConfigureStep> logger)
|
||||
{
|
||||
_databaseBuilder = databaseBuilder;
|
||||
_connectionStrings = connectionStrings.Value ?? throw new ArgumentNullException(nameof(connectionStrings));
|
||||
_connectionStrings = connectionStrings;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ namespace Umbraco.Cms.Infrastructure.Install.InstallSteps
|
||||
private bool ShouldDisplayView()
|
||||
{
|
||||
//If the connection string is already present in web.config we don't need to show the settings page and we jump to installing/upgrading.
|
||||
var databaseSettings = _connectionStrings.UmbracoConnectionString;
|
||||
var databaseSettings = _connectionStrings.CurrentValue.UmbracoConnectionString;
|
||||
|
||||
if (databaseSettings.IsConnectionStringConfigured())
|
||||
{
|
||||
|
||||
@@ -24,20 +24,20 @@ namespace Umbraco.Cms.Infrastructure.Install.InstallSteps
|
||||
private readonly IRuntimeState _runtime;
|
||||
private readonly ILogger<DatabaseUpgradeStep> _logger;
|
||||
private readonly IUmbracoVersion _umbracoVersion;
|
||||
private readonly ConnectionStrings _connectionStrings;
|
||||
private readonly IOptionsMonitor<ConnectionStrings> _connectionStrings;
|
||||
|
||||
public DatabaseUpgradeStep(
|
||||
DatabaseBuilder databaseBuilder,
|
||||
IRuntimeState runtime,
|
||||
ILogger<DatabaseUpgradeStep> logger,
|
||||
IUmbracoVersion umbracoVersion,
|
||||
IOptions<ConnectionStrings> connectionStrings)
|
||||
IOptionsMonitor<ConnectionStrings> connectionStrings)
|
||||
{
|
||||
_databaseBuilder = databaseBuilder;
|
||||
_runtime = runtime;
|
||||
_logger = logger;
|
||||
_umbracoVersion = umbracoVersion;
|
||||
_connectionStrings = connectionStrings.Value ?? throw new ArgumentNullException(nameof(connectionStrings));
|
||||
_connectionStrings = connectionStrings;
|
||||
}
|
||||
|
||||
public override Task<InstallSetupResult> ExecuteAsync(object model)
|
||||
@@ -77,7 +77,7 @@ namespace Umbraco.Cms.Infrastructure.Install.InstallSteps
|
||||
return false;
|
||||
}
|
||||
|
||||
var databaseSettings = _connectionStrings.UmbracoConnectionString;
|
||||
var databaseSettings = _connectionStrings.CurrentValue.UmbracoConnectionString;
|
||||
|
||||
if (databaseSettings.IsConnectionStringConfigured())
|
||||
{
|
||||
|
||||
@@ -30,10 +30,10 @@ namespace Umbraco.Cms.Infrastructure.Install.InstallSteps
|
||||
{
|
||||
private readonly IUserService _userService;
|
||||
private readonly DatabaseBuilder _databaseBuilder;
|
||||
private static HttpClient _httpClient;
|
||||
private readonly IHttpClientFactory _httpClientFactory;
|
||||
private readonly UserPasswordConfigurationSettings _passwordConfiguration;
|
||||
private readonly SecuritySettings _securitySettings;
|
||||
private readonly ConnectionStrings _connectionStrings;
|
||||
private readonly IOptionsMonitor<ConnectionStrings> _connectionStrings;
|
||||
private readonly ICookieManager _cookieManager;
|
||||
private readonly IBackOfficeUserManager _userManager;
|
||||
private readonly IDbProviderFactoryCreator _dbProviderFactoryCreator;
|
||||
@@ -41,18 +41,20 @@ namespace Umbraco.Cms.Infrastructure.Install.InstallSteps
|
||||
public NewInstallStep(
|
||||
IUserService userService,
|
||||
DatabaseBuilder databaseBuilder,
|
||||
IHttpClientFactory httpClientFactory,
|
||||
IOptions<UserPasswordConfigurationSettings> passwordConfiguration,
|
||||
IOptions<SecuritySettings> securitySettings,
|
||||
IOptions<ConnectionStrings> connectionStrings,
|
||||
IOptionsMonitor<ConnectionStrings> connectionStrings,
|
||||
ICookieManager cookieManager,
|
||||
IBackOfficeUserManager userManager,
|
||||
IDbProviderFactoryCreator dbProviderFactoryCreator)
|
||||
{
|
||||
_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.Value ?? throw new ArgumentNullException(nameof(connectionStrings));
|
||||
_connectionStrings = connectionStrings;
|
||||
_cookieManager = cookieManager;
|
||||
_userManager = userManager ?? throw new ArgumentNullException(nameof(userManager));
|
||||
_dbProviderFactoryCreator = dbProviderFactoryCreator ?? throw new ArgumentNullException(nameof(dbProviderFactoryCreator));
|
||||
@@ -89,15 +91,14 @@ namespace Umbraco.Cms.Infrastructure.Install.InstallSteps
|
||||
|
||||
if (user.SubscribeToNewsLetter)
|
||||
{
|
||||
if (_httpClient == null)
|
||||
_httpClient = new HttpClient();
|
||||
|
||||
var values = new NameValueCollection { { "name", admin.Name }, { "email", admin.Email } };
|
||||
var content = new StringContent(JsonConvert.SerializeObject(values), Encoding.UTF8, "application/json");
|
||||
|
||||
HttpClient httpClient = _httpClientFactory.CreateClient();
|
||||
|
||||
try
|
||||
{
|
||||
var response = _httpClient.PostAsync("https://shop.umbraco.com/base/Ecom/SubmitEmail/installer.aspx", content).Result;
|
||||
var response = httpClient.PostAsync("https://shop.umbraco.com/base/Ecom/SubmitEmail/installer.aspx", content).Result;
|
||||
}
|
||||
catch { /* fail in silence */ }
|
||||
}
|
||||
@@ -140,7 +141,7 @@ namespace Umbraco.Cms.Infrastructure.Install.InstallSteps
|
||||
// TODO: we need to do a null check here since this could be entirely missing and we end up with a null ref
|
||||
// exception in the installer.
|
||||
|
||||
var databaseSettings = _connectionStrings.UmbracoConnectionString;
|
||||
var databaseSettings = _connectionStrings.CurrentValue.UmbracoConnectionString;
|
||||
|
||||
var hasConnString = databaseSettings != null && _databaseBuilder.IsDatabaseConfigured;
|
||||
if (hasConnString)
|
||||
|
||||
@@ -80,7 +80,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
ILogger<UmbracoDatabaseFactory> logger,
|
||||
ILoggerFactory loggerFactory,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IOptions<ConnectionStrings> connectionStrings,
|
||||
IOptionsMonitor<ConnectionStrings> connectionStrings,
|
||||
IMapperCollection mappers,
|
||||
IDbProviderFactoryCreator dbProviderFactoryCreator,
|
||||
DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
|
||||
@@ -95,7 +95,7 @@ namespace Umbraco.Cms.Infrastructure.Persistence
|
||||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||||
_loggerFactory = loggerFactory;
|
||||
|
||||
var settings = connectionStrings.Value.UmbracoConnectionString;
|
||||
var settings = connectionStrings.CurrentValue.UmbracoConnectionString;
|
||||
|
||||
if (settings == null)
|
||||
{
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace Umbraco.Cms.Infrastructure.Runtime
|
||||
ILogger<SqlMainDomLock> logger,
|
||||
ILoggerFactory loggerFactory,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IOptions<ConnectionStrings> connectionStrings,
|
||||
IOptionsMonitor<ConnectionStrings> connectionStrings,
|
||||
IDbProviderFactoryCreator dbProviderFactoryCreator,
|
||||
IHostingEnvironment hostingEnvironment,
|
||||
DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace Umbraco.Cms.Tests.Integration.Testing
|
||||
{
|
||||
private readonly ILoggerFactory _loggerFactory;
|
||||
private readonly IOptions<GlobalSettings> _globalSettings;
|
||||
private readonly IOptions<ConnectionStrings> _connectionStrings;
|
||||
private readonly IOptionsMonitor<ConnectionStrings> _connectionStrings;
|
||||
private readonly IMapperCollection _mappers;
|
||||
private readonly IDbProviderFactoryCreator _dbProviderFactoryCreator;
|
||||
private readonly DatabaseSchemaCreatorFactory _databaseSchemaCreatorFactory;
|
||||
@@ -28,7 +28,7 @@ namespace Umbraco.Cms.Tests.Integration.Testing
|
||||
public TestUmbracoDatabaseFactoryProvider(
|
||||
ILoggerFactory loggerFactory,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IOptions<ConnectionStrings> connectionStrings,
|
||||
IOptionsMonitor<ConnectionStrings> connectionStrings,
|
||||
IMapperCollection mappers,
|
||||
IDbProviderFactoryCreator dbProviderFactoryCreator,
|
||||
DatabaseSchemaCreatorFactory databaseSchemaCreatorFactory,
|
||||
|
||||
@@ -22,8 +22,6 @@ using Umbraco.Cms.Core.Events;
|
||||
using Umbraco.Cms.Core.Hosting;
|
||||
using Umbraco.Cms.Core.IO;
|
||||
using Umbraco.Cms.Core.Logging;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.PropertyEditors;
|
||||
using Umbraco.Cms.Core.Scoping;
|
||||
using Umbraco.Cms.Core.Strings;
|
||||
using Umbraco.Cms.Infrastructure.Migrations.Install;
|
||||
@@ -54,7 +52,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Components
|
||||
loggerFactory.CreateLogger<UmbracoDatabaseFactory>(),
|
||||
loggerFactory,
|
||||
Options.Create(globalSettings),
|
||||
Options.Create(connectionStrings),
|
||||
Mock.Of<IOptionsMonitor<ConnectionStrings>>(x => x.CurrentValue == connectionStrings),
|
||||
new MapperCollection(() => Enumerable.Empty<BaseMapper>()),
|
||||
TestHelper.DbProviderFactoryCreator,
|
||||
new DatabaseSchemaCreatorFactory(loggerFactory.CreateLogger<DatabaseSchemaCreator>(), loggerFactory, new UmbracoVersion(), Mock.Of<IEventAggregator>()),
|
||||
|
||||
Reference in New Issue
Block a user