D11 Watching what the house holds
- Area
- D — Content & household
- Audience
- household
- Kind
- feature
- Status
- accepted
- Maturity
- building
- Labels
- household, security, network
The feature in the specification · Read at
Requirements
A member's paired client MUST be able to obtain a grant to play on the member's own media-server account for a device it names, authorised by the core without anybody learning the member's password and answered to the client once with the session's token, which the core MUST NOT keep. The core MUST end it when it lapses and when the member is removed (D6-R8).
- locked by
- 0.18.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/screening.rscrates/lemonfiber-core/src/screening/grants.rscrates/lemonfiber-contract/src/capabilities/media.rscrates/lemonfiber-api/src/actions/named/viewing.rscrates/lemonfiber-api/src/entitled.rscrates/lemonfiber-core/src/screening/tests.rs
- cited by
- lemonfiber@ebe81f0581sdk-php@adf627d6f5lemonfiber-companion@331157e446
Every byte the media server serves for an item, its images included, MUST pass a guard that asks the media server whether the presented session may see that item, and MUST be refused where it may not, where no session is presented, or where the answer does not come. The media server's own port MUST NOT be published to the household beside the guard. The guard MUST accept a session presented as Authorization: Bearer <token>, and MUST carry nothing written after the token over to the media server.
- locked by
- 0.18.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/seed/run/proxies.rscrates/lemonfiber-contract/src/capabilities/media.rscrates/lemonfiber-core/src/screening/door.rscrates/lemonfiber-core/src/door.rscrates/lemonfiber-core/src/seed/run/tests/proxies.rs
- recorded partial
- lemonfiber-media-stackconfig/door/Caddyfilescripts/check_door.py::def layout
- cited by
- lemonfiber@2afa82a76dlemonfiber@555454a55dlemonfiber@ebe81f0581lemonfiber-media-stack@50afc3ff48lemonfiber-media-stack@bc15cf0861lemonfiber-media-stack@a24c6d30a7lemonfiber-media-stack@d8ca07dd63lemonfiber-media-stack@b6249279f5
The core MUST state, for each title it lists for a member, where its poster and backdrop are served at the guarded front door, built from the household address the stack publishes for the media server. It MUST state nothing where it does not know that address, and MUST NOT state the location of an image that is not an item's own.
- locked by
- 0.18.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/screening/door.rscrates/lemonfiber-core/src/app/held.rscrates/lemonfiber-ports/src/service/screening.rscrates/lemonfiber-core/src/screening/door/tests.rs
- cited by
- lemonfiber@ebe81f0581lemonfiber-web@2787c1f255lemonfiber-web@b8f30d1922lemonfiber-web@041ad0a774lemonfiber-web@bfbf918845sdk-php@adf627d6f5
The core MUST answer a title's details (overview, runtime, genres, certificate, release date, and seasons and episodes) as the member's own session reads them, and MUST answer a title outside the member's limits as absent (D8-R9).
- locked by
- 0.18.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/screening.rscrates/lemonfiber-contract/src/capabilities/media.rscrates/lemonfiber-api/src/read.rscrates/lemonfiber-core/src/screening/tests.rs
- cited by
- lemonfiber@ebe81f0581lemonfiber-web@a53d6aa2bdsdk-php@adf627d6f5lemonfiber-companion@6c7dc35a9b
The core MUST answer what a member was part-way through, with how far through each was, as the member's own session reads it.
- locked by
- 0.18.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/screening.rscrates/lemonfiber-contract/src/capabilities/media.rscrates/lemonfiber-api/src/read/table.rscrates/lemonfiber-core/src/screening/tests.rs
- cited by
- lemonfiber@ebe81f0581lemonfiber-web@7d4da74290sdk-php@adf627d6f5lemonfiber-companion@e8c15e991e
Each title a member may watch MUST carry the location that streams it at the guarded front door where the core knows the household address and the title streams, and MUST carry the reason in its place where it does not.
The guarded front door MUST serve over TLS, and every location the core states at it (D11-R3, D11-R6) MUST be answered beside the fingerprint of the certificate the door presents, so that a client pins the door as it pins the stack (N1-R22).
- locked by
- 0.18.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/certificate.rscrates/lemonfiber-core/src/screening/door.rscrates/lemonfiber-core/src/app/engine.rscrates/lemonfiber-core/src/screening/door/tests.rs
- recorded partial
- lemonfiber-media-stackconfig/door/Caddyfile::https://:8920scripts/check_door.py::presented_fingerprint
- cited by
- lemonfiber@ebe81f0581lemonfiber-media-stack@b6249279f5sdk-php@adf627d6f5
The core MUST accept, from a member's paired client, how far through a title the member is and whether they finished it, and MUST hand it to the media server as that member's own playback progress, keeping no copy of its own.
The core MUST serve a title's poster and backdrop to the member whose shelf holds it, read from the media server as that member, at GET /api/held/{id}/poster and GET /api/held/{id}/backdrop. It MUST answer only an image/ body of at most 2 MiB, marked Cache-Control: private, MUST keep no copy, and MUST answer a title outside the member's limits, or a picture the media server does not hold, as absent.
- locked by
- 0.18.0 met
- recorded done
- lemonfibercrates/lemonfiber-api/src/read/pictures.rscrates/lemonfiber-core/src/screening.rscrates/lemonfiber-ports/src/service/screening.rscrates/lemonfiber-api/src/read/pictures/tests.rs::a_picture_is_shown_as_its_raster_type_and_kept_by_its_asker_alonecrates/lemonfiber-api/src/read/pictures/tests.rs::a_picture_is_read_as_whoever_the_title_read_is_ruled_to_be_read_ascrates/lemonfiber-core/src/screening/tests.rs::a_picture_is_asked_as_the_member_and_passed_on_as_a_rastercrates/lemonfiber-core/src/screening/tests.rs::a_picture_off_the_shelf_missing_or_not_a_raster_is_absentcrates/lemonfiber-api/tests/integration/what_a_member_is_shown.rs::a_picture_comes_from_the_shelf_the_title_read_is_ruled_to_read
- cited by
- lemonfiber@00a691442flemonfiber@510c87037csdk-ts@bd715d0839sdk-php@a1b8b8c056sdk-python@060b5f71b9integration-mcp@5ab3d01f86
The core MUST serve the poster of a title a member's search offered and the house does not hold, to that member alone, fetched by the core from the location the request service gave for that title and nowhere else, image/ only, at most 2 MiB, with Cache-Control: private; it MUST refuse a location that is not HTTPS or that resolves to a loopback, private or link-local address, and the member's client MUST NOT be sent to the catalogue's host.
A member's paired client MUST be able to watch a live TV channel only through the core, which MUST open the channel's live stream on the member's behalf only where the media server answers the channel's live TV read with the member's own session and the programme on it is within the member's limits (D8-R9). The guard's item question MUST NOT stand in for either answer.
- locked by
- 0.19.0 open
The core MUST answer the client the location of the live stream's bytes at the guarded front door with a pass the core issued for that live stream and that member alone, which lapses within a bounded time, and MUST close the live stream when its pass lapses or the member is removed (D6-R8).
- locked by
- 0.19.0 open
The guard MUST serve a live stream's bytes, its playlists and segments included, only to a request whose pass the core confirms, asked of the core on every such request, for exactly the live stream the request names, and MUST refuse one whose pass is absent, lapsed or not confirmed, or where the core does not answer. A live stream's bytes MUST NOT be served on an item's byte route (D11-R2).
- locked by
- 0.19.0 open