Fluent.Backdoor
1.0.8
See the version list below for details.
dotnet add package Fluent.Backdoor --version 1.0.8
NuGet\Install-Package Fluent.Backdoor -Version 1.0.8
<PackageReference Include="Fluent.Backdoor" Version="1.0.8" />
paket add Fluent.Backdoor --version 1.0.8
#r "nuget: Fluent.Backdoor, 1.0.8"
// Install Fluent.Backdoor as a Cake Addin #addin nuget:?package=Fluent.Backdoor&version=1.0.8 // Install Fluent.Backdoor as a Cake Tool #tool nuget:?package=Fluent.Backdoor&version=1.0.8
Fluent.Backdoor
If you need to keep your app services on a tight leash, while still being able to verify app slots using smoke tests and perhaps warmups, then this could help you. A need based on keeping an app-service url hidden, while warming up a production slot in Azure made me create this little configurable function.
The syntax is:
- What do we Require() (IP/Cookie/Queystring)? And if fulfilled:
- how long will it Allow() access?
Simple, right?
Multiple Require() can be chained together for more complex rules.
In the end a ReturnCodeWhenDenied() and Finally() is used to wrap it up.
Sample usage of Fluent.Backdoor
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
var options = new RewriteOptions();
var fluent = new BackdoorRule().AllowAnythingFor(2)
.Require(new BackdoorMagicCookie()
{
CookieName = Configuration["FluentBackDoorRules:FluentMagicCookie:CookieName"],
CookieValue = Configuration["FluentBackDoorRules:FluentMagicCookie:CookieValue"]
})
.Require(new BackdoorMagicCookie()
{
CookieName = "hey",
CookieValue = "ho"
}).AndAllowFor(new TimeSpan(0, 0, 10))
.Require(new BackdoorMagicQuerystring
{
QuerystringName = Configuration["FluentBackDoorRules:FluentMagicQuerystring:QuerystringName"],
QuerystringValue = Configuration["FluentBackDoorRules:FluentMagicQuerystring:QuerystringValue"]
}).AndAllowFor(new TimeSpan(0, 0, 20))
.Require(new BackdoorMagicQuerystring
{
QuerystringName = "hey",
QuerystringValue = "ho"
}).AndAllowFor(new TimeSpan(0, 0, 20))
.Require(new BackdoorHttpHostAndRemoteIPAddress
{
HostNamesToProtect = Configuration["FluentBackDoorRules:FluentMagicRegExHttpHost_RemoteAddr:HostNamesToProtect"],
IPAddressesToAllowToUseProtectedUrls = Configuration["FluentBackDoorRules:FluentMagicRegExHttpHost_RemoteAddr:IPAddressesToAllowToUseProtectedUrls"]
}).AndAllowFor(new TimeSpan(TimeSpan.MaxValue.Ticks))
.ReturnCodeWhenDenied(System.Net.HttpStatusCode.Unauthorized)
.Finalize();
options.Rules.Add(fluent);
app.UseRewriter(options);
}
appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"FluentBackDoorRules": {
"CompleteAccess": {
"TimeAllowedInSeconds": 20
},
"FluentMagicCookie": {
"CookieName": "cookieshallpass",
"CookieValue": "xxx"
},
"FluentMagicQuerystring": {
"QuerystringName": "querystringshallpass",
"QuerystringValue": "xxx"
},
"FluentMagicRegExHttpHost_RemoteAddr": {
"HostNamesToProtect": "inte\\.|prep\\.|-slot\\.|prod\\.|stage\\.|stage2\\.|www2\\.",
"IPAddressesToAllowToUseProtectedUrls": "^5\\.6\\.7\\8.$"
}
}
}
Example code above will:
- Allow any calls to the app 2 times.
- Allow access to the app for 10 second if two different cookies are present.
- Allow access to the app for 20 seconds if a querystring is supplied.
- Restrict access to the app if the HTTP_HOST contains HostNamesToProtect (RegEx-matching) and NOT in then list of IPAddressesToAllowToUseProtectedUrls (Remote_Addr).
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Microsoft.AspNetCore.Rewrite (>= 2.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.17 | 983 | 6/24/2022 |
1.0.16 | 427 | 6/21/2022 |
1.0.15 | 422 | 6/21/2022 |
1.0.14 | 422 | 6/21/2022 |
1.0.12 | 417 | 6/21/2022 |
1.0.11 | 409 | 6/19/2022 |
1.0.10 | 415 | 6/19/2022 |
1.0.9 | 407 | 6/19/2022 |
1.0.8 | 396 | 6/19/2022 |
1.0.7 | 411 | 6/19/2022 |
1.0.6 | 421 | 6/19/2022 |
1.0.5 | 419 | 6/19/2022 |
1.0.1 | 425 | 6/19/2022 |
1.0.0 | 427 | 6/19/2022 |