Skip to content

Commit

Permalink
Make sure allowed image processing arguments are correctly loaded
Browse files Browse the repository at this point in the history
Since those two constants were being defined inside the `app` folder,
they were being defined before the configuration was set in the
`after_initialize` block.

With this new implmentation we always use the configuration value, so
the order things are defined doesn't matter.
  • Loading branch information
rafaelfranca committed Mar 10, 2022
1 parent a52fb57 commit 8dca987
Show file tree
Hide file tree
Showing 3 changed files with 305 additions and 311 deletions.
296 changes: 2 additions & 294 deletions activestorage/app/models/active_storage/variation.rb
Expand Up @@ -23,298 +23,6 @@ class ActiveStorage::Variation
class UnsupportedImageProcessingMethod < StandardError; end
class UnsupportedImageProcessingArgument < StandardError; end

SUPPORTED_IMAGE_PROCESSING_METHODS = [
"adaptive_blur",
"adaptive_resize",
"adaptive_sharpen",
"adjoin",
"affine",
"alpha",
"annotate",
"antialias",
"append",
"apply",
"attenuate",
"authenticate",
"auto_gamma",
"auto_level",
"auto_orient",
"auto_threshold",
"backdrop",
"background",
"bench",
"bias",
"bilateral_blur",
"black_point_compensation",
"black_threshold",
"blend",
"blue_primary",
"blue_shift",
"blur",
"border",
"bordercolor",
"borderwidth",
"brightness_contrast",
"cache",
"canny",
"caption",
"channel",
"channel_fx",
"charcoal",
"chop",
"clahe",
"clamp",
"clip",
"clip_path",
"clone",
"clut",
"coalesce",
"colorize",
"colormap",
"color_matrix",
"colors",
"colorspace",
"colourspace",
"color_threshold",
"combine",
"combine_options",
"comment",
"compare",
"complex",
"compose",
"composite",
"compress",
"connected_components",
"contrast",
"contrast_stretch",
"convert",
"convolve",
"copy",
"crop",
"cycle",
"deconstruct",
"define",
"delay",
"delete",
"density",
"depth",
"descend",
"deskew",
"despeckle",
"direction",
"displace",
"dispose",
"dissimilarity_threshold",
"dissolve",
"distort",
"dither",
"draw",
"duplicate",
"edge",
"emboss",
"encoding",
"endian",
"enhance",
"equalize",
"evaluate",
"evaluate_sequence",
"extent",
"extract",
"family",
"features",
"fft",
"fill",
"filter",
"flatten",
"flip",
"floodfill",
"flop",
"font",
"foreground",
"format",
"frame",
"function",
"fuzz",
"fx",
"gamma",
"gaussian_blur",
"geometry",
"gravity",
"grayscale",
"green_primary",
"hald_clut",
"highlight_color",
"hough_lines",
"iconGeometry",
"iconic",
"identify",
"ift",
"illuminant",
"immutable",
"implode",
"insert",
"intensity",
"intent",
"interlace",
"interline_spacing",
"interpolate",
"interpolative_resize",
"interword_spacing",
"kerning",
"kmeans",
"kuwahara",
"label",
"lat",
"layers",
"level",
"level_colors",
"limit",
"limits",
"linear_stretch",
"linewidth",
"liquid_rescale",
"list",
"loader",
"log",
"loop",
"lowlight_color",
"magnify",
"map",
"mattecolor",
"median",
"mean_shift",
"metric",
"mode",
"modulate",
"moments",
"monitor",
"monochrome",
"morph",
"morphology",
"mosaic",
"motion_blur",
"name",
"negate",
"noise",
"normalize",
"opaque",
"ordered_dither",
"orient",
"page",
"paint",
"pause",
"perceptible",
"ping",
"pointsize",
"polaroid",
"poly",
"posterize",
"precision",
"preview",
"process",
"quality",
"quantize",
"quiet",
"radial_blur",
"raise",
"random_threshold",
"range_threshold",
"red_primary",
"regard_warnings",
"region",
"remote",
"render",
"repage",
"resample",
"resize",
"resize_to_fill",
"resize_to_fit",
"resize_to_limit",
"resize_and_pad",
"respect_parentheses",
"reverse",
"roll",
"rotate",
"sample",
"sampling_factor",
"saver",
"scale",
"scene",
"screen",
"seed",
"segment",
"selective_blur",
"separate",
"sepia_tone",
"shade",
"shadow",
"shared_memory",
"sharpen",
"shave",
"shear",
"sigmoidal_contrast",
"silent",
"similarity_threshold",
"size",
"sketch",
"smush",
"snaps",
"solarize",
"sort_pixels",
"sparse_color",
"splice",
"spread",
"statistic",
"stegano",
"stereo",
"storage_type",
"stretch",
"strip",
"stroke",
"strokewidth",
"style",
"subimage_search",
"swap",
"swirl",
"synchronize",
"taint",
"text_font",
"threshold",
"thumbnail",
"tile_offset",
"tint",
"title",
"transform",
"transparent",
"transparent_color",
"transpose",
"transverse",
"treedepth",
"trim",
"type",
"undercolor",
"unique_colors",
"units",
"unsharp",
"update",
"valid_image",
"view",
"vignette",
"virtual_pixel",
"visual",
"watermark",
"wave",
"wavelet_denoise",
"weight",
"white_balance",
"white_point",
"white_threshold",
"window",
"window_group",
].concat(ActiveStorage.supported_image_processing_methods)

UNSUPPORTED_IMAGE_PROCESSING_ARGUMENTS = ActiveStorage.unsupported_image_processing_arguments

class << self
# Returns a Variation instance based on the given variator. If the variator is a Variation, it is
# returned unmodified. If it is a String, it is passed to ActiveStorage::Variation.decode. Otherwise,
Expand Down Expand Up @@ -388,7 +96,7 @@ def eligible_argument?(argument)
def validate_transformation(name, argument)
method_name = name.to_s.gsub("-","_")

unless SUPPORTED_IMAGE_PROCESSING_METHODS.any? { |method| method_name == method }
unless ActiveStorage.supported_image_processing_methods.any? { |method| method_name == method }
raise UnsupportedImageProcessingMethod, <<~ERROR.squish
One or more of the provided transformation methods is not supported.
ERROR
Expand All @@ -406,7 +114,7 @@ def validate_transformation(name, argument)
end

def validate_arg_string(argument)
if UNSUPPORTED_IMAGE_PROCESSING_ARGUMENTS.any? { |bad_arg| argument.to_s.downcase.include?(bad_arg) }; raise UnsupportedImageProcessingArgument end
if ActiveStorage.unsupported_image_processing_arguments.any? { |bad_arg| argument.to_s.downcase.include?(bad_arg) }; raise UnsupportedImageProcessingArgument end
end

def validate_arg_array(argument)
Expand Down

0 comments on commit 8dca987

Please sign in to comment.