Sha256: 23cde2fd8fc32a2bae544617cea54e6b7cedf9e91e2dd62790b1437aae632e26

Contents?: true

Size: 1.27 KB

Versions: 56

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

module Decidim
  # This class deals with uploading hero images to ParticipatoryProcesses.
  class ImageUploader < ApplicationUploader
    include CarrierWave::MiniMagick

    process :validate_size, :validate_dimensions

    # CarrierWave automatically calls this method and validates the content
    # type fo the temp file to match against any of these options.
    def content_type_whitelist
      [
        %r{image\/}
      ]
    end

    # A simple check to avoid DoS with maliciously crafted images, or just to
    # avoid reckless users that upload gigapixels images.
    #
    # See https://hackerone.com/reports/390
    def validate_dimensions
      manipulate! do |image|
        validation_error!(I18n.t("carrierwave.errors.image_too_big")) if image.dimensions.any? { |dimension| dimension > max_image_height_or_width }
        image
      end
    end

    def validate_size
      manipulate! do |image|
        validation_error!(I18n.t("carrierwave.errors.image_too_big")) if image.size > Decidim.maximum_attachment_size
        image
      end
    end

    def max_image_height_or_width
      3840
    end

    private

    def validation_error!(text)
      model.errors.add(mounted_as, text)
      raise CarrierWave::IntegrityError, text
    end
  end
end

Version data entries

56 entries across 56 versions & 2 rubygems

Version Path
decidim-core-0.13.1 app/uploaders/decidim/image_uploader.rb
decidim-core-0.12.2 app/uploaders/decidim/image_uploader.rb
decidim-core-0.13.0 app/uploaders/decidim/image_uploader.rb
decidim-core-0.12.1 app/uploaders/decidim/image_uploader.rb
decidim-core-0.13.0.pre1 app/uploaders/decidim/image_uploader.rb
decidim-core-0.12.0 app/uploaders/decidim/image_uploader.rb
decidim-core-0.11.2 app/uploaders/decidim/image_uploader.rb
decidim-core-0.12.0.pre app/uploaders/decidim/image_uploader.rb
decidim-core-0.11.1 app/uploaders/decidim/image_uploader.rb
decidim-core-0.11.0.pre1 app/uploaders/decidim/image_uploader.rb
decidim-core-0.10.1 app/uploaders/decidim/image_uploader.rb
decidim-core-0.10.0 app/uploaders/decidim/image_uploader.rb
decidim-core-0.9.3 app/uploaders/decidim/image_uploader.rb
decidim-core-0.9.2 app/uploaders/decidim/image_uploader.rb
decidim-core-0.9.1 app/uploaders/decidim/image_uploader.rb
decidim-core-0.9.0 app/uploaders/decidim/image_uploader.rb
decidim-core-0.8.4 app/uploaders/decidim/image_uploader.rb
decidim-core-0.8.3 app/uploaders/decidim/image_uploader.rb
decidim-core-0.8.2 app/uploaders/decidim/image_uploader.rb
decidim-core-0.8.1 app/uploaders/decidim/image_uploader.rb