* 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
|
@ -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…
Reference in a new issue