# Module: Azaion.Common.Requests.GetResourceRequest ## Purpose Request DTO and validator for the `POST /resources/get/{dataFolder?}` endpoint. The user's password is supplied per-request so the server can derive the per-user AES encryption key for the response stream. > **Cycle 1 (2026-05-13) note** — the `Hardware` property and its `BadHardware` validator rule were removed by AZ-197 (admin-side hardware-binding cleanup). The wire-compat policy was "drop entirely" — any client still sending `Hardware` will not see it deserialized. The companion `CheckResourceRequest` was removed along with the `POST /resources/check` endpoint. See `_docs/03_implementation/batch_06_report.md`. ## Public Interface ### GetResourceRequest | Property | Type | Description | |----------|------|-------------| | `Password` | `string` | User's password (used to derive the encryption key) | | `FileName` | `string` | Resource file to retrieve | ### GetResourceRequestValidator | Rule | Constraint | Error Code | |------|-----------|------------| | `Password` min length | >= 8 chars | `PasswordLengthIncorrect` | | `FileName` not empty | Required | `WrongResourceName` | ## Internal Logic Validator uses `BusinessException.GetMessage()` to derive user-facing error messages from `ExceptionEnum`. ## Dependencies - `BusinessException`, `ExceptionEnum` - FluentValidation ## Consumers - `Program.cs` `POST /resources/get/{dataFolder?}` endpoint ## Data Models None. ## Configuration None. ## External Integrations None. ## Security - Password is sent in the POST body (not URL) to avoid logging in access logs. - Per-user encryption key derivation now uses `email + password` only (see `services_security.md`). ## Tests - `e2e/Azaion.E2E/Tests/ResourceTests.cs` (encrypted download / round-trip) — updated by AZ-197 to stop sending `Hardware`