diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2024-06-05 21:15:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-05 19:15:39 +0000 |
commit | 5f15a892fa4f01ef9bcf223ec6798b8a9d9945ed (patch) | |
tree | 683fcacfac7f65aa66db553cd40ab5b1d32a411e /config | |
parent | 20e490ba7e996033c549e6d1de7826b86ac2988d (diff) |
Add support for libvips in addition to ImageMagick (#30090)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Diffstat (limited to 'config')
-rw-r--r-- | config/application.rb | 10 | ||||
-rw-r--r-- | config/initializers/vips.rb | 27 |
2 files changed, 36 insertions, 1 deletions
diff --git a/config/application.rb b/config/application.rb index a8e313069d9..069eb377406 100644 --- a/config/application.rb +++ b/config/application.rb @@ -27,7 +27,7 @@ require_relative '../lib/sanitize_ext/sanitize_config' require_relative '../lib/redis/namespace_extensions' require_relative '../lib/paperclip/url_generator_extensions' require_relative '../lib/paperclip/attachment_extensions' -require_relative '../lib/paperclip/lazy_thumbnail' + require_relative '../lib/paperclip/gif_transcoder' require_relative '../lib/paperclip/media_type_spoof_detector_extensions' require_relative '../lib/paperclip/transcoder' @@ -100,6 +100,14 @@ module Mastodon config.before_configuration do require 'mastodon/redis_config' + + config.x.use_vips = ENV['MASTODON_USE_LIBVIPS'] == 'true' + + if config.x.use_vips + require_relative '../lib/paperclip/vips_lazy_thumbnail' + else + require_relative '../lib/paperclip/lazy_thumbnail' + end end config.to_prepare do diff --git a/config/initializers/vips.rb b/config/initializers/vips.rb new file mode 100644 index 00000000000..25a17b2a171 --- /dev/null +++ b/config/initializers/vips.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +if Rails.configuration.x.use_vips + ENV['VIPS_BLOCK_UNTRUSTED'] = 'true' + + require 'vips' + + abort('Incompatible libvips version, please install libvips >= 8.13') unless Vips.at_least_libvips?(8, 13) + + Vips.block('VipsForeign', true) + + %w( + VipsForeignLoadNsgif + VipsForeignLoadJpeg + VipsForeignLoadPng + VipsForeignLoadWebp + VipsForeignLoadHeif + VipsForeignSavePng + VipsForeignSaveSpng + VipsForeignSaveJpeg + VipsForeignSaveWebp + ).each do |operation| + Vips.block(operation, false) + end + + Vips.block_untrusted(true) +end |