mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-10-14 17:54:42 +00:00
Update database handling code (#247)
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
using Microsoft.Data.SqlClient;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
||||
namespace Database.Connection;
|
||||
|
||||
/// <summary>
|
||||
/// Helper for building SQL Server connection strings from configuration
|
||||
/// (backed by the <c>DB_*</c> environment variables).
|
||||
/// </summary>
|
||||
public static class SqlConnectionStringHelper
|
||||
{
|
||||
private static SqlConnectionStringBuilder MakeConfiguredConnectionBuilder(
|
||||
IConfiguration configuration
|
||||
) =>
|
||||
new()
|
||||
{
|
||||
DataSource = ConfigurationHelpers.GetKeyOrThrow(configuration, "DB_SERVER"),
|
||||
UserID = ConfigurationHelpers.GetKeyOrThrow(configuration, "DB_USER"),
|
||||
Password = ConfigurationHelpers.GetKeyOrThrow(configuration, "DB_PASSWORD"),
|
||||
TrustServerCertificate = ResolveTrustServerCertificate(configuration),
|
||||
Encrypt = true,
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Builds a SQL Server connection string from configuration.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Returns <c>false</c> if DB_SERVER, DB_NAME, DB_USER, or DB_PASSWORD is unset.
|
||||
/// </remarks>
|
||||
/// <param name="configuration">The configuration to read the <c>DB_*</c> values from.</param>
|
||||
/// <param name="connectionString">The resolved connection string, if successful.</param>
|
||||
public static bool TryGetStandardDbConnectionString(
|
||||
IConfiguration configuration,
|
||||
out string connectionString
|
||||
)
|
||||
{
|
||||
connectionString = string.Empty;
|
||||
try
|
||||
{
|
||||
SqlConnectionStringBuilder builder = MakeConfiguredConnectionBuilder(configuration);
|
||||
builder.InitialCatalog = ConfigurationHelpers.GetKeyOrThrow(configuration, "DB_NAME");
|
||||
connectionString = builder.ConnectionString;
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool TryGetMasterConnectionString(
|
||||
IConfiguration configuration,
|
||||
out string connectionString
|
||||
)
|
||||
{
|
||||
connectionString = string.Empty;
|
||||
try
|
||||
{
|
||||
var builder = MakeConfiguredConnectionBuilder(configuration);
|
||||
builder.InitialCatalog = "master";
|
||||
|
||||
connectionString = builder.ConnectionString;
|
||||
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool TryGetDatabaseNameFromConnectionString(
|
||||
string connectionString,
|
||||
out string databaseName
|
||||
)
|
||||
{
|
||||
databaseName = string.Empty;
|
||||
|
||||
try
|
||||
{
|
||||
var builder = new SqlConnectionStringBuilder(connectionString);
|
||||
databaseName = builder.InitialCatalog;
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resolves the <c>DB_TRUST_SERVER_CERTIFICATE</c> configuration value, defaulting to
|
||||
/// <c>true</c> when it is unset or not a valid boolean.
|
||||
/// </summary>
|
||||
private static bool ResolveTrustServerCertificate(IConfiguration configuration)
|
||||
{
|
||||
return !bool.TryParse(
|
||||
configuration["DB_TRUST_SERVER_CERTIFICATE"],
|
||||
out bool trustServerCertificate
|
||||
) || trustServerCertificate;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user