mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-12-18 03:25:31 -05:00
45 lines
1.3 KiB
Ruby
45 lines
1.3 KiB
Ruby
|
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")
|
||
|
else
|
||
|
I18n.t("site_settings.errors.pop3_polling_authentication_failed")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def authentication_works?
|
||
|
@authentication_works ||= begin
|
||
|
pop3 = Net::POP3.new(SiteSetting.pop3_polling_host, SiteSetting.pop3_polling_port)
|
||
|
pop3.enable_ssl(OpenSSL::SSL::VERIFY_NONE) if SiteSetting.pop3_polling_ssl
|
||
|
pop3.auth_only(SiteSetting.pop3_polling_username, SiteSetting.pop3_polling_password)
|
||
|
rescue Net::POPAuthenticationError
|
||
|
false
|
||
|
else
|
||
|
true
|
||
|
end
|
||
|
end
|
||
|
end
|