discourse/lib/validators/pop3_polling_enabled_setting_validator.rb
Jarek Radosz 683ae3f8b9
DEV: Fix assigned but unused variable Prism warnings (#39436)
(Prism is the Ruby LSP parser; those checks might eventually find their
way to rubocop-discourse)

Skipped specs, database migrations, and imports.
2026-04-22 12:42:14 +02:00

49 lines
1.5 KiB
Ruby

# frozen_string_literal: true
require "net/pop"
class POP3PollingEnabledSettingValidator
def initialize(opts = {})
@opts = opts
end
def valid_value?(val)
# only validate when enabling polling
return true if val == "f"
# ensure we can authenticate
SiteSetting.pop3_polling_host.present? && SiteSetting.pop3_polling_username.present? &&
SiteSetting.pop3_polling_password.present? && authentication_works?
end
def error_message
if SiteSetting.pop3_polling_host.blank?
I18n.t("site_settings.errors.pop3_polling_host_is_empty")
elsif SiteSetting.pop3_polling_username.blank?
I18n.t("site_settings.errors.pop3_polling_username_is_empty")
elsif SiteSetting.pop3_polling_password.blank?
I18n.t("site_settings.errors.pop3_polling_password_is_empty")
elsif !authentication_works?
I18n.t("site_settings.errors.pop3_polling_authentication_failed")
end
end
private
def authentication_works?
@authentication_works ||=
begin
EmailSettingsValidator.validate_pop3(
host: SiteSetting.pop3_polling_host,
port: SiteSetting.pop3_polling_port,
ssl: SiteSetting.pop3_polling_ssl,
username: SiteSetting.pop3_polling_username,
password: SiteSetting.pop3_polling_password,
openssl_verify: SiteSetting.pop3_polling_openssl_verify,
)
rescue *EmailSettingsExceptionHandler::EXPECTED_EXCEPTIONS
false
else
true
end
end
end