Refactored Incoming Email checks to use SystemCheck library
This commit is contained in:
parent
eb79e5689e
commit
71000b394b
5 changed files with 151 additions and 117 deletions
23
lib/system_check/incoming_email/foreman_configured_check.rb
Normal file
23
lib/system_check/incoming_email/foreman_configured_check.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
module SystemCheck
|
||||
module IncomingEmail
|
||||
class ForemanConfiguredCheck < SystemCheck::BaseCheck
|
||||
set_name 'Foreman configured correctly?'
|
||||
|
||||
def check?
|
||||
path = Rails.root.join('Procfile')
|
||||
|
||||
File.exist?(path) && File.read(path) =~ /^mail_room:/
|
||||
end
|
||||
|
||||
def show_error
|
||||
try_fixing_it(
|
||||
'Enable mail_room in your Procfile.'
|
||||
)
|
||||
for_more_information(
|
||||
'doc/administration/reply_by_email.md'
|
||||
)
|
||||
fix_and_rerun
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
45
lib/system_check/incoming_email/imap_authentication_check.rb
Normal file
45
lib/system_check/incoming_email/imap_authentication_check.rb
Normal file
|
@ -0,0 +1,45 @@
|
|||
module SystemCheck
|
||||
module IncomingEmail
|
||||
class ImapAuthenticationCheck < SystemCheck::BaseCheck
|
||||
set_name 'IMAP server credentials are correct?'
|
||||
|
||||
def check?
|
||||
if mailbox_config
|
||||
begin
|
||||
imap = Net::IMAP.new(config[:host], port: config[:port], ssl: config[:ssl])
|
||||
imap.starttls if config[:start_tls]
|
||||
imap.login(config[:email], config[:password])
|
||||
connected = true
|
||||
rescue
|
||||
connected = false
|
||||
end
|
||||
end
|
||||
|
||||
connected
|
||||
end
|
||||
|
||||
def show_error
|
||||
try_fixing_it(
|
||||
'Check that the information in config/gitlab.yml is correct'
|
||||
)
|
||||
for_more_information(
|
||||
'doc/administration/reply_by_email.md'
|
||||
)
|
||||
fix_and_rerun
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def mailbox_config
|
||||
return @config if @config
|
||||
|
||||
config_path = Rails.root.join('config', 'mail_room.yml').to_s
|
||||
erb = ERB.new(File.read(config_path))
|
||||
erb.filename = config_path
|
||||
config_file = YAML.load(erb.result)
|
||||
|
||||
@config = config_file[:mailboxes]&.first
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
32
lib/system_check/incoming_email/initd_configured_check.rb
Normal file
32
lib/system_check/incoming_email/initd_configured_check.rb
Normal file
|
@ -0,0 +1,32 @@
|
|||
module SystemCheck
|
||||
module IncomingEmail
|
||||
class InitdConfiguredCheck < SystemCheck::BaseCheck
|
||||
set_name 'Init.d configured correctly?'
|
||||
|
||||
def skip?
|
||||
omnibus_gitlab?
|
||||
end
|
||||
|
||||
def check?
|
||||
mail_room_configured?
|
||||
end
|
||||
|
||||
def show_error
|
||||
try_fixing_it(
|
||||
'Enable mail_room in the init.d configuration.'
|
||||
)
|
||||
for_more_information(
|
||||
'doc/administration/reply_by_email.md'
|
||||
)
|
||||
fix_and_rerun
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def mail_room_configured?
|
||||
path = '/etc/default/gitlab'
|
||||
File.exist?(path) && File.read(path).include?('mail_room_enabled=true')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
43
lib/system_check/incoming_email/mail_room_running_check.rb
Normal file
43
lib/system_check/incoming_email/mail_room_running_check.rb
Normal file
|
@ -0,0 +1,43 @@
|
|||
module SystemCheck
|
||||
module IncomingEmail
|
||||
class MailRoomRunningCheck < SystemCheck::BaseCheck
|
||||
set_name 'MailRoom running?'
|
||||
|
||||
def skip?
|
||||
return true if omnibus_gitlab?
|
||||
|
||||
unless mail_room_configured?
|
||||
self.skip_reason = "can't check because of previous errors"
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
def check?
|
||||
mail_room_running?
|
||||
end
|
||||
|
||||
def show_error
|
||||
try_fixing_it(
|
||||
sudo_gitlab('RAILS_ENV=production bin/mail_room start')
|
||||
)
|
||||
for_more_information(
|
||||
see_installation_guide_section('Install Init Script'),
|
||||
'see log/mail_room.log for possible errors'
|
||||
)
|
||||
fix_and_rerun
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def mail_room_configured?
|
||||
path = '/etc/default/gitlab'
|
||||
File.exist?(path) && File.read(path).include?('mail_room_enabled=true')
|
||||
end
|
||||
|
||||
def mail_room_running?
|
||||
ps_ux, _ = Gitlab::Popen.popen(%w(ps uxww))
|
||||
ps_ux.include?("mail_room")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -308,132 +308,23 @@ namespace :gitlab do
|
|||
desc "GitLab | Check the configuration of Reply by email"
|
||||
task check: :environment do
|
||||
warn_user_is_not_gitlab
|
||||
start_checking "Reply by email"
|
||||
|
||||
if Gitlab.config.incoming_email.enabled
|
||||
check_imap_authentication
|
||||
checks = [
|
||||
SystemCheck::IncomingEmail::ImapAuthenticationCheck
|
||||
]
|
||||
|
||||
if Rails.env.production?
|
||||
check_initd_configured_correctly
|
||||
check_mail_room_running
|
||||
checks << SystemCheck::IncomingEmail::InitdConfiguredCheck
|
||||
checks << SystemCheck::IncomingEmail::MailRoomRunningCheck
|
||||
else
|
||||
check_foreman_configured_correctly
|
||||
checks << SystemCheck::IncomingEmail::ForemanConfiguredCheck
|
||||
end
|
||||
|
||||
SystemCheck.run('Reply by email', checks)
|
||||
else
|
||||
puts 'Reply by email is disabled in config/gitlab.yml'
|
||||
end
|
||||
|
||||
finished_checking "Reply by email"
|
||||
end
|
||||
|
||||
# Checks
|
||||
########################
|
||||
|
||||
def check_initd_configured_correctly
|
||||
return if omnibus_gitlab?
|
||||
|
||||
print "Init.d configured correctly? ... "
|
||||
|
||||
path = "/etc/default/gitlab"
|
||||
|
||||
if File.exist?(path) && File.read(path).include?("mail_room_enabled=true")
|
||||
puts "yes".color(:green)
|
||||
else
|
||||
puts "no".color(:red)
|
||||
try_fixing_it(
|
||||
"Enable mail_room in the init.d configuration."
|
||||
)
|
||||
for_more_information(
|
||||
"doc/administration/reply_by_email.md"
|
||||
)
|
||||
fix_and_rerun
|
||||
end
|
||||
end
|
||||
|
||||
def check_foreman_configured_correctly
|
||||
print "Foreman configured correctly? ... "
|
||||
|
||||
path = Rails.root.join("Procfile")
|
||||
|
||||
if File.exist?(path) && File.read(path) =~ /^mail_room:/
|
||||
puts "yes".color(:green)
|
||||
else
|
||||
puts "no".color(:red)
|
||||
try_fixing_it(
|
||||
"Enable mail_room in your Procfile."
|
||||
)
|
||||
for_more_information(
|
||||
"doc/administration/reply_by_email.md"
|
||||
)
|
||||
fix_and_rerun
|
||||
end
|
||||
end
|
||||
|
||||
def check_mail_room_running
|
||||
return if omnibus_gitlab?
|
||||
|
||||
print "MailRoom running? ... "
|
||||
|
||||
path = "/etc/default/gitlab"
|
||||
|
||||
unless File.exist?(path) && File.read(path).include?("mail_room_enabled=true")
|
||||
puts "can't check because of previous errors".color(:magenta)
|
||||
return
|
||||
end
|
||||
|
||||
if mail_room_running?
|
||||
puts "yes".color(:green)
|
||||
else
|
||||
puts "no".color(:red)
|
||||
try_fixing_it(
|
||||
sudo_gitlab("RAILS_ENV=production bin/mail_room start")
|
||||
)
|
||||
for_more_information(
|
||||
see_installation_guide_section("Install Init Script"),
|
||||
"see log/mail_room.log for possible errors"
|
||||
)
|
||||
fix_and_rerun
|
||||
end
|
||||
end
|
||||
|
||||
def check_imap_authentication
|
||||
print "IMAP server credentials are correct? ... "
|
||||
|
||||
config_path = Rails.root.join('config', 'mail_room.yml').to_s
|
||||
erb = ERB.new(File.read(config_path))
|
||||
erb.filename = config_path
|
||||
config_file = YAML.load(erb.result)
|
||||
|
||||
config = config_file[:mailboxes].first
|
||||
|
||||
if config
|
||||
begin
|
||||
imap = Net::IMAP.new(config[:host], port: config[:port], ssl: config[:ssl])
|
||||
imap.starttls if config[:start_tls]
|
||||
imap.login(config[:email], config[:password])
|
||||
connected = true
|
||||
rescue
|
||||
connected = false
|
||||
end
|
||||
end
|
||||
|
||||
if connected
|
||||
puts "yes".color(:green)
|
||||
else
|
||||
puts "no".color(:red)
|
||||
try_fixing_it(
|
||||
"Check that the information in config/gitlab.yml is correct"
|
||||
)
|
||||
for_more_information(
|
||||
"doc/administration/reply_by_email.md"
|
||||
)
|
||||
fix_and_rerun
|
||||
end
|
||||
end
|
||||
|
||||
def mail_room_running?
|
||||
ps_ux, _ = Gitlab::Popen.popen(%w(ps uxww))
|
||||
ps_ux.include?("mail_room")
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue