Files
HanaToolbox/Services/NtfyNotificationService.cs
2026-03-02 20:53:28 +01:00

40 lines
1.4 KiB
C#

using HanaToolbox.Config;
using HanaToolbox.Logging;
using HanaToolbox.Services.Interfaces;
namespace HanaToolbox.Services;
/// <summary>
/// Sends notifications to a ntfy server.
/// URL and token are read from <see cref="NtfyConfig"/> (set during onboarding).
/// Failures are silently swallowed — notifications must never crash the main flow.
/// </summary>
public sealed class NtfyNotificationService(NtfyConfig config, AppLogger logger)
: INotificationService
{
private static readonly HttpClient Http = new();
public async Task SendAsync(string title, string message, CancellationToken ct = default)
{
if (string.IsNullOrWhiteSpace(config.Url) || string.IsNullOrWhiteSpace(config.Token))
{
logger.Info("Ntfy not configured — skipping notification.");
return;
}
try
{
using var request = new HttpRequestMessage(HttpMethod.Post, config.Url);
request.Headers.Add("Authorization", $"Bearer {config.Token}");
request.Headers.Add("Title", title);
request.Content = new StringContent(message);
await Http.SendAsync(request, ct);
logger.Info($"Notification sent: [{title}] {message}");
}
catch (Exception ex)
{
logger.Warning($"Failed to send ntfy notification: {ex.Message}");
}
}
}