2019-01-29 19:34:57 +01:00
using Microsoft.AspNetCore.Http ;
using Microsoft.AspNetCore.Mvc ;
2019-02-06 19:59:26 +01:00
using Microsoft.Extensions.Logging ;
2019-01-29 19:34:57 +01:00
using Microsoft.Extensions.Options ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Threading.Tasks ;
using WebhookClient.Models ;
2019-02-11 11:45:32 +01:00
using WebhookClient.Services ;
2019-01-29 19:34:57 +01:00
namespace WebhookClient.Controllers
{
[ApiController]
[Route("webhook-received")]
public class WebhooksReceivedController : Controller
{
private readonly Settings _settings ;
2019-02-06 19:59:26 +01:00
private readonly ILogger _logger ;
2019-02-11 11:45:32 +01:00
private readonly IHooksRepository _hooksRepository ;
2019-01-29 19:34:57 +01:00
2019-02-11 11:45:32 +01:00
public WebhooksReceivedController ( IOptions < Settings > settings , ILogger < WebhooksReceivedController > logger , IHooksRepository hooksRepository )
2019-01-29 19:34:57 +01:00
{
_settings = settings . Value ;
2019-02-06 19:59:26 +01:00
_logger = logger ;
2019-02-11 11:45:32 +01:00
_hooksRepository = hooksRepository ;
2019-01-29 19:34:57 +01:00
}
2019-02-06 19:59:26 +01:00
[HttpPost]
2019-02-11 11:45:32 +01:00
public async Task < IActionResult > NewWebhook ( WebhookData hook )
2019-01-29 19:34:57 +01:00
{
var header = Request . Headers [ HeaderNames . WebHookCheckHeader ] ;
var token = header . FirstOrDefault ( ) ;
2019-02-06 19:59:26 +01:00
2019-11-08 15:15:15 +00:00
_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
2019-01-29 19:34:57 +01:00
if ( ! _settings . ValidateToken | | _settings . Token = = token )
{
2019-11-08 15:15:15 +00:00
_logger . LogInformation ( "Received hook is going to be processed" ) ;
2019-02-06 19:59:26 +01:00
var newHook = new WebHookReceived ( )
2019-01-29 19:34:57 +01:00
{
Data = hook . Payload ,
When = hook . When ,
Token = token
2019-02-06 19:59:26 +01:00
} ;
2019-02-11 11:45:32 +01:00
await _hooksRepository . AddNew ( newHook ) ;
2019-11-08 15:15:15 +00:00
_logger . LogInformation ( "Received hook was processed." ) ;
2019-02-06 19:59:26 +01:00
return Ok ( newHook ) ;
2019-01-29 19:34:57 +01:00
}
2019-11-08 15:15:15 +00:00
_logger . LogInformation ( "Received hook is NOT processed - Bad Request returned." ) ;
2019-01-29 19:34:57 +01:00
return BadRequest ( ) ;
}
}
}