* Make custom emoji domains case sensitive #9351 * Fixup style in downcase_domain to comply with codeclimate. * switch if! to unless * Don't use transactions, operate in batches. Also revert spurious schema change.
This commit is contained in:
		
							parent
							
								
									dbb1ee269f
								
							
						
					
					
						commit
						7d00e4edbd
					
				
					 5 changed files with 24 additions and 2 deletions
				
			
		|  | @ -31,6 +31,8 @@ class CustomEmoji < ApplicationRecord | ||||||
| 
 | 
 | ||||||
|   has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce -strip' } } |   has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce -strip' } } | ||||||
| 
 | 
 | ||||||
|  |   before_validation :downcase_domain | ||||||
|  | 
 | ||||||
|   validates_attachment :image, content_type: { content_type: 'image/png' }, presence: true, size: { less_than: LIMIT } |   validates_attachment :image, content_type: { content_type: 'image/png' }, presence: true, size: { less_than: LIMIT } | ||||||
|   validates :shortcode, uniqueness: { scope: :domain }, format: { with: /\A#{SHORTCODE_RE_FRAGMENT}\z/ }, length: { minimum: 2 } |   validates :shortcode, uniqueness: { scope: :domain }, format: { with: /\A#{SHORTCODE_RE_FRAGMENT}\z/ }, length: { minimum: 2 } | ||||||
| 
 | 
 | ||||||
|  | @ -73,4 +75,8 @@ class CustomEmoji < ApplicationRecord | ||||||
|   def remove_entity_cache |   def remove_entity_cache | ||||||
|     Rails.cache.delete(EntityCache.instance.to_key(:emoji, shortcode, domain)) |     Rails.cache.delete(EntityCache.instance.to_key(:emoji, shortcode, domain)) | ||||||
|   end |   end | ||||||
|  | 
 | ||||||
|  |   def downcase_domain | ||||||
|  |     self.domain = domain.downcase unless domain.nil? | ||||||
|  |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -26,7 +26,7 @@ class CustomEmojiFilter | ||||||
|     when 'remote' |     when 'remote' | ||||||
|       CustomEmoji.remote |       CustomEmoji.remote | ||||||
|     when 'by_domain' |     when 'by_domain' | ||||||
|       CustomEmoji.where(domain: value) |       CustomEmoji.where(domain: value.downcase) | ||||||
|     when 'shortcode' |     when 'shortcode' | ||||||
|       CustomEmoji.search(value) |       CustomEmoji.search(value) | ||||||
|     else |     else | ||||||
|  |  | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | class DowncaseCustomEmojiDomains < ActiveRecord::Migration[5.2] | ||||||
|  |   disable_ddl_transaction! | ||||||
|  | 
 | ||||||
|  |   def change | ||||||
|  |     CustomEmoji.in_batches.update_all('domain = lower(domain)') | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | @ -10,7 +10,7 @@ | ||||||
| # | # | ||||||
| # It's strongly recommended that you check this file into your version control system. | # It's strongly recommended that you check this file into your version control system. | ||||||
| 
 | 
 | ||||||
| ActiveRecord::Schema.define(version: 2018_12_04_215309) do | ActiveRecord::Schema.define(version: 2018_12_07_011115) do | ||||||
| 
 | 
 | ||||||
|   # These are extensions that must be enabled in order to support this database |   # These are extensions that must be enabled in order to support this database | ||||||
|   enable_extension "plpgsql" |   enable_extension "plpgsql" | ||||||
|  |  | ||||||
|  | @ -75,4 +75,13 @@ RSpec.describe CustomEmoji, type: :model do | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  | 
 | ||||||
|  |   describe 'pre_validation' do | ||||||
|  |     let(:custom_emoji) { Fabricate(:custom_emoji, domain: 'wWw.MaStOdOn.CoM') } | ||||||
|  | 
 | ||||||
|  |     it 'should downcase' do | ||||||
|  |       custom_emoji.valid? | ||||||
|  |       expect(custom_emoji.domain).to eq('www.mastodon.com') | ||||||
|  |     end | ||||||
|  |   end | ||||||
| end | end | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue