From d504ca8a0c696b31eaf383f97f47e08afac23084 Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 27 Oct 2014 13:02:12 +0100 Subject: [PATCH 1/4] Add settings to disable email sending from GitLab. --- config/gitlab.yml.example | 2 ++ config/initializers/1_settings.rb | 1 + 2 files changed, 3 insertions(+) diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index 2ca6abac57..bb0ffae0b7 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -39,6 +39,8 @@ production: &base # time_zone: 'UTC' ## Email settings + # Uncomment and set to false if you need to disable email sending from GitLab (default: true) + # email_enabled: true # Email address used in the "From" field in mails sent by GitLab email_from: example@example.com diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index 4670791ddb..27bb83784b 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -95,6 +95,7 @@ Settings.gitlab['https'] = false if Settings.gitlab['https'].nil? Settings.gitlab['port'] ||= Settings.gitlab.https ? 443 : 80 Settings.gitlab['relative_url_root'] ||= ENV['RAILS_RELATIVE_URL_ROOT'] || '' Settings.gitlab['protocol'] ||= Settings.gitlab.https ? "https" : "http" +Settings.gitlab['email_enabled'] ||= true if Settings.gitlab['email_enabled'].nil? Settings.gitlab['email_from'] ||= "gitlab@#{Settings.gitlab.host}" Settings.gitlab['url'] ||= Settings.send(:build_gitlab_url) Settings.gitlab['user'] ||= 'git' From d78e80fa74777e886ca131614f3b4d3f06bf9fff Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 27 Oct 2014 13:05:50 +0100 Subject: [PATCH 2/4] Add email interceptor to prevent mail sending if email sending is disabled. --- config/initializers/disable_email_interceptor.rb | 2 ++ lib/disable_email_interceptor.rb | 8 ++++++++ 2 files changed, 10 insertions(+) create mode 100644 config/initializers/disable_email_interceptor.rb create mode 100644 lib/disable_email_interceptor.rb diff --git a/config/initializers/disable_email_interceptor.rb b/config/initializers/disable_email_interceptor.rb new file mode 100644 index 0000000000..c76a6b8b19 --- /dev/null +++ b/config/initializers/disable_email_interceptor.rb @@ -0,0 +1,2 @@ +# Interceptor in lib/disable_email_interceptor.rb +ActionMailer::Base.register_interceptor(DisableEmailInterceptor) unless Gitlab.config.gitlab.email_enabled diff --git a/lib/disable_email_interceptor.rb b/lib/disable_email_interceptor.rb new file mode 100644 index 0000000000..1b80be112a --- /dev/null +++ b/lib/disable_email_interceptor.rb @@ -0,0 +1,8 @@ +# Read about interceptors in http://guides.rubyonrails.org/action_mailer_basics.html#intercepting-emails +class DisableEmailInterceptor + + def self.delivering_email(message) + message.perform_deliveries = false + Rails.logger.info "Emails disabled! Interceptor prevented sending mail #{message.subject}" + end +end From 3b6737f970eec80d82ddc78d098b3b3fccbe4acf Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 27 Oct 2014 15:08:37 +0100 Subject: [PATCH 3/4] Add interceptor test. --- spec/lib/disable_email_interceptor_spec.rb | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 spec/lib/disable_email_interceptor_spec.rb diff --git a/spec/lib/disable_email_interceptor_spec.rb b/spec/lib/disable_email_interceptor_spec.rb new file mode 100644 index 0000000000..29ec54b13d --- /dev/null +++ b/spec/lib/disable_email_interceptor_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' + +describe DisableEmailInterceptor do + before do + ActionMailer::Base.register_interceptor(DisableEmailInterceptor) + end + + it 'should not send emails' do + Gitlab.config.gitlab.stub(:email_enabled).and_return(false) + expect { + deliver_mail + }.not_to change(ActionMailer::Base.deliveries, :count) + end + + after do + Mail.class_variable_set(:@@delivery_interceptors, []) + end + + def deliver_mail + key = create :personal_key + Notify.new_ssh_key_email(key.id) + end +end From 28c08775b3d1994d3a8c5057534c704ff9da4bae Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 27 Oct 2014 15:11:03 +0100 Subject: [PATCH 4/4] Add a comment in interceptor spec. --- spec/lib/disable_email_interceptor_spec.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spec/lib/disable_email_interceptor_spec.rb b/spec/lib/disable_email_interceptor_spec.rb index 29ec54b13d..8bf6ee2ed5 100644 --- a/spec/lib/disable_email_interceptor_spec.rb +++ b/spec/lib/disable_email_interceptor_spec.rb @@ -13,6 +13,9 @@ describe DisableEmailInterceptor do end after do + # Removing interceptor from the list because unregister_interceptor is + # implemented in later version of mail gem + # See: https://github.com/mikel/mail/pull/705 Mail.class_variable_set(:@@delivery_interceptors, []) end