using Microsoft.Extensions.Configuration;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Configuration;
using Umbraco.Cms.Core.Configuration.Models;
namespace Umbraco.Extensions;
///
/// Extensions for .
///
public static class ConfigurationExtensions
{
///
/// The DataDirectory name.
///
internal const string DataDirectoryName = "DataDirectory";
///
/// The DataDirectory placeholder.
///
internal const string DataDirectoryPlaceholder = "|DataDirectory|";
///
/// The postfix used to identify a connection string provider setting.
///
internal const string ProviderNamePostfix = "_ProviderName";
///
/// Gets the provider name for the connection string name (shorthand for GetSection("ConnectionStrings")[name + "_ProviderName"]).
///
/// The configuration.
/// The connection string key.
///
/// The provider name.
///
///
/// This uses the same convention as the Configuration API for connection string environment variables.
///
public static string? GetConnectionStringProviderName(this IConfiguration configuration, string name)
=> configuration.GetConnectionString(name + ProviderNamePostfix);
///
/// Gets the Umbraco connection string (shorthand for GetSection("ConnectionStrings")[name] and replacing the |DataDirectory| placeholder).
///
/// The configuration.
/// The connection string key.
///
/// The Umbraco connection string.
///
public static string? GetUmbracoConnectionString(this IConfiguration configuration, string name = Constants.System.UmbracoConnectionName)
=> configuration.GetUmbracoConnectionString(name, out _);
///
/// Gets the Umbraco connection string and provider name (shorthand for GetSection("ConnectionStrings")[Constants.System.UmbracoConnectionName] and replacing the |DataDirectory| placeholder).
///
/// The configuration.
/// The provider name.
///
/// The Umbraco connection string.
///
public static string? GetUmbracoConnectionString(this IConfiguration configuration, out string? providerName)
=> configuration.GetUmbracoConnectionString(Constants.System.UmbracoConnectionName, out providerName);
///
/// Gets the Umbraco connection string and provider name (shorthand for GetSection("ConnectionStrings")[name] and replacing the |DataDirectory| placeholder).
///
/// The configuration.
/// The name.
/// The provider name.
///
/// The Umbraco connection string.
///
public static string? GetUmbracoConnectionString(this IConfiguration configuration, string name, out string? providerName)
{
string? connectionString = configuration.GetConnectionString(name);
if (!string.IsNullOrEmpty(connectionString))
{
// Replace data directory
string? dataDirectory = AppDomain.CurrentDomain.GetData(DataDirectoryName)?.ToString();
if (!string.IsNullOrEmpty(dataDirectory))
{
connectionString = connectionString.Replace(DataDirectoryPlaceholder, dataDirectory);
}
// Get provider name
providerName = configuration.GetConnectionStringProviderName(name);
}
else
{
providerName = null;
}
return connectionString;
}
///
/// Gets the Umbraco runtime mode.
///
/// The configuration.
///
/// The Umbraco runtime mode.
///
public static RuntimeMode GetRuntimeMode(this IConfiguration configuration)
=> configuration.GetValue(Constants.Configuration.ConfigRuntimeMode);
public static ModelsMode GetModelsMode(this IConfiguration configuration) => (configuration.GetSection(Constants.Configuration.ConfigModelsBuilder).Get() ?? new ModelsBuilderSettings()).ModelsMode;
}