# Pull Request Template ## Description This PR adds IMAP authentication mechanism selection to Chatwoot's email inbox configuration. Users can now choose between 'plain', 'login', and 'cram-md5' authentication methods when configuring IMAP settings, providing flexibility for different email providers that require specific authentication types. https://github.com/chatwoot/chatwoot/issues/8867 The implementation includes: - Frontend dropdown with numeric keys (1, 2, 3) matching SMTP auth style - Backend API validation for allowed authentication mechanisms - Consistent 'cram-md5' format throughout the codebase - Updated IMAP service to handle different auth types properly This feature maintains consistency with existing SMTP authentication options and follows the established UI/UX patterns in the application. ## Type of change Please delete options that are not relevant. - [x] New feature (non-breaking change which adds functionality) - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] Breaking change (fix or feature that would cause existing functionality not to work as expected) - [ ] This change requires a documentation update ## How Has This Been Tested? ### Manual Testing: - Tested in Docker environment - Verified IMAP auth dropdown appears in inbox settings - Confirmed all three auth mechanisms (plain, login, cram-md5) can be selected and saved - Tested API validation by attempting to save invalid auth mechanisms ### Automated Testing: - Updated existing IMAP service tests to use consistent lowercase values - Updated API controller tests for authentication parameter handling - All tests pass locally with the new changes ### Test Configuration: - Tested with both new and existing inbox configurations ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [x] Any dependent changes have been merged and published in downstream modules ## Additional Notes - This feature is backward compatible and doesn't break existing IMAP configurations - The 'cram-md5' format is used consistently throughout (UI, API, storage, services) - Net::IMAP compatibility is maintained by converting to 'CRAM-MD5' internally - Follows the same pattern established by SMTP authentication configuration --------- Co-authored-by: João Santos <joao.santos@madigital.eu> Co-authored-by: Sony Mathew <sony@chatwoot.com>
41 lines
1.1 KiB
Ruby
41 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
FactoryBot.define do
|
|
factory :channel_email, class: 'Channel::Email' do
|
|
sequence(:email) { |n| "care-#{n}@example.com" }
|
|
sequence(:forward_to_email) { |n| "forward-#{n}@chatwoot.com" }
|
|
account
|
|
after(:create) do |channel_email|
|
|
create(:inbox, channel: channel_email, account: channel_email.account)
|
|
end
|
|
|
|
trait :microsoft_email do
|
|
imap_enabled { true }
|
|
imap_address { 'outlook.office365.com' }
|
|
imap_port { 993 }
|
|
imap_login { 'email@example.com' }
|
|
imap_password { '' }
|
|
imap_enable_ssl { true }
|
|
|
|
provider_config do
|
|
{
|
|
expires_on: Time.zone.now + 3600,
|
|
access_token: SecureRandom.hex,
|
|
refresh_token: SecureRandom.hex
|
|
}
|
|
end
|
|
provider { 'microsoft' }
|
|
end
|
|
|
|
trait :imap_email do
|
|
imap_enabled { true }
|
|
imap_address { 'imap.gmail.com' }
|
|
imap_port { 993 }
|
|
imap_login { 'email@example.com' }
|
|
imap_password { 'random-password' }
|
|
imap_enable_ssl { true }
|
|
imap_authentication { 'plain' }
|
|
end
|
|
end
|
|
end
|