using System.Text.Encodings.Web; using Microsoft.AspNetCore.Antiforgery; using Microsoft.Extensions.Options; public sealed class LiveSettings { public string Label { get; set; }="initial"; public int Maximum { get; set; }=3; public string Secret { get; set; }=""; } public static class SecurityLabs { private static int submissions; public static void Map(WebApplication app,EvidenceLog evidence) { app.MapGet("/configuration",(IOptionsMonitor monitor)=> { try { var value=monitor.CurrentValue; return Results.Ok(new { value.Label,value.Maximum,hasSecret=!string.IsNullOrEmpty(value.Secret) }); } catch(OptionsValidationException) { return Results.Problem(statusCode:503,title:"Current configuration is invalid"); } }); app.MapGet("/cors/data",(HttpContext context)=>Results.Ok(new { value="public classroom data",authenticated=context.User.Identity?.IsAuthenticated??false })); app.MapGet("/antiforgery/token",(HttpContext context,IAntiforgery anti)=> { var tokens=anti.GetAndStoreTokens(context); return Results.Ok(new { requestToken=tokens.RequestToken }); }); app.MapPost("/antiforgery/submit",async(HttpContext context,IAntiforgery anti)=> { try { await anti.ValidateRequestAsync(context); } catch(AntiforgeryValidationException) { return Results.BadRequest(new { error="Antiforgery validation failed" }); } return Results.Ok(new { accepted=Interlocked.Increment(ref submissions) }); }); app.MapGet("/antiforgery/count",()=>new { count=Volatile.Read(ref submissions) }); app.MapGet("/encoded",(string? name)=>Results.Content("

"+HtmlEncoder.Default.Encode(name??"")+"

","text/html; charset=utf-8")); app.MapGet("/proxy",(HttpContext context)=>new { scheme=context.Request.Scheme,remote=context.Connection.RemoteIpAddress?.ToString(),host=context.Request.Host.Value }); app.MapGet("/canonical",(HttpContext context)=>new { observedHost=context.Request.Host.Value,url=new Uri(new Uri("https://public.example.test/"),"items/7").AbsoluteUri }); app.MapGet("/privacy/observe",(string? email,string? operation,PrivacySignals signals,ILoggerFactory logs)=> { string safe=signals.Record(operation??""); string identity=string.IsNullOrEmpty(email)?"anonymous":"redacted"; logs.CreateLogger("ProductionPrivacy").LogInformation("Handled {Operation} for {Identity}",safe,identity); return Results.Ok(new { operation=safe,identity }); }); app.MapGet("/privacy/evidence",(PrivacySignals signals)=>new { messages=evidence.Snapshot(),metricLabels=signals.Labels() }); } }