From df732616d5f9125ee3860d5761447d24c54f9617 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 6 Sep 2025 14:06:41 +0800 Subject: [PATCH] :sparkles: IP Check endpoints --- .../Controllers/WellKnownController.cs | 29 +++++++++++++++ DysonNetwork.Pass/IpCheckController.cs | 37 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 DysonNetwork.Pass/IpCheckController.cs diff --git a/DysonNetwork.Gateway/Controllers/WellKnownController.cs b/DysonNetwork.Gateway/Controllers/WellKnownController.cs index 94078f0..3f1c16c 100644 --- a/DysonNetwork.Gateway/Controllers/WellKnownController.cs +++ b/DysonNetwork.Gateway/Controllers/WellKnownController.cs @@ -13,6 +13,35 @@ public class WellKnownController( IEtcdClient etcdClient) : ControllerBase { + public class IpCheckResponse + { + public string? RemoteIp { get; set; } + public string? XForwardedFor { get; set; } + public string? XForwardedProto { get; set; } + public string? XForwardedHost { get; set; } + public string? XRealIp { get; set; } + } + + [HttpGet("ip-check")] + public ActionResult GetIpCheck() + { + var ip = HttpContext.Connection.RemoteIpAddress?.ToString(); + + var xForwardedFor = Request.Headers["X-Forwarded-For"].FirstOrDefault(); + var xForwardedProto = Request.Headers["X-Forwarded-Proto"].FirstOrDefault(); + var xForwardedHost = Request.Headers["X-Forwarded-Host"].FirstOrDefault(); + var realIp = Request.Headers["X-Real-IP"].FirstOrDefault(); + + return Ok(new IpCheckResponse + { + RemoteIp = ip, + XForwardedFor = xForwardedFor, + XForwardedProto = xForwardedProto, + XForwardedHost = xForwardedHost, + XRealIp = realIp + }); + } + [HttpGet("domains")] public IActionResult GetDomainMappings() { diff --git a/DysonNetwork.Pass/IpCheckController.cs b/DysonNetwork.Pass/IpCheckController.cs new file mode 100644 index 0000000..abc90f7 --- /dev/null +++ b/DysonNetwork.Pass/IpCheckController.cs @@ -0,0 +1,37 @@ +using Microsoft.AspNetCore.Mvc; + +namespace DysonNetwork.Pass; + +[ApiController] +[Route("/api/ip-check")] +public class IpCheckController : ControllerBase +{ + public class IpCheckResponse + { + public string? RemoteIp { get; set; } + public string? XForwardedFor { get; set; } + public string? XForwardedProto { get; set; } + public string? XForwardedHost { get; set; } + public string? XRealIp { get; set; } + } + + [HttpGet("ip-check")] + public ActionResult GetIpCheck() + { + var ip = HttpContext.Connection.RemoteIpAddress?.ToString(); + + var xForwardedFor = Request.Headers["X-Forwarded-For"].FirstOrDefault(); + var xForwardedProto = Request.Headers["X-Forwarded-Proto"].FirstOrDefault(); + var xForwardedHost = Request.Headers["X-Forwarded-Host"].FirstOrDefault(); + var realIp = Request.Headers["X-Real-IP"].FirstOrDefault(); + + return Ok(new IpCheckResponse + { + RemoteIp = ip, + XForwardedFor = xForwardedFor, + XForwardedProto = xForwardedProto, + XForwardedHost = xForwardedHost, + XRealIp = realIp + }); + } +} \ No newline at end of file