From 892e1fd33341bdf4f6fe1eba5dc295ef35dc78f7 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Tue, 7 May 2024 11:37:28 -0700 Subject: [PATCH 1/4] chore:Remove the official support for 360Dialog APIs (#9356) --- .../routes/dashboard/settings/inbox/channels/Whatsapp.vue | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Whatsapp.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Whatsapp.vue index d1f8d5b8c..8206e4651 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Whatsapp.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/Whatsapp.vue @@ -16,9 +16,6 @@ - From de044e29f09d485acc25e1e058ebbea2ce91c523 Mon Sep 17 00:00:00 2001 From: Pranav Date: Tue, 7 May 2024 12:03:38 -0700 Subject: [PATCH 2/4] chore: Rescue Oauth2::Error and mark the channel as inactive (#9358) Co-authored-by: Sojan --- app/jobs/inboxes/fetch_imap_emails_job.rb | 3 +++ .../jobs/inboxes/fetch_imap_emails_job_spec.rb | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/app/jobs/inboxes/fetch_imap_emails_job.rb b/app/jobs/inboxes/fetch_imap_emails_job.rb index a00094bd1..34f79d733 100644 --- a/app/jobs/inboxes/fetch_imap_emails_job.rb +++ b/app/jobs/inboxes/fetch_imap_emails_job.rb @@ -36,6 +36,9 @@ class Inboxes::FetchImapEmailsJob < MutexApplicationJob inbound_emails.map do |inbound_mail| process_mail(inbound_mail, channel) end + rescue OAuth2::Error => e + Rails.logger.error "Error for email channel - #{channel.inbox.id} : #{e.message}" + channel.authorization_error! end def process_mail(inbound_mail, channel) diff --git a/spec/jobs/inboxes/fetch_imap_emails_job_spec.rb b/spec/jobs/inboxes/fetch_imap_emails_job_spec.rb index 8b81de070..5054a519c 100644 --- a/spec/jobs/inboxes/fetch_imap_emails_job_spec.rb +++ b/spec/jobs/inboxes/fetch_imap_emails_job_spec.rb @@ -69,6 +69,24 @@ RSpec.describe Inboxes::FetchImapEmailsJob do end end + context 'when IMAP OAuth errors out' do + it 'marks the connection as requiring authorization' do + error_response = double + oauth_error = OAuth2::Error.new(error_response) + + allow(Imap::MicrosoftFetchEmailService).to receive(:new) + .with(channel: microsoft_imap_email_channel, interval: 1) + .and_raise(oauth_error) + + allow(Redis::Alfred).to receive(:incr) + + expect(Redis::Alfred).to receive(:incr) + .with("AUTHORIZATION_ERROR_COUNT:channel_email:#{microsoft_imap_email_channel.id}") + + described_class.perform_now(microsoft_imap_email_channel) + end + end + context 'when the fetch service returns the email objects' do let(:inbound_mail) { create_inbound_email_from_fixture('welcome.eml').mail } let(:mailbox) { double } From 2ef767d60fc349163210e8a8f39a9e779c332d4d Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Wed, 8 May 2024 08:48:36 +0530 Subject: [PATCH 3/4] feat: exporting contacts takes the filters into account (#9347) - This PR allows contacts to be exported using the current filter in CRM view Co-authored-by: Sojan Jose --- .../api/v1/accounts/contacts_controller.rb | 5 +- app/javascript/dashboard/api/contacts.js | 4 +- .../dashboard/i18n/locale/en/contact.json | 1 + .../contacts/components/ContactsView.vue | 15 ++- .../dashboard/contacts/components/Header.vue | 17 ++-- .../store/modules/contacts/actions.js | 5 +- app/jobs/account/contacts_export_job.rb | 52 +++++++---- app/services/contacts/filter_service.rb | 10 +- config/routes.rb | 2 +- .../v1/accounts/contacts_controller_spec.rb | 48 +++++++--- spec/jobs/account/contacts_export_job_spec.rb | 92 +++++++++++++++++-- spec/services/contacts/filter_service_spec.rb | 27 +++--- 12 files changed, 213 insertions(+), 65 deletions(-) diff --git a/app/controllers/api/v1/accounts/contacts_controller.rb b/app/controllers/api/v1/accounts/contacts_controller.rb index 729db34b5..250c64a86 100644 --- a/app/controllers/api/v1/accounts/contacts_controller.rb +++ b/app/controllers/api/v1/accounts/contacts_controller.rb @@ -46,7 +46,8 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController def export column_names = params['column_names'] - Account::ContactsExportJob.perform_later(Current.account.id, column_names, Current.user.email) + filter_params = { :payload => params.permit!['payload'], :label => params.permit!['label'] } + Account::ContactsExportJob.perform_later(Current.account.id, Current.user.id, column_names, filter_params) head :ok, message: I18n.t('errors.contacts.export.success') end @@ -61,7 +62,7 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController def show; end def filter - result = ::Contacts::FilterService.new(params.permit!, current_user).perform + result = ::Contacts::FilterService.new(Current.account, Current.user, params.permit!).perform contacts = result[:contacts] @contacts_count = result[:count] @contacts = fetch_contacts(contacts) diff --git a/app/javascript/dashboard/api/contacts.js b/app/javascript/dashboard/api/contacts.js index 61312dd24..85c4bba1d 100644 --- a/app/javascript/dashboard/api/contacts.js +++ b/app/javascript/dashboard/api/contacts.js @@ -77,8 +77,8 @@ class ContactAPI extends ApiClient { return axios.delete(`${this.url}/${contactId}/avatar`); } - exportContacts() { - return axios.get(`${this.url}/export`); + exportContacts(queryPayload) { + return axios.post(`${this.url}/export`, queryPayload); } } diff --git a/app/javascript/dashboard/i18n/locale/en/contact.json b/app/javascript/dashboard/i18n/locale/en/contact.json index ebd2556e4..4db7fce93 100644 --- a/app/javascript/dashboard/i18n/locale/en/contact.json +++ b/app/javascript/dashboard/i18n/locale/en/contact.json @@ -84,6 +84,7 @@ "CONFIRM": { "TITLE": "Export Contacts", "MESSAGE": "Are you sure you want to export all contacts?", + "FILTERED_MESSAGE": "Are you sure you want to export all the filtered contacts?", "YES": "Yes, Export", "NO": "No, Cancel" } diff --git a/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsView.vue b/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsView.vue index 41e0dff56..1a824f587 100644 --- a/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsView.vue +++ b/app/javascript/dashboard/routes/dashboard/contacts/components/ContactsView.vue @@ -1,5 +1,5 @@