← The board

D11 Watching what the house holds

Area
D — Content & household
Audience
household
Kind
feature
Status
accepted
Maturity
building
Labels
household, security, network
Requires
D6D8G5
Relates to
B1D4G10N3

The feature in the specification · Read at

Requirements

  1. D11-R1acceptedMUST

    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
  2. D11-R2acceptedMUST

    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
  3. D11-R3acceptedMUST

    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
  4. D11-R4acceptedMUST

    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
  5. D11-R5acceptedMUST

    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
  6. D11-R6acceptedMUST

    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.

    locked by
    0.18.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/screening/door.rscrates/lemonfiber-ports/src/service/screening.rscrates/lemonfiber-core/src/screening/door/tests.rs
    cited by
    lemonfiber@ebe81f0581sdk-php@adf627d6f5lemonfiber-companion@6c7dc35a9b
  7. D11-R7acceptedMUST

    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
  8. D11-R8acceptedMUST

    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.

    locked by
    0.18.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/screening.rscrates/lemonfiber-contract/src/capabilities/media.rscrates/lemonfiber-api/src/actions/named/viewing.rscrates/lemonfiber-core/src/screening/tests.rs
    cited by
    lemonfiber@ebe81f0581sdk-php@adf627d6f5
  9. D11-R9acceptedMUST

    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
  10. D11-R10acceptedMUST

    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.

    locked by
    0.19.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/wishing/poster.rscrates/lemonfiber-core/src/outbound/ours.rscrates/lemonfiber-api/src/read/pictures.rscrates/lemonfiber-core/src/wishing/poster/tests.rs
    cited by
    lemonfiber@2a1472c24asdk-ts@63ac6ef057sdk-php@c276714bbd
  11. D11-R11acceptedMUSTClaim it

    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
  12. D11-R12acceptedMUSTClaim it

    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
  13. D11-R13acceptedMUSTClaim it

    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