Files
Umbraco-CMS/src/Umbraco.Cms.Api.Management/Controllers/Media/ByKeyMediaController.cs
2024-02-01 11:22:16 +01:00

59 lines
2.0 KiB
C#

using Asp.Versioning;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Management.Factories;
using Umbraco.Cms.Api.Management.Security.Authorization.Media;
using Umbraco.Cms.Api.Management.ViewModels.Document;
using Umbraco.Cms.Api.Management.ViewModels.Media;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Web.Common.Authorization;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Management.Controllers.Media;
[ApiVersion("1.0")]
public class ByKeyMediaController : MediaControllerBase
{
private readonly IAuthorizationService _authorizationService;
private readonly IMediaEditingService _mediaEditingService;
private readonly IMediaPresentationFactory _mediaPresentationFactory;
public ByKeyMediaController(
IAuthorizationService authorizationService,
IMediaEditingService mediaEditingService,
IMediaPresentationFactory mediaPresentationFactory)
{
_authorizationService = authorizationService;
_mediaEditingService = mediaEditingService;
_mediaPresentationFactory = mediaPresentationFactory;
}
[HttpGet("{id:guid}")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(MediaResponseModel), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
public async Task<IActionResult> ByKey(Guid id)
{
AuthorizationResult authorizationResult = await _authorizationService.AuthorizeResourceAsync(
User,
MediaPermissionResource.WithKeys(id),
AuthorizationPolicies.MediaPermissionByResource);
if (!authorizationResult.Succeeded)
{
return Forbidden();
}
IMedia? media = await _mediaEditingService.GetAsync(id);
if (media == null)
{
return MediaNotFound();
}
MediaResponseModel model = await _mediaPresentationFactory.CreateResponseModelAsync(media);
return Ok(model);
}
}