45 lines
1.5 KiB
Ruby
45 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DesignManagement
|
|
# This Uploader is used to generate and serve the smaller versions of
|
|
# the design files.
|
|
#
|
|
# The original (full-sized) design files are stored in Git LFS, and so
|
|
# have a different uploader, `LfsObjectUploader`.
|
|
class DesignV432x230Uploader < GitlabUploader
|
|
include CarrierWave::MiniMagick
|
|
include RecordsUploads::Concern
|
|
include ObjectStorage::Concern
|
|
prepend ObjectStorage::Extension::RecordsUploads
|
|
|
|
# We choose not to resize `image/ico` as we assume there will be no
|
|
# benefit in generating an 432x230 sized icon.
|
|
#
|
|
# We currently cannot resize `image/tiff`.
|
|
# See https://gitlab.com/gitlab-org/gitlab/issues/207740
|
|
#
|
|
# We currently choose not to resize `image/svg+xml` for security reasons.
|
|
# See https://gitlab.com/gitlab-org/gitlab/issues/207740#note_302766171
|
|
MIME_TYPE_ALLOWLIST = %w(image/png image/jpeg image/bmp image/gif).freeze
|
|
|
|
process resize_to_fit: [432, 230]
|
|
|
|
# Allow CarrierWave to reject files without correct mimetypes.
|
|
def content_type_whitelist
|
|
MIME_TYPE_ALLOWLIST
|
|
end
|
|
|
|
# Override `GitlabUploader` and always return false, otherwise local
|
|
# `LfsObject` files would be deleted.
|
|
# https://github.com/carrierwaveuploader/carrierwave/blob/f84672a/lib/carrierwave/uploader/cache.rb#L131-L135
|
|
def move_to_cache
|
|
false
|
|
end
|
|
|
|
private
|
|
|
|
def dynamic_segment
|
|
File.join(model.class.underscore, mounted_as.to_s, model.id.to_s)
|
|
end
|
|
end
|
|
end
|