| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | 
							- using System.Net.Mime;
 
- using System.Threading.Tasks;
 
- using Jellyfin.Api.Attributes;
 
- using Jellyfin.Api.Extensions;
 
- using Jellyfin.Api.Models.ClientLogDtos;
 
- using MediaBrowser.Controller.ClientEvent;
 
- using MediaBrowser.Controller.Configuration;
 
- using Microsoft.AspNetCore.Authorization;
 
- using Microsoft.AspNetCore.Http;
 
- using Microsoft.AspNetCore.Mvc;
 
- namespace Jellyfin.Api.Controllers;
 
- /// <summary>
 
- /// Client log controller.
 
- /// </summary>
 
- [Authorize]
 
- public class ClientLogController : BaseJellyfinApiController
 
- {
 
-     private const int MaxDocumentSize = 1_000_000;
 
-     private readonly IClientEventLogger _clientEventLogger;
 
-     private readonly IServerConfigurationManager _serverConfigurationManager;
 
-     /// <summary>
 
-     /// Initializes a new instance of the <see cref="ClientLogController"/> class.
 
-     /// </summary>
 
-     /// <param name="clientEventLogger">Instance of the <see cref="IClientEventLogger"/> interface.</param>
 
-     /// <param name="serverConfigurationManager">Instance of the <see cref="IServerConfigurationManager"/> interface.</param>
 
-     public ClientLogController(
 
-         IClientEventLogger clientEventLogger,
 
-         IServerConfigurationManager serverConfigurationManager)
 
-     {
 
-         _clientEventLogger = clientEventLogger;
 
-         _serverConfigurationManager = serverConfigurationManager;
 
-     }
 
-     /// <summary>
 
-     /// Upload a document.
 
-     /// </summary>
 
-     /// <response code="200">Document saved.</response>
 
-     /// <response code="403">Event logging disabled.</response>
 
-     /// <response code="413">Upload size too large.</response>
 
-     /// <returns>Create response.</returns>
 
-     [HttpPost("Document")]
 
-     [ProducesResponseType(typeof(ClientLogDocumentResponseDto), StatusCodes.Status200OK)]
 
-     [ProducesResponseType(StatusCodes.Status403Forbidden)]
 
-     [ProducesResponseType(StatusCodes.Status413PayloadTooLarge)]
 
-     [AcceptsFile(MediaTypeNames.Text.Plain)]
 
-     [RequestSizeLimit(MaxDocumentSize)]
 
-     public async Task<ActionResult<ClientLogDocumentResponseDto>> LogFile()
 
-     {
 
-         if (!_serverConfigurationManager.Configuration.AllowClientLogUpload)
 
-         {
 
-             return Forbid();
 
-         }
 
-         if (Request.ContentLength > MaxDocumentSize)
 
-         {
 
-             // Manually validate to return proper status code.
 
-             return StatusCode(StatusCodes.Status413PayloadTooLarge, $"Payload must be less than {MaxDocumentSize:N0} bytes");
 
-         }
 
-         var (clientName, clientVersion) = GetRequestInformation();
 
-         var fileName = await _clientEventLogger.WriteDocumentAsync(clientName, clientVersion, Request.Body)
 
-             .ConfigureAwait(false);
 
-         return Ok(new ClientLogDocumentResponseDto(fileName));
 
-     }
 
-     private (string ClientName, string ClientVersion) GetRequestInformation()
 
-     {
 
-         var clientName = HttpContext.User.GetClient() ?? "unknown-client";
 
-         var clientVersion = HttpContext.User.GetIsApiKey()
 
-             ? "apikey"
 
-             : HttpContext.User.GetVersion() ?? "unknown-version";
 
-         return (clientName, clientVersion);
 
-     }
 
- }
 
 
  |