using ZymonicGateway.Options; using ZymonicServices; namespace ZymonicGateway.Services; public static class ZymonicGatewaySettingsSeeder { public static void Apply(ZymonicGatewayOptions options, IZymonicSettings settings, ILogger logger) { SetIfNotBlank(settings, "BaseUri", options.ZymonicServer.BaseUri); SetIfNotBlank(settings, "SystemName", options.ZymonicServer.SystemName); SetIfNotBlank(settings, "ClientId", options.ZymonicServer.ClientId); SetIfNotBlank(settings, "Scope", options.ZymonicServer.Scope); SetIfNotBlank(settings, "Username", options.ZymonicServer.Username); SetIfNotBlank(settings, "Password", options.ZymonicServer.Password); SetIfNotBlank(settings, "RequestResponseLogDirectory", options.RequestResponseLogs.Directory); settings.Setting("RequestResponseLogRetentionDays", Math.Max(1, options.RequestResponseLogs.RetentionDays).ToString()); var clientSecret = options.ZymonicServer.ClientSecret; if (options.ZymonicServer.PromptForClientSecret && string.IsNullOrWhiteSpace(clientSecret)) { Console.Write("Zymonic client secret: "); clientSecret = ReadSecret(); Console.WriteLine(); } SetIfNotBlank(settings, "ClientSecret", clientSecret); logger.LogInformation("Applied ZymonicGateway server settings for system {SystemName}.", options.ZymonicServer.SystemName); } private static void SetIfNotBlank(IZymonicSettings settings, string key, string? value) { if (!string.IsNullOrWhiteSpace(value)) { settings.Setting(key, value); } } private static string ReadSecret() { var secret = ""; ConsoleKeyInfo key; while ((key = Console.ReadKey(intercept: true)).Key != ConsoleKey.Enter) { if (key.Key == ConsoleKey.Backspace) { secret = secret.Length > 0 ? secret[..^1] : secret; continue; } secret += key.KeyChar; } return secret; } }