31cdc63e18
* Remove IMAP and SMTP email validation * Rename imap_email & smtp_email columns to imap_login & smtp_login respectively. * Use channel email domain if inbound email domain not present
77 lines
2.4 KiB
Ruby
77 lines
2.4 KiB
Ruby
module Api::V1::InboxesHelper
|
|
def validate_email_channel(attributes)
|
|
channel_data = permitted_params(attributes)[:channel]
|
|
|
|
validate_imap(channel_data)
|
|
validate_smtp(channel_data)
|
|
end
|
|
|
|
private
|
|
|
|
def validate_imap(channel_data)
|
|
return unless channel_data.key?('imap_enabled') && channel_data[:imap_enabled]
|
|
|
|
Mail.defaults do
|
|
retriever_method :imap, { address: channel_data[:imap_address],
|
|
port: channel_data[:imap_port],
|
|
user_name: channel_data[:imap_login],
|
|
password: channel_data[:imap_password],
|
|
enable_ssl: channel_data[:imap_enable_ssl] }
|
|
end
|
|
|
|
Mail.connection do # rubocop:disable:block
|
|
end
|
|
end
|
|
|
|
def validate_smtp(channel_data)
|
|
return unless channel_data.key?('smtp_enabled') && channel_data[:smtp_enabled]
|
|
|
|
smtp = Net::SMTP.new(channel_data[:smtp_address], channel_data[:smtp_port])
|
|
|
|
set_smtp_encryption(channel_data, smtp)
|
|
check_smtp_connection(channel_data, smtp)
|
|
end
|
|
|
|
def check_smtp_connection(channel_data, smtp)
|
|
smtp.start(channel_data[:smtp_domain], channel_data[:smtp_login], channel_data[:smtp_password],
|
|
channel_data[:smtp_authentication]&.to_sym || :login)
|
|
smtp.finish unless smtp&.nil?
|
|
end
|
|
|
|
def set_smtp_encryption(channel_data, smtp)
|
|
if channel_data[:smtp_enable_ssl_tls]
|
|
set_enable_tls(channel_data, smtp)
|
|
elsif channel_data[:smtp_enable_starttls_auto]
|
|
set_enable_starttls_auto(channel_data, smtp)
|
|
end
|
|
end
|
|
|
|
def set_enable_starttls_auto(channel_data, smtp)
|
|
return unless smtp.respond_to?(:enable_starttls_auto)
|
|
|
|
if channel_data[:smtp_openssl_verify_mode]
|
|
context = enable_openssl_mode(channel_data[:smtp_openssl_verify_mode])
|
|
smtp.enable_starttls_auto(context)
|
|
else
|
|
smtp.enable_starttls_auto
|
|
end
|
|
end
|
|
|
|
def set_enable_tls(channel_data, smtp)
|
|
return unless smtp.respond_to?(:enable_tls)
|
|
|
|
if channel_data[:smtp_openssl_verify_mode]
|
|
context = enable_openssl_mode(channel_data[:smtp_openssl_verify_mode])
|
|
smtp.enable_tls(context)
|
|
else
|
|
smtp.enable_tls
|
|
end
|
|
end
|
|
|
|
def enable_openssl_mode(smtp_openssl_verify_mode)
|
|
openssl_verify_mode = "OpenSSL::SSL::VERIFY_#{smtp_openssl_verify_mode.upcase}".constantize if smtp_openssl_verify_mode.is_a?(String)
|
|
context = Net::SMTP.default_ssl_context
|
|
context.verify_mode = openssl_verify_mode
|
|
context
|
|
end
|
|
end
|