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;
|
|
|
|
|
|
|
|
|
|
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-01-29 19:34:57 +01:00
|
|
|
|
|
2019-02-06 19:59:26 +01:00
|
|
|
|
public WebhooksReceivedController(IOptions<Settings> settings, ILogger<WebhooksReceivedController> logger)
|
2019-01-29 19:34:57 +01:00
|
|
|
|
{
|
|
|
|
|
_settings = settings.Value;
|
2019-02-06 19:59:26 +01:00
|
|
|
|
_logger = logger;
|
2019-01-29 19:34:57 +01:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-06 19:59:26 +01:00
|
|
|
|
[HttpPost]
|
2019-01-29 19:34:57 +01:00
|
|
|
|
public IActionResult NewWebhook(WebhookData hook)
|
|
|
|
|
{
|
|
|
|
|
var header = Request.Headers[HeaderNames.WebHookCheckHeader];
|
|
|
|
|
var token = header.FirstOrDefault();
|
2019-02-06 19:59:26 +01:00
|
|
|
|
|
|
|
|
|
_logger.LogInformation($"Received hook with token {token}. My token is {_settings.Token}. Token validation is set to {_settings.ValidateToken}");
|
|
|
|
|
|
2019-01-29 19:34:57 +01:00
|
|
|
|
if (!_settings.ValidateToken || _settings.Token == token)
|
|
|
|
|
{
|
2019-02-06 19:59:26 +01:00
|
|
|
|
_logger.LogInformation($"Received hook is processed");
|
2019-01-29 19:34:57 +01:00
|
|
|
|
var received = HttpContext.Session.Get<IEnumerable<WebHookReceived>>(SessionKeys.HooksKey)?.ToList() ?? new List<WebHookReceived>();
|
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
|
|
|
|
};
|
|
|
|
|
received.Add(newHook);
|
|
|
|
|
HttpContext.Session.Set<IEnumerable<WebHookReceived>>(SessionKeys.HooksKey, received);
|
|
|
|
|
return Ok(newHook);
|
2019-01-29 19:34:57 +01:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-06 19:59:26 +01:00
|
|
|
|
_logger.LogInformation($"Received hook is NOT processed - Bad Request returned.");
|
2019-01-29 19:34:57 +01:00
|
|
|
|
return BadRequest();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|