Files
WatchedTogether/build.yaml
T
dtourolle b4134dd744 Grant shared accounts the intersection of member library access
Previously the shared account's libraries were chosen independently of
its members, so a group could see a library that one of its members was
blocked from - joining a group became a way to gain access. That was
especially sharp with auto-created groups, where no admin is in the loop.

A shared account is now granted exactly the libraries every member can
already reach. If one member is blocked from a library, no group
containing them can see it. The account is therefore always a subset of
what each member could reach alone, which is what makes creating groups
at the login screen safe to leave on by default.

Details:

- "Enable all folders" is expanded to concrete library ids before
  intersecting, since it cannot otherwise be compared with an explicit
  list. Shared accounts are always given an explicit list, never the
  all-folders permission, so newly added libraries do not silently widen
  an existing group.
- Explicitly blocked folders are subtracted even for members who
  otherwise have access to everything.
- Fails closed: an unresolvable member contributes no access rather than
  being treated as unrestricted.
- Recomputed when membership changes, and re-applied to every group at
  startup so narrowing a member's own access narrows their groups.

Drops the now-meaningless EnableAllFolders/EnabledFolders provisioning
inputs and the DynamicGroupsEnableAllFolders setting. Adds 8 tests
covering the intersection rules.
2026-07-29 00:15:32 +02:00

32 lines
1.4 KiB
YAML

---
name: "Watched Together"
guid: "aa3288a0-e8c1-43e2-8045-8c3411142a5b"
version: "1.0.0.0"
targetAbi: "10.11.0.0"
framework: "net9.0"
overview: "One shared login for several people; watched state flows back to each member's own account"
description: >
Watched Together lets several users share a single viewing account. Any member's
password unlocks the shared account, and anything marked watched or unwatched there
propagates one-way to each member's individual account.
A shared account is granted only the libraries every member can already reach, so
sharing an account never grants access nobody had.
This is not synchronized playback - for watching in lockstep across devices, use
Jellyfin's built-in SyncPlay. Watched Together solves the "one TV, one login, but
everyone's Continue Watching should stay correct" problem instead.
category: "General"
owner: "dtourolle"
artifacts:
- "Jellyfin.Plugin.WatchedTogether.dll"
build_type: "dotnet"
dotnet_configuration: "Release"
dotnet_framework: "net9.0"
# Point at the plugin project rather than the solution so the test project is not packaged.
project: "Jellyfin.Plugin.WatchedTogether/Jellyfin.Plugin.WatchedTogether.csproj"
changelog: >
Initial release: shared accounts created on demand at login, multi-password
authentication, one-way played-state sync to members, and library access
computed as the intersection of the members'.