diff --git a/DysonNetwork.Gateway/Controllers/WellKnownController.cs b/DysonNetwork.Gateway/Controllers/WellKnownController.cs index 811ec68..d5129fb 100644 --- a/DysonNetwork.Gateway/Controllers/WellKnownController.cs +++ b/DysonNetwork.Gateway/Controllers/WellKnownController.cs @@ -1,3 +1,5 @@ +using System.Text; +using dotnet_etcd.interfaces; using Microsoft.AspNetCore.Mvc; using Yarp.ReverseProxy.Configuration; @@ -5,7 +7,10 @@ namespace DysonNetwork.Gateway.Controllers; [ApiController] [Route("/.well-known")] -public class WellKnownController(IConfiguration configuration, IProxyConfigProvider proxyConfigProvider) +public class WellKnownController( + IConfiguration configuration, + IProxyConfigProvider proxyConfigProvider, + IEtcdClient etcdClient) : ControllerBase { [HttpGet("domains")] @@ -16,6 +21,32 @@ public class WellKnownController(IConfiguration configuration, IProxyConfigProvi return Ok(domainMappings); } + [HttpGet("services")] + public IActionResult GetServices() + { + var local = configuration.GetValue("LocalMode"); + var response = etcdClient.GetRange("/services/"); + var kvs = response.Kvs; + + var serviceMap = kvs.ToDictionary( + kv => Encoding.UTF8.GetString(kv.Key.ToByteArray()).Replace("/services/", ""), + kv => Encoding.UTF8.GetString(kv.Value.ToByteArray()) + ); + + if (local) return Ok(serviceMap); + + var domainMappings = configuration.GetSection("DomainMappings").GetChildren() + .ToDictionary(x => x.Key, x => x.Value); + foreach (var (key, _) in serviceMap.ToList()) + { + if (!domainMappings.TryGetValue(key, out var domain)) continue; + if (domain is not null) + serviceMap[key] = domain; + } + + return Ok(serviceMap); + } + [HttpGet("routes")] public IActionResult GetProxyRules() { diff --git a/DysonNetwork.Gateway/appsettings.json b/DysonNetwork.Gateway/appsettings.json index 6d0486f..858b693 100644 --- a/DysonNetwork.Gateway/appsettings.json +++ b/DysonNetwork.Gateway/appsettings.json @@ -1,4 +1,5 @@ { + "LocalMode": true, "Logging": { "LogLevel": { "Default": "Information", diff --git a/DysonNetwork.Pass/Client/src/views/captcha.vue b/DysonNetwork.Pass/Client/src/views/captcha.vue index f30d490..7d7a815 100644 --- a/DysonNetwork.Pass/Client/src/views/captcha.vue +++ b/DysonNetwork.Pass/Client/src/views/captcha.vue @@ -1,10 +1,10 @@