summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2024-06-05 21:15:39 +0200
committerGitHub <noreply@github.com>2024-06-05 19:15:39 +0000
commit5f15a892fa4f01ef9bcf223ec6798b8a9d9945ed (patch)
tree683fcacfac7f65aa66db553cd40ab5b1d32a411e /config
parent20e490ba7e996033c549e6d1de7826b86ac2988d (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.rb10
-rw-r--r--config/initializers/vips.rb27
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