diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/App.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/App.razor index 363c9a67..15f19278 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/App.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Components/App.razor @@ -10,15 +10,58 @@ + + + +
+
+
+
+
+ + diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Controllers/CustomImagesController.cs b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Controllers/CustomImagesController.cs new file mode 100644 index 00000000..3dc6fbba --- /dev/null +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Controllers/CustomImagesController.cs @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using EnvelopeGenerator.Domain.Constants; +using EnvelopeGenerator.Server.Models; + +namespace EnvelopeGenerator.Server.Controllers; + +/// +/// Exposes the CustomImages configuration (signFLOW logo + company logo) to WASM clients. +/// Values are sourced from appsettings.json "CustomImages" section via Options Pattern. +/// +/// To change logos per deployment: update "CustomImages.App.Src", "App.Height", +/// "Company.Src", "Company.Height" in appsettings.json — no code change required. +/// +[ApiController] +[Route("api/[controller]")] +[Authorize(Policy = AuthPolicy.SenderOrReceiver)] +public class CustomImagesController(IOptions options) : ControllerBase +{ + /// + /// Returns the signFLOW app logo and company logo configuration. + /// + [HttpGet] + public ActionResult Get() => Ok(options.Value); +} diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs index d8aadebd..d8de46d4 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs @@ -326,12 +326,17 @@ try // User Preferences (theme, dark mode, grid layouts — stored in TBDD_CACHE) // Registration handled by Infrastructure DependencyInjection (AddEnvelopeGeneratorInfrastructureServices) + // CustomImages — logo sources and heights, configurable per deployment via appsettings.json + builder.Services.Configure( + config.GetSection(EnvelopeGenerator.Server.Models.CustomImagesOptions.SectionName)); + // Client-side services that MainLayout depends on must also be registered here // so that Blazor Auto prerender (SSR pass) can resolve them on the server. // ThemeService.InitializeAsync() uses IJSRuntime but is only called in OnAfterRenderAsync // (never during prerender), so registering it server-side is safe. builder.Services.AddScoped(); builder.Services.AddScoped(); + builder.Services.AddScoped(); // Business Services (Server specific) builder.Services.AddScoped(); diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/appsettings.json b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/appsettings.json index e763a015..a3a63a85 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/appsettings.json +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/appsettings.json @@ -145,15 +145,17 @@ "CustomImages": { "App": { "Src": "/img/DD_signFLOW_LOGO.png", + "Height": "28px", "Classes": { - "Main": "signFlow-logo" + "Main": "signflow-app-logo" } }, "Company": { "Src": "/img/digital_data.svg", + "Height": "33px", "Classes": { - "Show": "dd-show-logo", - "Locked": "dd-locked-logo" + "Show": "signflow-company-logo", + "Locked": "signflow-company-logo" } } },