Fix site upload validations (#22479)
* Fix site settings media upload handling of DimensionsValidationError Fixes #22234 * Fix underlying validations not being performed for site uploads
This commit is contained in:
		
							parent
							
								
									81ae025687
								
							
						
					
					
						commit
						d809eb0e83
					
				
					 1 changed files with 19 additions and 1 deletions
				
			
		| 
						 | 
					@ -66,6 +66,7 @@ class Form::AdminSettings
 | 
				
			||||||
  validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) }, if: -> { defined?(@show_domain_blocks_rationale) }
 | 
					  validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) }, if: -> { defined?(@show_domain_blocks_rationale) }
 | 
				
			||||||
  validates :media_cache_retention_period, :content_cache_retention_period, :backups_retention_period, numericality: { only_integer: true }, allow_blank: true, if: -> { defined?(@media_cache_retention_period) || defined?(@content_cache_retention_period) || defined?(@backups_retention_period) }
 | 
					  validates :media_cache_retention_period, :content_cache_retention_period, :backups_retention_period, numericality: { only_integer: true }, allow_blank: true, if: -> { defined?(@media_cache_retention_period) || defined?(@content_cache_retention_period) || defined?(@backups_retention_period) }
 | 
				
			||||||
  validates :site_short_description, length: { maximum: 200 }, if: -> { defined?(@site_short_description) }
 | 
					  validates :site_short_description, length: { maximum: 200 }, if: -> { defined?(@site_short_description) }
 | 
				
			||||||
 | 
					  validate :validate_site_uploads
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  KEYS.each do |key|
 | 
					  KEYS.each do |key|
 | 
				
			||||||
    define_method(key) do
 | 
					    define_method(key) do
 | 
				
			||||||
| 
						 | 
					@ -87,11 +88,16 @@ class Form::AdminSettings
 | 
				
			||||||
    define_method("#{key}=") do |file|
 | 
					    define_method("#{key}=") do |file|
 | 
				
			||||||
      value = public_send(key)
 | 
					      value = public_send(key)
 | 
				
			||||||
      value.file = file
 | 
					      value.file = file
 | 
				
			||||||
 | 
					    rescue Mastodon::DimensionsValidationError => e
 | 
				
			||||||
 | 
					      errors.add(key.to_sym, e.message)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def save
 | 
					  def save
 | 
				
			||||||
    return false unless valid?
 | 
					    # NOTE: Annoyingly, files are processed and can error out before
 | 
				
			||||||
 | 
					    # validations are called, and `valid?` clears errors…
 | 
				
			||||||
 | 
					    # So for now, return early if errors aren't empty.
 | 
				
			||||||
 | 
					    return false unless errors.empty? && valid?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    KEYS.each do |key|
 | 
					    KEYS.each do |key|
 | 
				
			||||||
      next unless instance_variable_defined?("@#{key}")
 | 
					      next unless instance_variable_defined?("@#{key}")
 | 
				
			||||||
| 
						 | 
					@ -116,4 +122,16 @@ class Form::AdminSettings
 | 
				
			||||||
      value
 | 
					      value
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def validate_site_uploads
 | 
				
			||||||
 | 
					    UPLOAD_KEYS.each do |key|
 | 
				
			||||||
 | 
					      next unless instance_variable_defined?("@#{key}")
 | 
				
			||||||
 | 
					      upload = instance_variable_get("@#{key}")
 | 
				
			||||||
 | 
					      next if upload.valid?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      upload.errors.each do |error|
 | 
				
			||||||
 | 
					        errors.import(error, attribute: key)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue