From 04c5b9d6800d7790d08958b9d6700299ba0c8e74 Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Wed, 3 Apr 2024 16:14:06 +0200 Subject: [PATCH] Add endpoint to get user permissions --- .../Controllers/PlaylistsController.cs | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Jellyfin.Api/Controllers/PlaylistsController.cs b/Jellyfin.Api/Controllers/PlaylistsController.cs index 4ced64ae70..567a274123 100644 --- a/Jellyfin.Api/Controllers/PlaylistsController.cs +++ b/Jellyfin.Api/Controllers/PlaylistsController.cs @@ -179,6 +179,40 @@ public class PlaylistsController : BaseJellyfinApiController return isPermitted ? playlist.Shares.ToList() : Forbid(); } + /// + /// Get a playlist users. + /// + /// The playlist id. + /// The user id. + /// Found shares. + /// Access forbidden. + /// Playlist not found. + /// + /// . + /// + [HttpGet("{playlistId}/User/{userId}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + public ActionResult GetPlaylistUser( + [FromRoute, Required] Guid playlistId, + [FromRoute, Required] Guid userId) + { + var callingUserId = User.GetUserId(); + + var playlist = _playlistManager.GetPlaylistForUser(playlistId, callingUserId); + if (playlist is null) + { + return NotFound("Playlist not found"); + } + + var isPermitted = playlist.OwnerUserId.Equals(userId) + || playlist.Shares.Any(s => s.CanEdit && s.UserId.Equals(callingUserId)) + || userId.Equals(callingUserId); + + return isPermitted ? playlist.Shares.FirstOrDefault(s => s.UserId.Equals(userId)) : Forbid(); + } + /// /// Modify a user to a playlist's users. ///