diff --git a/COPILOT_CONTEXT_EN.md b/COPILOT_CONTEXT_EN.md index 9bbb5736..1cfb6a30 100644 --- a/COPILOT_CONTEXT_EN.md +++ b/COPILOT_CONTEXT_EN.md @@ -7,6 +7,51 @@ Digital document signing system with **unified Blazor WASM frontend** for both S --- +## Deployment Architecture + +**Two Presentation Projects (Both Required):** + +1. **EnvelopeGenerator.API** (ASP.NET Core Web API) + - Runs independently (development & production) + - **YARP Reverse Proxy** configured via `yarp.json` + - Proxies requests to: + - `EnvelopeGenerator.ReceiverUI` (Blazor WASM) + - External Auth.API service + - Serves as single entry point for all requests + +2. **EnvelopeGenerator.ReceiverUI** (Blazor WebAssembly) + - Runs on separate host/port + - Accessed **only through API proxy** (not directly) + - Serves static files (HTML, JS, CSS, WASM) + +**Request Flow:** +``` +Client ? API:8088 (YARP Proxy) ? ReceiverUI:52936 (Blazor WASM) + ? Auth.API:9090 (External Auth Service) +``` + +**Configuration:** `EnvelopeGenerator.API/yarp.json` + +--- + +## ReceiverUI Route Structure + +### Sender Routes +| Route | File | Purpose | +|---|---|---| +| `/sender/login` | `LoginSender.razor` | Username/password authentication | +| `/sender` | `EnvelopeSender.razor` | Sender dashboard (envelope list) | + +### Receiver Routes +| Route | File | Purpose | +|---|---|---| +| `/envelope/login/{EnvelopeKey}` | `LoginReceiver.razor` | Access code authentication for specific envelope | +| `/envelope/{EnvelopeKey}` | `EnvelopeReceiver.razor` | View & sign envelope (PDF.js viewer) | + +**Multi-Envelope Support:** Receivers can login to multiple envelopes simultaneously (per-envelope cookie authentication). + +--- + ## Architecture Evolution ### Old Architecture (Deprecated) @@ -42,9 +87,10 @@ Digital document signing system with **unified Blazor WASM frontend** for both S | File | Route/Purpose | |---|---| -| `ReceiverUI/Pages/EnvelopeViewer.razor` | `/envelope/{key}` — PDF.js viewer (read-only). | -| `ReceiverUI/Pages/LoginReceiver.razor` | `/login/{EnvelopeKey}` — Access code auth. | -| `ReceiverUI/Pages/LoginSender.razor` | `/login` — Username/password auth. | +| `ReceiverUI/Pages/EnvelopeSender.razor` | `/sender` — Sender dashboard (envelope list). | +| `ReceiverUI/Pages/EnvelopeReceiver.razor` | `/envelope/{key}` — Receiver PDF viewer & signing. | +| `ReceiverUI/Pages/LoginSender.razor` | `/sender/login` — Sender username/password auth. | +| `ReceiverUI/Pages/LoginReceiver.razor` | `/envelope/login/{EnvelopeKey}` — Receiver access code auth. | | `ReceiverUI/wwwroot/js/pdf-viewer.js` | PDF.js wrapper (zoom, pagination, thumbnails). | | `ReceiverUI/wwwroot/js/receiver-signature.js` | Signature pad (draw/type/image). | | `ReceiverUI/wwwroot/css/envelope-viewer.css` | EnvelopeViewer styles. | @@ -83,11 +129,11 @@ Digital document signing system with **unified Blazor WASM frontend** for both S --- -## EnvelopeViewer — PDF.js Viewer +## EnvelopeReceiver — PDF.js Viewer & Signing **Route:** `/envelope/{EnvelopeKey}` **Tech:** PDF.js 3.11.174 + Blazor WASM + configurable quality -**File:** `ReceiverUI/Pages/EnvelopeViewer.razor` +**File:** `ReceiverUI/Pages/EnvelopeReceiver.razor` ### Key Features 1. HiDPI/Retina support (4x quality) @@ -126,7 +172,7 @@ window.pdfViewer = { --- -## Signature Workflow — EnvelopeViewer +## Signature Workflow — EnvelopeReceiver **IMPORTANT:** iText7 NOT used (GPL license issue). Client-side overlay system only. @@ -214,7 +260,7 @@ public class SignatureCacheService { ## Sender Login -**Route:** `/login` +**Route:** `/sender/login` **File:** `ReceiverUI/Pages/LoginSender.razor` **Tech:** Bootstrap 5 + DevExpress Blazing Berry theme @@ -246,7 +292,7 @@ public async Task LoginSenderAsync(string username, string pa ``` **Response:** -- `200 OK` ? Cookie set, redirect to `/` +- `200 OK` ? Cookie set, redirect to `/sender` - `401 Unauthorized` ? Show error: "Ungόltige Anmeldedaten" - Other ? Show error: "Serverfehler" @@ -256,16 +302,18 @@ public async Task LoginSenderAsync(string username, string pa 1. User enters username + password 2. Click "Anmelden" or press Enter 3. Call `AuthService.LoginSenderAsync()` -4. Success ? `Navigation.NavigateTo("/", forceLoad: true)` +4. Success ? `Navigation.NavigateTo("/sender", forceLoad: true)` 5. Error ? Display alert --- ## Receiver Login -**Route:** `/login/{EnvelopeKey}` +**Route:** `/envelope/login/{EnvelopeKey}` **File:** `ReceiverUI/Pages/LoginReceiver.razor` +**Multi-Envelope Support:** Cookies are stored per-envelope (e.g., `AuthTokenSignFLOWReceiver.{envelopeKey}`), allowing simultaneous authentication for multiple envelopes in the same browser session. + ### AuthService Method ```csharp public enum EnvelopeLoginResult { Success, InvalidCode, NotFound, Error } @@ -307,7 +355,7 @@ public async Task LoginEnvelopeReceiverAsync(string key, st | Mistake | Why Wrong | |---|---| -| Using iText7 in EnvelopeViewer | GPL license issue. Use overlay system instead. | +| Using iText7 in EnvelopeReceiver | GPL license issue. Use overlay system instead. | | Using PSPDFKit | Removed from architecture. Use PDF.js + DevExpress. | | Hardcoded quality values in PDF.js | Use `appsettings.json` for configurability. | | Complex toolbar layouts | User wants simplicity. Keep horizontal layout. | @@ -367,4 +415,4 @@ Proves database uses INCHES natively. --- -**Last Updated:** Session 17 (Architecture unification documentation) +**Last Updated:** Session 18 (File renames & routing restructure)