diff --git a/docs/architecture/09-security.md b/docs/architecture/09-security.md index b54309ca..5faf88d2 100644 --- a/docs/architecture/09-security.md +++ b/docs/architecture/09-security.md @@ -50,6 +50,8 @@ pub struct EncryptedFileStorage; // AES-256-GCM fallback | Certificate Validation | System CA store (configurable for self-signed) | | Token Transmission | Bearer token in `Authorization` header only | | Token Refresh | Handled by Jellyfin server (long-lived tokens) | +| Android cleartext | `res/xml/network_security_config.xml` blocks cleartext everywhere except `127.0.0.1` (the loopback media server, DR-137/DR-138). The manifest's `usesCleartextTraffic` is ignored once the config is present, so the config is the single authority | +| Android WebView | `mixedContentMode = COMPATIBILITY` with `allowFileAccess`/`allowContentAccess` both `false` (DR-199). These are the second half of the cleartext policy: `ALWAYS_ALLOW` re-opened by hand what the network security config closes. Change the two together | ## Local Data Protection diff --git a/docs/requirements.md b/docs/requirements.md index 5a5d498d..65b07605 100644 --- a/docs/requirements.md +++ b/docs/requirements.md @@ -352,6 +352,8 @@ Internal architecture, components, and application logic. | DR-195 | Play/pause works on the native path, because the frontend stops claiming a webview element is playing when there is none. `html5_playing` is Rust's record of "a webview `