diff --git a/app/actions/contact_identify_action.rb b/app/actions/contact_identify_action.rb index a88d3535b..bcf5a93c3 100644 --- a/app/actions/contact_identify_action.rb +++ b/app/actions/contact_identify_action.rb @@ -6,6 +6,7 @@ # We don't want to update the name of the identified original contact. class ContactIdentifyAction + include UrlHelper pattr_initialize [:contact!, :params!, { retain_original_contact_name: false, discard_invalid_attrs: false }] def perform @@ -104,7 +105,14 @@ class ContactIdentifyAction # TODO: replace reject { |_k, v| v.blank? } with compact_blank when rails is upgraded @contact.discard_invalid_attrs if discard_invalid_attrs @contact.save! - Avatar::AvatarFromUrlJob.perform_later(@contact, params[:avatar_url]) if params[:avatar_url].present? && !@contact.avatar.attached? + enqueue_avatar_job + end + + def enqueue_avatar_job + return unless params[:avatar_url].present? && !@contact.avatar.attached? + return unless url_valid?(params[:avatar_url]) + + Avatar::AvatarFromUrlJob.perform_later(@contact, params[:avatar_url]) end def merge_contact(base_contact, merge_contact) diff --git a/app/jobs/avatar/avatar_from_gravatar_job.rb b/app/jobs/avatar/avatar_from_gravatar_job.rb index 4a967d74f..46efc3dd8 100644 --- a/app/jobs/avatar/avatar_from_gravatar_job.rb +++ b/app/jobs/avatar/avatar_from_gravatar_job.rb @@ -1,5 +1,5 @@ class Avatar::AvatarFromGravatarJob < ApplicationJob - queue_as :low + queue_as :purgable def perform(avatarable, email) return if GlobalConfigService.load('DISABLE_GRAVATAR', '').present? diff --git a/app/jobs/avatar/avatar_from_url_job.rb b/app/jobs/avatar/avatar_from_url_job.rb index f0d877b54..9996cf3eb 100644 --- a/app/jobs/avatar/avatar_from_url_job.rb +++ b/app/jobs/avatar/avatar_from_url_job.rb @@ -1,5 +1,5 @@ class Avatar::AvatarFromUrlJob < ApplicationJob - queue_as :low + queue_as :purgable def perform(avatarable, avatar_url) return unless avatarable.respond_to?(:avatar) diff --git a/config/sidekiq.yml b/config/sidekiq.yml index d2d764382..50a47a20b 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -24,6 +24,7 @@ - low - scheduled_jobs - deferred + - purgable - housekeeping - async_database_migration - active_storage_analysis diff --git a/spec/actions/contact_identify_action_spec.rb b/spec/actions/contact_identify_action_spec.rb index c9bae7b5a..568f4db98 100644 --- a/spec/actions/contact_identify_action_spec.rb +++ b/spec/actions/contact_identify_action_spec.rb @@ -36,12 +36,18 @@ describe ContactIdentifyAction do expect(result.additional_attributes['social_profiles']).to eq({ 'linkedin' => 'saras', 'twitter' => 'saras' }) end - it 'enques avatar job when avatar url parameter is passed' do + it 'enqueues avatar job when valid avatar url parameter is passed' do params = { name: 'test', avatar_url: 'https://chatwoot-assets.local/sample.png' } expect(Avatar::AvatarFromUrlJob).to receive(:perform_later).with(contact, params[:avatar_url]).once described_class.new(contact: contact, params: params).perform end + it 'does not enqueue avatar job when invalid avatar url parameter is passed' do + params = { name: 'test', avatar_url: 'invalid-url' } + expect(Avatar::AvatarFromUrlJob).not_to receive(:perform_later) + described_class.new(contact: contact, params: params).perform + end + context 'when contact with same identifier exists' do it 'merges the current contact to identified contact' do existing_identified_contact = create(:contact, account: account, identifier: 'test_id') diff --git a/spec/jobs/avatar/avatar_from_gravatar_job_spec.rb b/spec/jobs/avatar/avatar_from_gravatar_job_spec.rb index 4f73fd4b2..06ebe739d 100644 --- a/spec/jobs/avatar/avatar_from_gravatar_job_spec.rb +++ b/spec/jobs/avatar/avatar_from_gravatar_job_spec.rb @@ -7,7 +7,7 @@ RSpec.describe Avatar::AvatarFromGravatarJob do it 'enqueues the job' do expect { described_class.perform_later(avatarable, email) }.to have_enqueued_job(described_class) - .on_queue('low') + .on_queue('purgable') end it 'will call AvatarFromUrlJob with gravatar url' do diff --git a/spec/jobs/avatar/avatar_from_url_job_spec.rb b/spec/jobs/avatar/avatar_from_url_job_spec.rb index 25276bc67..2e6d89804 100644 --- a/spec/jobs/avatar/avatar_from_url_job_spec.rb +++ b/spec/jobs/avatar/avatar_from_url_job_spec.rb @@ -6,7 +6,7 @@ RSpec.describe Avatar::AvatarFromUrlJob do it 'enqueues the job' do expect { described_class.perform_later(avatarable, avatar_url) }.to have_enqueued_job(described_class) - .on_queue('low') + .on_queue('purgable') end it 'will attach avatar from url' do