56 lines
1.7 KiB
C#
56 lines
1.7 KiB
C#
using MySql.Data.MySqlClient;
|
|
|
|
namespace HikvisionAttendanceService.Data;
|
|
|
|
internal sealed class MySqlHrmsDbConnectionFactory : IHrmsDbConnectionFactory
|
|
{
|
|
private readonly HikvisionAttendanceWindowsService.HikvisionServiceConfig _config;
|
|
|
|
public MySqlHrmsDbConnectionFactory(HikvisionAttendanceWindowsService.HikvisionServiceConfig config)
|
|
{
|
|
_config = config;
|
|
}
|
|
|
|
public string BuildConnectionStringMasked()
|
|
{
|
|
if (TryBuildConnectionString(out var cs, out _))
|
|
{
|
|
var b = new MySqlConnectionStringBuilder(cs);
|
|
b.Password = "***";
|
|
return b.ConnectionString;
|
|
}
|
|
return "(invalid)";
|
|
}
|
|
|
|
public bool TryBuildConnectionString(out string connectionString, out string error)
|
|
{
|
|
connectionString = "";
|
|
error = "";
|
|
if (!string.IsNullOrWhiteSpace(_config.DbConnectionString))
|
|
{
|
|
connectionString = _config.DbConnectionString.Trim();
|
|
return true;
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(_config.DbHost) ||
|
|
string.IsNullOrWhiteSpace(_config.DbUsername) ||
|
|
string.IsNullOrWhiteSpace(_config.DbName))
|
|
{
|
|
error = "DbHost/DbUsername/DbName are required when DbConnectionString is empty.";
|
|
return false;
|
|
}
|
|
|
|
var b = new MySqlConnectionStringBuilder
|
|
{
|
|
Server = _config.DbHost.Trim(),
|
|
Port = (uint)(_config.DbPort > 0 ? _config.DbPort : 3306),
|
|
Database = _config.DbName.Trim(),
|
|
UserID = _config.DbUsername.Trim(),
|
|
Password = _config.DbPassword ?? "",
|
|
DefaultCommandTimeout = 30
|
|
};
|
|
connectionString = b.ConnectionString;
|
|
return true;
|
|
}
|
|
}
|