Adds the portal pair (shadowverse-portal.com deck-builder endpoints) as anonymous routes on the app server. The translation middleware learns a new [NoWireEncryption] attribute that skips both AES calls but keeps the rest of the msgpack + base64 + envelope pipeline intact, matching prod's portal wire profile observed in data_dumps/traffic_prod_deckcode.ndjson. Storage is a 3-minute IMemoryCache — codes are anonymous-global, 4-char lowercase alphanumeric (matches the shortest prod sample). Foil bit is stripped on mint to match prod's normalize-on-encode behaviour. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
13 lines
769 B
C#
13 lines
769 B
C#
namespace SVSim.EmulatedEntrypoint.Infrastructure;
|
|
|
|
/// <summary>
|
|
/// Applied to a controller or action that speaks the same msgpack + standard envelope as the
|
|
/// rest of the game API but WITHOUT the AES wrapper. Used for endpoints hosted on
|
|
/// <c>shadowverse-portal.com</c> (deck builder, deck image), which use plaintext msgpack on the
|
|
/// wire — see <c>docs/api-spec/endpoints/deck-builder/*.md</c>. The translation middleware
|
|
/// detects the attribute and skips <c>Encryption.Decrypt</c> / <c>Encryption.Encrypt</c>; the
|
|
/// base64 wrap on the response and the msgpack ↔ JSON pivot stay the same.
|
|
/// </summary>
|
|
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true)]
|
|
public sealed class NoWireEncryptionAttribute : Attribute { }
|