improve new features · sdaves/NpgsqlRest@c57c13f · GitHub
Skip to content

Commit c57c13f

Browse files
committed
improve new features
1 parent 5ab3614 commit c57c13f

7 files changed

Lines changed: 233 additions & 25 deletions

File tree

.github/workflows/build-test-publish.yml

Lines changed: 12 additions & 1 deletion

NpgsqlRestClient/Builder.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,7 +1008,16 @@ public bool ConfigureAntiForgery()
10081008
CrossOriginResourcePolicy = _config.GetConfigStr("CrossOriginResourcePolicy", cfg)
10091009
};
10101010

1011-
ClientLogger?.LogDebug("Security headers middleware enabled.");
1011+
var enabledHeaders = new List<string>();
1012+
if (config.XContentTypeOptions is not null) enabledHeaders.Add("X-Content-Type-Options");
1013+
if (config.XFrameOptions is not null) enabledHeaders.Add("X-Frame-Options");
1014+
if (config.ReferrerPolicy is not null) enabledHeaders.Add("Referrer-Policy");
1015+
if (config.ContentSecurityPolicy is not null) enabledHeaders.Add("Content-Security-Policy");
1016+
if (config.PermissionsPolicy is not null) enabledHeaders.Add("Permissions-Policy");
1017+
if (config.CrossOriginOpenerPolicy is not null) enabledHeaders.Add("Cross-Origin-Opener-Policy");
1018+
if (config.CrossOriginEmbedderPolicy is not null) enabledHeaders.Add("Cross-Origin-Embedder-Policy");
1019+
if (config.CrossOriginResourcePolicy is not null) enabledHeaders.Add("Cross-Origin-Resource-Policy");
1020+
ClientLogger?.LogDebug("Security headers middleware enabled: {Headers}", string.Join(", ", enabledHeaders));
10121021
return config;
10131022
}
10141023

@@ -1061,7 +1070,11 @@ public bool BuildForwardedHeaders()
10611070
}
10621071
});
10631072

1064-
ClientLogger?.LogDebug("Forwarded headers middleware enabled.");
1073+
var forwardLimit = _config.GetConfigInt("ForwardLimit", cfg) ?? 1;
1074+
var knownProxiesCount = _config.GetConfigEnumerable("KnownProxies", cfg)?.Count() ?? 0;
1075+
var knownNetworksCount = _config.GetConfigEnumerable("KnownNetworks", cfg)?.Count() ?? 0;
1076+
ClientLogger?.LogDebug("Forwarded headers middleware enabled: ForwardLimit={ForwardLimit}, KnownProxies={KnownProxies}, KnownNetworks={KnownNetworks}",
1077+
forwardLimit, knownProxiesCount, knownNetworksCount);
10651078
return true;
10661079
}
10671080

@@ -1081,7 +1094,10 @@ public bool BuildHealthChecks(string? connectionString)
10811094
builder.AddNpgSql(connectionString, name: dbName, tags: ["ready"]);
10821095
}
10831096

1084-
ClientLogger?.LogDebug("Health checks endpoints configured.");
1097+
var path = _config.GetConfigStr("Path", cfg) ?? "/health";
1098+
var readyPath = _config.GetConfigStr("ReadyPath", cfg) ?? "/health/ready";
1099+
var livePath = _config.GetConfigStr("LivePath", cfg) ?? "/health/live";
1100+
ClientLogger?.LogDebug("Health checks endpoints configured: {Path}, {ReadyPath}, {LivePath}", path, readyPath, livePath);
10851101
return true;
10861102
}
10871103

NpgsqlRestClient/ConfigDefaults.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,9 @@ private static JsonObject GetHealthChecksDefaults()
402402
["LivePath"] = "/health/live",
403403
["IncludeDatabaseCheck"] = true,
404404
["DatabaseCheckName"] = "postgresql",
405-
["CacheDurationSeconds"] = 5
405+
["CacheDurationSeconds"] = 5,
406+
["RequireAuthorization"] = false,
407+
["RateLimiterPolicy"] = null
406408
};
407409
}
408410

NpgsqlRestClient/Program.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -341,16 +341,32 @@
341341
var path = config.GetConfigStr("Path", healthCfg) ?? "/health";
342342
var readyPath = config.GetConfigStr("ReadyPath", healthCfg) ?? "/health/ready";
343343
var livePath = config.GetConfigStr("LivePath", healthCfg) ?? "/health/live";
344+
var requireAuthorization = config.GetConfigBool("RequireAuthorization", healthCfg);
345+
var rateLimiterPolicy = config.GetConfigStr("RateLimiterPolicy", healthCfg);
344346

345-
app.MapHealthChecks(path);
346-
app.MapHealthChecks(readyPath, new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
347+
var healthEndpoint = app.MapHealthChecks(path);
348+
var readyEndpoint = app.MapHealthChecks(readyPath, new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
347349
{
348350
Predicate = check => check.Tags.Contains("ready")
349351
});
350-
app.MapHealthChecks(livePath, new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
352+
var liveEndpoint = app.MapHealthChecks(livePath, new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
351353
{
352354
Predicate = _ => false // Always healthy if app is running
353355
});
356+
357+
if (requireAuthorization)
358+
{
359+
healthEndpoint.RequireAuthorization();
360+
readyEndpoint.RequireAuthorization();
361+
liveEndpoint.RequireAuthorization();
362+
}
363+
364+
if (rateLimiterPolicy is not null)
365+
{
366+
healthEndpoint.RequireRateLimiting(rateLimiterPolicy);
367+
readyEndpoint.RequireRateLimiting(rateLimiterPolicy);
368+
liveEndpoint.RequireRateLimiting(rateLimiterPolicy);
369+
}
354370
}
355371

356372
app.Run();

NpgsqlRestClient/appsettings.json

Lines changed: 17 additions & 1 deletion

0 commit comments

Comments
 (0)