diff options
| author | Bond-009 <bond.009@outlook.com> | 2026-06-05 18:28:55 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-06-05 18:28:55 +0200 |
| commit | f4db44ffb3924fa597a01baf53a3df16cd073ea2 (patch) | |
| tree | 809301159fe345f30fbdd4ec4e454f4734e8a36a | |
| parent | b639166c0aa0223f3199aed474d78c40bb46c0ed (diff) | |
| parent | 1b80da0c3d4014b5e65815f4e71b20d6714dd029 (diff) | |
Merge pull request #17019 from Shadowghost/enforce-parental
Enforce parental filtering on additional endpoints
| -rw-r--r-- | Emby.Server.Implementations/Library/LibraryManager.cs | 3 | ||||
| -rw-r--r-- | Jellyfin.Api/Controllers/TvShowsController.cs | 6 | ||||
| -rw-r--r-- | Jellyfin.Api/Controllers/UserLibraryController.cs | 10 | ||||
| -rw-r--r-- | Jellyfin.Api/Controllers/VideosController.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 14 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Video.cs | 7 |
6 files changed, 20 insertions, 22 deletions
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index a826db090f..ffc449d974 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -1987,7 +1987,8 @@ namespace Emby.Server.Implementations.Library query.TopParentIds.Length == 0 && string.IsNullOrEmpty(query.AncestorWithPresentationUniqueKey) && string.IsNullOrEmpty(query.SeriesPresentationUniqueKey) && - query.ItemIds.Length == 0) + query.ItemIds.Length == 0 && + query.OwnerIds.Length == 0) { var userViews = UserViewManager.GetUserViews(new UserViewQuery { diff --git a/Jellyfin.Api/Controllers/TvShowsController.cs b/Jellyfin.Api/Controllers/TvShowsController.cs index e45a100b77..340a54e13b 100644 --- a/Jellyfin.Api/Controllers/TvShowsController.cs +++ b/Jellyfin.Api/Controllers/TvShowsController.cs @@ -232,7 +232,7 @@ public class TvShowsController : BaseJellyfinApiController if (seasonId.HasValue) // Season id was supplied. Get episodes by season id. { - var item = _libraryManager.GetItemById<BaseItem>(seasonId.Value); + var item = _libraryManager.GetItemById<BaseItem>(seasonId.Value, user); if (item is not Season seasonItem) { return NotFound("No season exists with Id " + seasonId); @@ -242,7 +242,7 @@ public class TvShowsController : BaseJellyfinApiController } else if (season.HasValue) // Season number was supplied. Get episodes by season number { - var series = _libraryManager.GetItemById<Series>(seriesId); + var series = _libraryManager.GetItemById<Series>(seriesId, user); if (series is null) { return NotFound("Series not found"); @@ -258,7 +258,7 @@ public class TvShowsController : BaseJellyfinApiController } else // No season number or season id was supplied. Returning all episodes. { - if (_libraryManager.GetItemById<BaseItem>(seriesId) is not Series series) + if (_libraryManager.GetItemById<BaseItem>(seriesId, user) is not Series series) { return NotFound("Series not found"); } diff --git a/Jellyfin.Api/Controllers/UserLibraryController.cs b/Jellyfin.Api/Controllers/UserLibraryController.cs index 9e3933f2d4..25f781e496 100644 --- a/Jellyfin.Api/Controllers/UserLibraryController.cs +++ b/Jellyfin.Api/Controllers/UserLibraryController.cs @@ -429,14 +429,8 @@ public class UserLibraryController : BaseJellyfinApiController } var dtoOptions = new DtoOptions(); - if (item is IHasTrailers hasTrailers) - { - var trailers = hasTrailers.LocalTrailers; - return Ok(_dtoService.GetBaseItemDtos(trailers, dtoOptions, user, item).AsEnumerable()); - } - return Ok(item.GetExtras() - .Where(e => e.ExtraType == ExtraType.Trailer) + return Ok(item.GetExtras([ExtraType.Trailer], user) .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item))); } @@ -487,7 +481,7 @@ public class UserLibraryController : BaseJellyfinApiController var dtoOptions = new DtoOptions(); return Ok(item - .GetExtras() + .GetExtras(user) .Where(i => i.ExtraType.HasValue && BaseItem.DisplayExtraTypes.Contains(i.ExtraType.Value)) .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item))); } diff --git a/Jellyfin.Api/Controllers/VideosController.cs b/Jellyfin.Api/Controllers/VideosController.cs index ed6d3f5bde..29a92cdb90 100644 --- a/Jellyfin.Api/Controllers/VideosController.cs +++ b/Jellyfin.Api/Controllers/VideosController.cs @@ -116,7 +116,7 @@ public class VideosController : BaseJellyfinApiController BaseItemDto[] items; if (item is Video video) { - items = video.GetAdditionalParts() + items = video.GetAdditionalParts(user) .Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, video)) .ToArray(); } diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index d4e56772aa..21304768bd 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -2718,7 +2718,7 @@ namespace MediaBrowser.Controller.Entities public IReadOnlyList<BaseItem> GetThemeSongs(User user, IEnumerable<(ItemSortBy SortBy, SortOrder SortOrder)> orderBy) { - return LibraryManager.Sort(GetExtras().Where(e => e.ExtraType == Model.Entities.ExtraType.ThemeSong), user, orderBy).ToArray(); + return LibraryManager.Sort(GetExtras(user).Where(e => e.ExtraType == Model.Entities.ExtraType.ThemeSong), user, orderBy).ToArray(); } public IReadOnlyList<BaseItem> GetThemeVideos(User user = null) @@ -2728,16 +2728,17 @@ namespace MediaBrowser.Controller.Entities public IReadOnlyList<BaseItem> GetThemeVideos(User user, IEnumerable<(ItemSortBy SortBy, SortOrder SortOrder)> orderBy) { - return LibraryManager.Sort(GetExtras().Where(e => e.ExtraType == Model.Entities.ExtraType.ThemeVideo), user, orderBy).ToArray(); + return LibraryManager.Sort(GetExtras(user).Where(e => e.ExtraType == Model.Entities.ExtraType.ThemeVideo), user, orderBy).ToArray(); } /// <summary> /// Get all extras associated with this item, sorted by <see cref="SortName"/>. /// </summary> + /// <param name="user">The user to apply parental restrictions for, or <c>null</c> to skip restriction checks.</param> /// <returns>An enumerable containing the items.</returns> - public IEnumerable<BaseItem> GetExtras() + public IEnumerable<BaseItem> GetExtras(User user = null) { - return LibraryManager.GetItemList(new InternalItemsQuery() + return LibraryManager.GetItemList(new InternalItemsQuery(user) { OwnerIds = [Id], OrderBy = [(ItemSortBy.SortName, SortOrder.Ascending)] @@ -2748,10 +2749,11 @@ namespace MediaBrowser.Controller.Entities /// Get all extras with specific types that are associated with this item. /// </summary> /// <param name="extraTypes">The types of extras to retrieve.</param> + /// <param name="user">The user to apply parental restrictions for, or <c>null</c> to skip restriction checks.</param> /// <returns>An enumerable containing the extras.</returns> - public IEnumerable<BaseItem> GetExtras(IReadOnlyCollection<ExtraType> extraTypes) + public IEnumerable<BaseItem> GetExtras(IReadOnlyCollection<ExtraType> extraTypes, User user = null) { - return LibraryManager.GetItemList(new InternalItemsQuery() + return LibraryManager.GetItemList(new InternalItemsQuery(user) { OwnerIds = [Id], ExtraTypes = extraTypes.ToArray(), diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index 44cae5197a..e7a5672ebd 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -10,6 +10,7 @@ using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; using Jellyfin.Data.Enums; +using Jellyfin.Database.Implementations.Entities; using Jellyfin.Extensions; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.LiveTv; @@ -390,13 +391,13 @@ namespace MediaBrowser.Controller.Entities /// <summary> /// Gets the additional parts. /// </summary> + /// <param name="user">The user to apply parental restrictions for, or <c>null</c> to skip restriction checks.</param> /// <returns>IEnumerable{Video}.</returns> - public IOrderedEnumerable<Video> GetAdditionalParts() + public IOrderedEnumerable<Video> GetAdditionalParts(User user = null) { return GetAdditionalPartIds() - .Select(i => LibraryManager.GetItemById(i)) + .Select(i => LibraryManager.GetItemById<Video>(i, user)) .Where(i => i is not null) - .OfType<Video>() .OrderBy(i => i.SortName); } |
