SaaS-мониторинг Telegram: ядро (модули Cards/Kanban/Pipeline/Tenants/Settings/ Discovery, Api, Infrastructure), сервисы telegram/ai/ml/storage, фронт Vue, контракты и grpc-hosting, деплой-конфиги (dev/prod/observability/CI-раннер), Gitea Actions CI, документация (ТЗ, техдок, api-map, код-стайл, планы, бэклог). Текущее состояние: все этапы роадмапа 0–12 закрыты, сборка 5 sln 0/0, тесты 1340/130/52/38/9 зелёные.
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
||||
namespace Deal.Storage.Options;
|
||||
|
||||
/// <summary>
|
||||
/// Настройки объектного хранилища сервиса данных.
|
||||
/// </summary>
|
||||
public sealed class StorageOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Значение бакета по умолчанию.
|
||||
/// </summary>
|
||||
public const string DefaultBucketName = "deal-attachments";
|
||||
|
||||
/// <summary>
|
||||
/// Env-ключ адреса хранилища (host:port).
|
||||
/// </summary>
|
||||
public const string EndpointEnvKey = "DEAL_STORAGE_ENDPOINT";
|
||||
|
||||
/// <summary>
|
||||
/// Env-ключ ключа доступа.
|
||||
/// </summary>
|
||||
public const string AccessKeyEnvKey = "DEAL_STORAGE_ACCESS_KEY";
|
||||
|
||||
/// <summary>
|
||||
/// Env-ключ секрета доступа.
|
||||
/// </summary>
|
||||
public const string SecretKeyEnvKey = "DEAL_STORAGE_SECRET_KEY";
|
||||
|
||||
/// <summary>
|
||||
/// Env-ключ имени бакета.
|
||||
/// </summary>
|
||||
public const string BucketEnvKey = "DEAL_STORAGE_BUCKET";
|
||||
|
||||
/// <summary>
|
||||
/// Env-ключ флага TLS (1/true — https).
|
||||
/// </summary>
|
||||
public const string SecureEnvKey = "DEAL_STORAGE_SECURE";
|
||||
|
||||
public string Endpoint { get; init; } = string.Empty;
|
||||
|
||||
public string AccessKey { get; init; } = string.Empty;
|
||||
|
||||
public string SecretKey { get; init; } = string.Empty;
|
||||
|
||||
public string Bucket { get; init; } = DefaultBucketName;
|
||||
|
||||
public bool Secure { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// Читает настройки из конфигурации хоста.
|
||||
/// </summary>
|
||||
public static StorageOptions FromConfiguration(IConfiguration configuration)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(configuration);
|
||||
string bucket = (configuration[BucketEnvKey] ?? string.Empty).Trim();
|
||||
return new StorageOptions
|
||||
{
|
||||
Endpoint = (configuration[EndpointEnvKey] ?? string.Empty).Trim(),
|
||||
AccessKey = (configuration[AccessKeyEnvKey] ?? string.Empty).Trim(),
|
||||
SecretKey = configuration[SecretKeyEnvKey] ?? string.Empty,
|
||||
Bucket = bucket.Length == 0 ? DefaultBucketName : bucket,
|
||||
Secure = IsEnabled(configuration[SecureEnvKey]),
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Разбирает значение флага TLS.
|
||||
/// </summary>
|
||||
public static bool IsEnabled(string? rawValue)
|
||||
=> string.Equals(rawValue, "1", StringComparison.Ordinal)
|
||||
|| string.Equals(rawValue, "true", StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
Reference in New Issue
Block a user