IpWhiteListMiddleware.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System.Net;
  2. namespace DopInterfacePlatform
  3. {
  4. public class IpWhiteListMiddleware
  5. {
  6. private readonly RequestDelegate _next;
  7. private readonly ILogger<IpWhiteListMiddleware> _logger;
  8. private readonly string _adminSafeList;
  9. public IpWhiteListMiddleware(
  10. RequestDelegate next,
  11. ILogger<IpWhiteListMiddleware> logger,
  12. string adminSafeList)
  13. {
  14. _adminSafeList = adminSafeList;
  15. _next = next;
  16. _logger = logger;
  17. }
  18. public async Task Invoke(HttpContext context)
  19. {
  20. if (context.Request.Method != "GET")
  21. {
  22. var remoteIp = context.Connection.RemoteIpAddress;
  23. _logger.LogDebug($"Request from Remote IP address: {remoteIp}");
  24. string[] ip = _adminSafeList.Split(';');
  25. var bytes = remoteIp.GetAddressBytes();
  26. var badIp = true;
  27. foreach (var address in ip)
  28. {
  29. var testIp = IPAddress.Parse(address);
  30. if (testIp.GetAddressBytes().SequenceEqual(bytes))
  31. {
  32. badIp = false;
  33. break;
  34. }
  35. }
  36. if (badIp)
  37. {
  38. _logger.LogInformation(
  39. $"Forbidden Request from Remote IP address: {remoteIp}");
  40. context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
  41. return;
  42. }
  43. }
  44. await _next.Invoke(context);
  45. }
  46. }
  47. }