@ -15,6 +15,7 @@ using Jellyfin.Api.Models.LibraryDtos;
using Jellyfin.Data.Entities ;
using Jellyfin.Data.Enums ;
using Jellyfin.Extensions ;
using MediaBrowser.Common.Extensions ;
using MediaBrowser.Common.Progress ;
using MediaBrowser.Controller.Configuration ;
using MediaBrowser.Controller.Dto ;
@ -332,12 +333,26 @@ public class LibraryController : BaseJellyfinApiController
[Authorize]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public ActionResult DeleteItem ( Guid itemId )
{
var isApiKey = User . GetIsApiKey ( ) ;
var userId = User . GetUserId ( ) ;
var user = ! isApiKey & & ! userId . Equals ( default )
? _userManager . GetUserById ( userId ) ? ? throw new ResourceNotFoundException ( )
: null ;
if ( ! isApiKey & & user is null )
{
return Unauthorized ( "Unauthorized access" ) ;
}
var item = _libraryManager . GetItemById ( itemId ) ;
var user = _userManager . GetUserById ( User . GetUserId ( ) ) ;
if ( item is null )
{
return NotFound ( ) ;
}
if ( ! item . CanDelete ( user ) )
if ( user is not null & & ! item . CanDelete ( user ) )
{
return Unauthorized ( "Unauthorized access" ) ;
}
@ -361,26 +376,31 @@ public class LibraryController : BaseJellyfinApiController
[Authorize]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public ActionResult DeleteItems ( [ FromQuery , ModelBinder ( typeof ( CommaDelimitedArrayModelBinder ) ) ] Guid [ ] ids )
{
if ( ids . Length = = 0 )
var isApiKey = User . GetIsApiKey ( ) ;
var userId = User . GetUserId ( ) ;
var user = ! isApiKey & & ! userId . Equals ( default )
? _userManager . GetUserById ( userId ) ? ? throw new ResourceNotFoundException ( )
: null ;
if ( ! isApiKey & & user is null )
{
return NoContent ( ) ;
return Unauthorized( "Unauthorized access" ) ;
}
foreach ( var i in ids )
{
var item = _libraryManager . GetItemById ( i ) ;
var user = _userManager . GetUserById ( User . GetUserId ( ) ) ;
if ( ! item . CanDelete ( user ) )
if ( item is null )
{
if ( ids . Length > 1 )
{
return Unauthorized ( "Unauthorized access" ) ;
}
return NotFound ( ) ;
}
continue ;
if ( user is not null & & ! item . CanDelete ( user ) )
{
return Unauthorized ( "Unauthorized access" ) ;
}
_libraryManager . DeleteItem (