-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWebhookController.cs
More file actions
99 lines (82 loc) · 3.33 KB
/
WebhookController.cs
File metadata and controls
99 lines (82 loc) · 3.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using Microsoft.AspNetCore.Mvc;
using RandomAPI.Services.Webhooks;
namespace RandomAPI.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class WebhookController : ControllerBase
{
private readonly ILogger<WebhookController> _logger;
private readonly IWebhookService _webhookService;
public WebhookController(
ILogger<WebhookController> logger,
IWebhookService webhookService)
{
_logger = logger;
_webhookService = webhookService;
}
/// <summary>
/// Gets a list of all currently registered webhook listener URLs.
/// </summary>
[HttpGet("listeners")]
public async Task<IActionResult> GetListeners()
{
var urls = await _webhookService.GetListenersAsync();
return Ok(urls);
}
/// <summary>
/// Registers a new URL to receive webhook payloads.
/// </summary>
[HttpPost("register")]
public async Task<IActionResult> RegisterUrl([FromBody] string url)
{
return await _webhookService.HandleRegisterActionAsync(url);
}
/// <summary>
/// Registers a new URL to receive webhook payloads.
/// </summary>
[HttpPost("register-discord")]
public async Task<IActionResult> RegisterDiscordUrl([FromBody] string url)
{
return await _webhookService.HandleRegisterActionAsync(url, IWebhookService.WebhookType.Discord);
}
/// <summary>
/// Removes a URL from the list of webhook listeners.
/// </summary>
[HttpDelete("unregister")]
public async Task<IActionResult> UnregisterUrl([FromBody] string url)
{
return await _webhookService.HandleUnregisterActionAsync(url);
}
/// <summary>
/// Endpoint to manually trigger a test broadcast.
/// </summary>
[HttpPost("debug/broadcast-test")]
public async Task<IActionResult> BroadcastTest([FromBody] WebhookPayload payload)
{
var listeners = await _webhookService.GetListenersAsync();
if (!listeners.Any())
return BadRequest("No listeners registered to broadcast to.");
payload.Timestamp = DateTime.UtcNow;
_logger.LogInformation("Broadcasting test payload: {Message}", payload.content);
await _webhookService.BroadcastAsync(payload);
return Ok(new
{
Message = $"Broadcast sent for message: '{payload.content}'. Check logs for delivery status."
});
}
[HttpPost("debug/discord-broadcast-test")]
public async Task<IActionResult> BroadcastDiscordTest([FromBody] DiscordWebhookPayload payload)
{
var listeners = await _webhookService.GetListenersAsync();
if (!listeners.Any())
return BadRequest("No listeners registered to broadcast to.");
_logger.LogInformation("Broadcasting Discord payload: {Message}", payload.content?.Replace("\r", "").Replace("\n", ""));
await _webhookService.BroadcastAsync(payload);
return Ok(new
{
Message = $"Broadcast sent for message: '{payload.content}'. Check logs for delivery status."
});
}
}
}