2021-10-25 18:35:03 +05:30
namespace WebhookClient.Controllers ;
2019-01-29 19:34:57 +01:00
2021-10-25 18:35:03 +05:30
[ApiController]
[Route("webhook-received")]
public class WebhooksReceivedController : Controller
2019-01-29 19:34:57 +01:00
{
2021-10-25 18:35:03 +05:30
private readonly Settings _settings ;
private readonly ILogger _logger ;
private readonly IHooksRepository _hooksRepository ;
2020-12-28 15:10:01 +05:30
2021-10-25 18:35:03 +05:30
public WebhooksReceivedController ( IOptions < Settings > settings , ILogger < WebhooksReceivedController > logger , IHooksRepository hooksRepository )
{
_settings = settings . Value ;
_logger = logger ;
_hooksRepository = hooksRepository ;
}
2019-01-29 19:34:57 +01:00
2021-10-25 18:35:03 +05:30
[HttpPost]
public async Task < IActionResult > NewWebhook ( WebhookData hook )
{
var header = Request . Headers [ HeaderNames . WebHookCheckHeader ] ;
var token = header . FirstOrDefault ( ) ;
2019-02-06 19:59:26 +01:00
2021-10-25 18:35:03 +05:30
_logger . LogInformation ( "Received hook with token {Token}. My token is {MyToken}. Token validation is set to {ValidateToken}" , token , _settings . Token , _settings . ValidateToken ) ;
2019-02-06 19:59:26 +01:00
2021-10-25 18:35:03 +05:30
if ( ! _settings . ValidateToken | | _settings . Token = = token )
{
_logger . LogInformation ( "Received hook is going to be processed" ) ;
var newHook = new WebHookReceived ( )
2019-01-29 19:34:57 +01:00
{
2021-10-25 18:35:03 +05:30
Data = hook . Payload ,
When = hook . When ,
Token = token
} ;
await _hooksRepository . AddNew ( newHook ) ;
_logger . LogInformation ( "Received hook was processed." ) ;
return Ok ( newHook ) ;
2019-01-29 19:34:57 +01:00
}
2021-10-25 18:35:03 +05:30
_logger . LogInformation ( "Received hook is NOT processed - Bad Request returned." ) ;
return BadRequest ( ) ;
2019-01-29 19:34:57 +01:00
}
}