Skip to content

Instantly share code, notes, and snippets.

View dj-nitehawk's full-sized avatar

Dĵ ΝιΓΞΗΛψΚ dj-nitehawk

View GitHub Profile
@dj-nitehawk
dj-nitehawk / AppFixture.cs
Last active May 2, 2024 06:43
Integration testing with TestContainers & AppFixture
using Testcontainers.MongoDb;
public class Sut : AppFixture<Program>
{
const string Database = "TestingDB";
const string RootUsername = "root";
const string RootPassword = "password";
MongoDbContainer _container = null!;
@dj-nitehawk
dj-nitehawk / Instructions.md
Last active April 14, 2024 07:31
How to import FE Live-Templates for JetBrains Rider

JetBrains Rider LiveTemplates import procedure

  1. Save the following LiveTemplates.DotSettings file to your computer (by right-clicking and selecting Save Link As).
  2. Open any project in Rider.
  3. Click Settings > Manage Layers (located in the left bottom corner).
  4. Right click This Computer > Import From > Import From File
  5. Select the downloaded LiveTemplates.DotSettings
  6. Click close.

That's it... These shortcuts should now be available for you to scaffold code snippets in Rider.

@dj-nitehawk
dj-nitehawk / Program.cs
Created January 21, 2024 05:40
Results pattern with a Post-Processor doing the response sending.
var bld = WebApplication.CreateBuilder(args);
bld.Services
.AddFastEndpoints()
.SwaggerDocument();
var app = bld.Build();
app.UseFastEndpoints()
.UseSwaggerGen();
app.Run();
@dj-nitehawk
dj-nitehawk / Index.html
Created March 24, 2024 02:07
Streaming JSON response with `IAsyncEnumerable`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Streaming Response Viewer</title>
<script>
async function streamResponse(url) {
const response = await fetch(url);
const reader = response.body.getReader();
@dj-nitehawk
dj-nitehawk / ApiKeyAuth.cs
Last active March 5, 2024 15:17
API Key Authentication With FastEndpoints + Swagger
sealed class ApikeyAuth(IOptionsMonitor<AuthenticationSchemeOptions> options,
ILoggerFactory logger,
UrlEncoder encoder,
IConfiguration config)
: AuthenticationHandler<AuthenticationSchemeOptions>(options, logger, encoder)
{
internal const string SchemeName = "ApiKey";
internal const string HeaderName = "x-api-key";
readonly string _apiKey = config["Auth:ApiKey"] ?? throw new InvalidOperationException("Api key not set in appsettings.json");
@dj-nitehawk
dj-nitehawk / Program.cs
Last active March 5, 2024 05:18
Asymmetric JWT token usage example
bld.Services.AddAuthenticationJwtBearer(
s =>
{
s.SigningKey = "public key";
s.SigningStyle = TokenSigningStyle.Asymmetric;
s.KeyIsPemEncoded = true; // only if public key is in PEM format
},
b =>
{
b.TokenValidationParameters.ValidIssuer = "issuer";
@dj-nitehawk
dj-nitehawk / Program.cs
Last active March 3, 2024 07:59
Customizing Swagger Middleware & UI Paths
app.UseSwaggerGen(
s =>
{
//where to serve swagger.json files from
s.Path = "/PREFIX/swagger/{documentName}/swagger.json";
//api endpoint server base path customization
s.PostProcess = (document, request) =>
{
document.Servers.Clear();
@dj-nitehawk
dj-nitehawk / AuthenticationHandler.cs
Created February 24, 2024 06:45
Basic Authentication With Swagger Support
public class BasicAuth(IOptionsMonitor<AuthenticationSchemeOptions> options,
ILoggerFactory logger,
UrlEncoder encoder)
: AuthenticationHandler<AuthenticationSchemeOptions>(options, logger, encoder)
{
internal const string SchemeName = "Basic";
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
if (IsPublicEndpoint() || !Request.Headers.ContainsKey("Authorization"))
@dj-nitehawk
dj-nitehawk / Program.cs
Last active January 23, 2024 04:14
Registration of additional assemblies for type discovery
bld.Services.AddFastEndpoints(
o => o.Assemblies = new[]
{
typeof(SomeAssemblyName).Assembly,
typeof(AnotherAssemblyName).Assembly
});
//this also enables bypassing the default blacklist of assemblies: https://github.com/FastEndpoints/FastEndpoints/blob/main/Src/Library/Main/EndpointData.cs#L28-L48
@dj-nitehawk
dj-nitehawk / Program.cs
Last active January 17, 2024 03:42
Endpoint Grouping With FastEndpoints
using FastEndpoints;
using FastEndpoints.Swagger;
var bld = WebApplication.CreateBuilder();
bld.Services
.AddAuthorization()
.AddFastEndpoints()
.SwaggerDocument(o => o.AutoTagPathSegmentIndex = 0);
var app = bld.Build();