From abe04db6278c0aa14f49e2fcae8cd69b0ae7553b Mon Sep 17 00:00:00 2001 From: andrewlalis Date: Sat, 9 Aug 2025 09:45:10 -0400 Subject: [PATCH] Added readConfig() to configure app for production environment. --- .../Finnow/environments/Finnow-Prod.bru | 6 ++++++ finnow-api/source/api_mapping.d | 12 +++++++---- finnow-api/source/app.d | 20 ++++++++++++++++++- 3 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 finnow-api/bruno-api/Finnow/environments/Finnow-Prod.bru diff --git a/finnow-api/bruno-api/Finnow/environments/Finnow-Prod.bru b/finnow-api/bruno-api/Finnow/environments/Finnow-Prod.bru new file mode 100644 index 0000000..4f525ce --- /dev/null +++ b/finnow-api/bruno-api/Finnow/environments/Finnow-Prod.bru @@ -0,0 +1,6 @@ +vars { + username: testuser0 + password: testpass + profile: test-profile-0 + base_url: https://finnow.andrewlalis.com/api +} diff --git a/finnow-api/source/api_mapping.d b/finnow-api/source/api_mapping.d index 018e8bc..84efb5d 100644 --- a/finnow-api/source/api_mapping.d +++ b/finnow-api/source/api_mapping.d @@ -9,9 +9,11 @@ private const API_PATH = "/api"; /** * Defines the Finnow API mapping with a main PathHandler. + * Params: + * webOrigin: The origin to use when configuring CORS headers. * Returns: The handler to plug into an HttpServer. */ -HttpRequestHandler mapApiHandlers() { +HttpRequestHandler mapApiHandlers(string webOrigin) { PathHandler h = new PathHandler(); // Generic, public endpoints: @@ -71,7 +73,7 @@ HttpRequestHandler mapApiHandlers() { a )); - return new CorsHandler(h); + return new CorsHandler(h, webOrigin); } private void getStatus(ref ServerHttpRequest request, ref ServerHttpResponse response) { @@ -108,13 +110,15 @@ private void map( private class CorsHandler : HttpRequestHandler { private HttpRequestHandler handler; + private string webOrigin; - this(HttpRequestHandler handler) { + this(HttpRequestHandler handler, string webOrigin) { this.handler = handler; + this.webOrigin = webOrigin; } void handle(ref ServerHttpRequest request, ref ServerHttpResponse response) { - response.headers.add("Access-Control-Allow-Origin", "http://localhost:5173"); + response.headers.add("Access-Control-Allow-Origin", webOrigin); response.headers.add("Access-Control-Allow-Methods", "*"); response.headers.add("Access-Control-Allow-Headers", "Authorization, Content-Type"); try { diff --git a/finnow-api/source/app.d b/finnow-api/source/app.d index 68bdc60..bcfd471 100644 --- a/finnow-api/source/app.d +++ b/finnow-api/source/app.d @@ -4,10 +4,28 @@ import slf4d.default_provider; import api_mapping; +struct AppConfig { + ushort port; + string webOrigin; +} + void main() { + const AppConfig config = readConfig(); auto provider = new DefaultProvider(Levels.INFO); configureLoggingProvider(provider); - HttpTransport transport = new TaskPoolHttp1Transport(mapApiHandlers()); + HttpTransport transport = new TaskPoolHttp1Transport(mapApiHandlers(config.webOrigin), config.port); transport.start(); } + +AppConfig readConfig() { + import std.file : exists, readText; + import std.json; + import std.conv : to; + // Local dev environment if no config is given. + if (!exists("finnow-api-config.json")) { + return AppConfig(8080, "http://localhost:5173"); + } + JSONValue obj = parseJSON(readText("finnow-api-config.json")); + return AppConfig(obj.object["port"].integer.to!ushort, obj.object["webOrigin"].str); +}