eShopOnContainers/src/Web/WebhookClient/Controllers/WebhooksReceivedController.cs

55 lines
1.9 KiB
C#
Raw Normal View History

2019-01-29 19:34:57 +01:00
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
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;
private readonly ILogger _logger;
2019-01-29 19:34:57 +01:00
public WebhooksReceivedController(IOptions<Settings> settings, ILogger<WebhooksReceivedController> logger)
2019-01-29 19:34:57 +01:00
{
_settings = settings.Value;
_logger = logger;
2019-01-29 19:34:57 +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();
_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)
{
_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>();
var newHook = new WebHookReceived()
2019-01-29 19:34:57 +01:00
{
Data = hook.Payload,
When = hook.When,
Token = token
};
received.Add(newHook);
HttpContext.Session.Set<IEnumerable<WebHookReceived>>(SessionKeys.HooksKey, received);
return Ok(newHook);
2019-01-29 19:34:57 +01:00
}
_logger.LogInformation($"Received hook is NOT processed - Bad Request returned.");
2019-01-29 19:34:57 +01:00
return BadRequest();
}
}
}