From b088eb089f5d39bb0f9c4001b7240debdf687044 Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 20 Nov 2025 10:30:49 +0100 Subject: [PATCH] feat(EnvelopeCookieManager): add EnvelopeCookieManager to support envelope-specific cookie names - Introduce EnvelopeCookieManager wrapper around ChunkingCookieManager to generate dynamic cookie names based on envelopeReceiverId or envKey. Ensures request/response cookies are scoped per envelope. --- .../EnvelopeCookieManager.cs | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 EnvelopeGenerator.Web/EnvelopeCookieManager.cs diff --git a/EnvelopeGenerator.Web/EnvelopeCookieManager.cs b/EnvelopeGenerator.Web/EnvelopeCookieManager.cs new file mode 100644 index 00000000..5c31b558 --- /dev/null +++ b/EnvelopeGenerator.Web/EnvelopeCookieManager.cs @@ -0,0 +1,49 @@ +using Microsoft.AspNetCore.Authentication.Cookies; + +namespace EnvelopeGenerator.Web; + +public class EnvelopeCookieManager : ICookieManager +{ + private readonly IEnumerable _envelopeKeyBasedCookieNames; + + private readonly ChunkingCookieManager _inner = new(); + + public EnvelopeCookieManager(params string[] envelopeKeyBasedCookieNames) + { + _envelopeKeyBasedCookieNames = envelopeKeyBasedCookieNames; + } + + private string GetCookieName(HttpContext context, string key) + { + if (!_envelopeKeyBasedCookieNames.Contains(key)) + return key; + + var envId = context.GetRouteValue("envelopeReceiverId")?.ToString(); + + if (string.IsNullOrEmpty(envId) && context.Request.Query.TryGetValue("envKey", out var envKeyValue)) + envId = envKeyValue; + + if (string.IsNullOrEmpty(envId)) + return key; + + return $"{key}-{envId}"; + } + + public string? GetRequestCookie(HttpContext context, string key) + { + var cookieName = GetCookieName(context, key); + return _inner.GetRequestCookie(context, cookieName); + } + + public void AppendResponseCookie(HttpContext context, string key, string? value, CookieOptions options) + { + var cookieName = GetCookieName(context, key); + _inner.AppendResponseCookie(context, cookieName, value, options); + } + + public void DeleteCookie(HttpContext context, string key, CookieOptions options) + { + var cookieName = GetCookieName(context, key); + _inner.DeleteCookie(context, cookieName, options); + } +}