浏览代码

Merge pull request from GHSA-rgjw-4fwc-9v96

Remove /Images/Remote API endpoint

(cherry picked from commit e71cd8274ace8237a84882ffddba4fba12fbc6c1)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
Joshua M. Boniface 4 年之前
父节点
当前提交
93ce087fc9
共有 2 个文件被更改,包括 0 次插入143 次删除
  1. 0 91
      Jellyfin.Api/Controllers/ItemLookupController.cs
  2. 0 52
      Jellyfin.Api/Controllers/RemoteImageController.cs

+ 0 - 91
Jellyfin.Api/Controllers/ItemLookupController.cs

@@ -239,48 +239,6 @@ namespace Jellyfin.Api.Controllers
             return Ok(results);
         }
 
-        /// <summary>
-        /// Gets a remote image.
-        /// </summary>
-        /// <param name="imageUrl">The image url.</param>
-        /// <param name="providerName">The provider name.</param>
-        /// <response code="200">Remote image retrieved.</response>
-        /// <returns>
-        /// A <see cref="Task" /> that represents the asynchronous operation to get the remote search results.
-        /// The task result contains an <see cref="FileStreamResult"/> containing the images file stream.
-        /// </returns>
-        [HttpGet("Items/RemoteSearch/Image")]
-        [ProducesResponseType(StatusCodes.Status200OK)]
-        [ProducesImageFile]
-        public async Task<ActionResult> GetRemoteSearchImage(
-            [FromQuery, Required] string imageUrl,
-            [FromQuery, Required] string providerName)
-        {
-            var urlHash = imageUrl.GetMD5();
-            var pointerCachePath = GetFullCachePath(urlHash.ToString());
-
-            try
-            {
-                var contentPath = await System.IO.File.ReadAllTextAsync(pointerCachePath).ConfigureAwait(false);
-                if (System.IO.File.Exists(contentPath))
-                {
-                    return PhysicalFile(contentPath, MimeTypes.GetMimeType(contentPath));
-                }
-            }
-            catch (FileNotFoundException)
-            {
-                // Means the file isn't cached yet
-            }
-            catch (IOException)
-            {
-                // Means the file isn't cached yet
-            }
-
-            await DownloadImage(providerName, imageUrl, urlHash, pointerCachePath).ConfigureAwait(false);
-            var updatedContentPath = await System.IO.File.ReadAllTextAsync(pointerCachePath).ConfigureAwait(false);
-            return PhysicalFile(updatedContentPath, MimeTypes.GetMimeType(updatedContentPath));
-        }
-
         /// <summary>
         /// Applies search criteria to an item and refreshes metadata.
         /// </summary>
@@ -322,54 +280,5 @@ namespace Jellyfin.Api.Controllers
 
             return NoContent();
         }
-
-        /// <summary>
-        /// Downloads the image.
-        /// </summary>
-        /// <param name="providerName">Name of the provider.</param>
-        /// <param name="url">The URL.</param>
-        /// <param name="urlHash">The URL hash.</param>
-        /// <param name="pointerCachePath">The pointer cache path.</param>
-        /// <returns>Task.</returns>
-        private async Task DownloadImage(string providerName, string url, Guid urlHash, string pointerCachePath)
-        {
-            using var result = await _providerManager.GetSearchImage(providerName, url, CancellationToken.None).ConfigureAwait(false);
-            if (result.Content.Headers.ContentType?.MediaType == null)
-            {
-                throw new ResourceNotFoundException(nameof(result.Content.Headers.ContentType));
-            }
-
-            var ext = result.Content.Headers.ContentType.MediaType.Split('/')[^1];
-            var fullCachePath = GetFullCachePath(urlHash + "." + ext);
-
-            var directory = Path.GetDirectoryName(fullCachePath) ?? throw new ResourceNotFoundException($"Provided path ({fullCachePath}) is not valid.");
-            Directory.CreateDirectory(directory);
-            using (var stream = result.Content)
-            {
-                // use FileShare.None as this bypasses dotnet bug dotnet/runtime#42790 .
-                await using var fileStream = new FileStream(
-                    fullCachePath,
-                    FileMode.Create,
-                    FileAccess.Write,
-                    FileShare.None,
-                    IODefaults.FileStreamBufferSize,
-                    true);
-
-                await stream.CopyToAsync(fileStream).ConfigureAwait(false);
-            }
-
-            var pointerCacheDirectory = Path.GetDirectoryName(pointerCachePath) ?? throw new ArgumentException($"Provided path ({pointerCachePath}) is not valid.", nameof(pointerCachePath));
-
-            Directory.CreateDirectory(pointerCacheDirectory);
-            await System.IO.File.WriteAllTextAsync(pointerCachePath, fullCachePath).ConfigureAwait(false);
-        }
-
-        /// <summary>
-        /// Gets the full cache path.
-        /// </summary>
-        /// <param name="filename">The filename.</param>
-        /// <returns>System.String.</returns>
-        private string GetFullCachePath(string filename)
-            => Path.Combine(_appPaths.CachePath, "remote-images", filename.Substring(0, 1), filename);
     }
 }

+ 0 - 52
Jellyfin.Api/Controllers/RemoteImageController.cs

@@ -145,58 +145,6 @@ namespace Jellyfin.Api.Controllers
             return Ok(_providerManager.GetRemoteImageProviderInfo(item));
         }
 
-        /// <summary>
-        /// Gets a remote image.
-        /// </summary>
-        /// <param name="imageUrl">The image url.</param>
-        /// <response code="200">Remote image returned.</response>
-        /// <response code="404">Remote image not found.</response>
-        /// <returns>Image Stream.</returns>
-        [HttpGet("Images/Remote")]
-        [Produces(MediaTypeNames.Application.Octet)]
-        [ProducesResponseType(StatusCodes.Status200OK)]
-        [ProducesResponseType(StatusCodes.Status404NotFound)]
-        [ProducesImageFile]
-        public async Task<ActionResult> GetRemoteImage([FromQuery, Required] Uri imageUrl)
-        {
-            var urlHash = imageUrl.ToString().GetMD5();
-            var pointerCachePath = GetFullCachePath(urlHash.ToString());
-
-            string? contentPath = null;
-            var hasFile = false;
-
-            try
-            {
-                contentPath = await System.IO.File.ReadAllTextAsync(pointerCachePath).ConfigureAwait(false);
-                if (System.IO.File.Exists(contentPath))
-                {
-                    hasFile = true;
-                }
-            }
-            catch (FileNotFoundException)
-            {
-                // The file isn't cached yet
-            }
-            catch (IOException)
-            {
-                // The file isn't cached yet
-            }
-
-            if (!hasFile)
-            {
-                await DownloadImage(imageUrl, urlHash, pointerCachePath).ConfigureAwait(false);
-                contentPath = await System.IO.File.ReadAllTextAsync(pointerCachePath).ConfigureAwait(false);
-            }
-
-            if (string.IsNullOrEmpty(contentPath))
-            {
-                return NotFound();
-            }
-
-            var contentType = MimeTypes.GetMimeType(contentPath);
-            return PhysicalFile(contentPath, contentType);
-        }
-
         /// <summary>
         /// Downloads a remote image for an item.
         /// </summary>