diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/EnvelopeGenerator.Server.csproj b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/EnvelopeGenerator.Server.csproj index 62f114a9..c27b4247 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/EnvelopeGenerator.Server.csproj +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/EnvelopeGenerator.Server.csproj @@ -42,6 +42,7 @@ + diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs index 8fe5acf8..0ed711b3 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs @@ -32,6 +32,9 @@ try { var builder = WebApplication.CreateBuilder(args); + // Load YARP configuration from yarp.json + builder.Configuration.AddJsonFile("yarp.json", optional: true, reloadOnChange: true); + builder.Logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); if (!builder.Environment.IsDevelopment()) @@ -53,6 +56,10 @@ try builder.Services.AddControllers(); builder.Services.AddHttpClient(); + // YARP Reverse Proxy (for forwarding auth requests to AuthHub) + builder.Services.AddReverseProxy() + .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy")); + // HttpContextAccessor needed for SSR HttpClient configuration builder.Services.AddHttpContextAccessor(); @@ -370,6 +377,9 @@ try // API Controllers (map before Blazor routing) app.MapControllers(); + // YARP Reverse Proxy - forwards unmatched requests to configured backends + app.MapReverseProxy(); + // Blazor routing app.MapRazorComponents() .AddInteractiveServerRenderMode() diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/yarp.json b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/yarp.json index 63b6fb2e..d5bd365b 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/yarp.json +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/yarp.json @@ -1,39 +1,39 @@ { "ReverseProxy": { "Routes": { - "api-route": { - "ClusterId": "api-cluster", + "auth-login": { + "ClusterId": "auth-hub", "Match": { - "Path": "/api/{**catch-all}" - } + "Path": "/api/auth", + "Methods": [ "POST" ] + }, + "Transforms": [ + { "PathSet": "/api/auth/sign-flow" } + ] }, - "swagger-route": { - "ClusterId": "api-cluster", + "auth-envelope-receiver-login": { + "ClusterId": "auth-hub", "Match": { - "Path": "/swagger/{**catch-all}" - } - }, - "openapi-route": { - "ClusterId": "api-cluster", - "Match": { - "Path": "/openapi/{**catch-all}" - } - }, - "scalar-route": { - "ClusterId": "api-cluster", - "Match": { - "Path": "/scalar/{**catch-all}" - } + "Path": "/api/Auth/envelope-receiver/{key}", + "Methods": [ "POST" ] + }, + "Transforms": [ + { "PathPattern": "/api/auth/envelope-receiver/{key}" }, + { + "QueryValueParameter": "cookie", + "Set": "true" + } + ] } }, "Clusters": { - "api-cluster": { + "auth-hub": { "Destinations": { - "api-destination": { - "Address": "https://localhost:8088" + "primary": { + "Address": "https://localhost:9090" } } } } } -} +} \ No newline at end of file