Don't load all of GitLab in mail_room

Fixes #12731
This commit is contained in:
Douwe Maan 2016-02-26 18:48:13 -08:00
parent 01160fc061
commit bbdb9ba036
6 changed files with 123 additions and 35 deletions

View file

@ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date.
v 8.6.0 (unreleased)
- Improve the formatting for the user page bio (Connor Shea)
- Fix avatar stretching by providing a cropping feature (Johann Pardanaud)
- Don't load all of GitLab in mail_room
v 8.5.1
- Fix group projects styles

View file

@ -207,11 +207,7 @@ Settings.gitlab_ci['builds_path'] = File.expand_path(Settings.gitlab_c
# Reply by email
#
Settings['incoming_email'] ||= Settingslogic.new({})
Settings.incoming_email['enabled'] = false if Settings.incoming_email['enabled'].nil?
Settings.incoming_email['port'] = 143 if Settings.incoming_email['port'].nil?
Settings.incoming_email['ssl'] = false if Settings.incoming_email['ssl'].nil?
Settings.incoming_email['start_tls'] = false if Settings.incoming_email['start_tls'].nil?
Settings.incoming_email['mailbox'] = "inbox" if Settings.incoming_email['mailbox'].nil?
Settings.incoming_email['enabled'] = false if Settings.incoming_email['enabled'].nil?
#
# Build Artifacts

View file

@ -1,39 +1,52 @@
:mailboxes:
<%
require_relative 'config/environment.rb'
require "yaml"
require "json"
if Gitlab::IncomingEmail.enabled?
config = Gitlab::IncomingEmail.config
rails_env = ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
redis_config_file = "config/resque.yml"
redis_url =
if File.exists?(redis_config_file)
YAML.load_file(redis_config_file)[Rails.env]
else
"redis://localhost:6379"
end
%>
-
:host: <%= config.host.to_json %>
:port: <%= config.port.to_json %>
:ssl: <%= config.ssl.to_json %>
:start_tls: <%= config.start_tls.to_json %>
:email: <%= config.user.to_json %>
:password: <%= config.password.to_json %>
config_file = ENV["MAIL_ROOM_GITLAB_CONFIG_FILE"] || "config/gitlab.yml"
if File.exists?(config_file)
all_config = YAML.load_file(config_file)[rails_env]
:name: <%= config.mailbox.to_json %>
config = all_config["incoming_email"] || {}
config['enabled'] = false if config['enabled'].nil?
config['port'] = 143 if config['port'].nil?
config['ssl'] = false if config['ssl'].nil?
config['start_tls'] = false if config['start_tls'].nil?
config['mailbox'] = "inbox" if config['mailbox'].nil?
:delete_after_delivery: true
if config['enabled'] && config['address'] && config['address'].include?('%{key}')
redis_config_file = "config/resque.yml"
redis_url =
if File.exists?(redis_config_file)
YAML.load_file(redis_config_file)[rails_env]
else
"redis://localhost:6379"
end
%>
-
:host: <%= config['host'].to_json %>
:port: <%= config['port'].to_json %>
:ssl: <%= config['ssl'].to_json %>
:start_tls: <%= config['start_tls'].to_json %>
:email: <%= config['user'].to_json %>
:password: <%= config['password'].to_json %>
:delivery_method: sidekiq
:delivery_options:
:redis_url: <%= redis_url.to_json %>
:namespace: resque:gitlab
:queue: incoming_email
:worker: EmailReceiverWorker
:name: <%= config['mailbox'].to_json %>
:arbitration_method: redis
:arbitration_options:
:redis_url: <%= redis_url.to_json %>
:namespace: mail_room:gitlab
:delete_after_delivery: true
:delivery_method: sidekiq
:delivery_options:
:redis_url: <%= redis_url.to_json %>
:namespace: resque:gitlab
:queue: incoming_email
:worker: EmailReceiverWorker
:arbitration_method: redis
:arbitration_options:
:redis_url: <%= redis_url.to_json %>
:namespace: mail_room:gitlab
<% end %>
<% end %>

View file

@ -0,0 +1,56 @@
require "spec_helper"
describe "mail_room.yml" do
let(:config_path) { "config/mail_room.yml" }
let(:configuration) { YAML.load(ERB.new(File.read(config_path)).result) }
context "when incoming email is disabled" do
before do
ENV["MAIL_ROOM_GITLAB_CONFIG_FILE"] = Rails.root.join("spec/fixtures/mail_room_disabled.yml").to_s
end
after do
ENV["MAIL_ROOM_GITLAB_CONFIG_FILE"] = nil
end
it "contains no configuration" do
expect(configuration[:mailboxes]).to be_nil
end
end
context "when incoming email is enabled" do
before do
ENV["MAIL_ROOM_GITLAB_CONFIG_FILE"] = Rails.root.join("spec/fixtures/mail_room_enabled.yml").to_s
end
after do
ENV["MAIL_ROOM_GITLAB_CONFIG_FILE"] = nil
end
it "contains the intended configuration" do
expect(configuration[:mailboxes].length).to eq(1)
mailbox = configuration[:mailboxes].first
expect(mailbox[:host]).to eq("imap.gmail.com")
expect(mailbox[:port]).to eq(993)
expect(mailbox[:ssl]).to eq(true)
expect(mailbox[:start_tls]).to eq(false)
expect(mailbox[:email]).to eq("gitlab-incoming@gmail.com")
expect(mailbox[:password]).to eq("[REDACTED]")
expect(mailbox[:name]).to eq("inbox")
redis_config_file = Rails.root.join('config', 'resque.yml')
redis_url =
if File.exists?(redis_config_file)
YAML.load_file(redis_config_file)[Rails.env]
else
"redis://localhost:6379"
end
expect(mailbox[:delivery_options][:redis_url]).to eq(redis_url)
expect(mailbox[:arbitration_options][:redis_url]).to eq(redis_url)
end
end
end

11
spec/fixtures/mail_room_disabled.yml vendored Normal file
View file

@ -0,0 +1,11 @@
test:
incoming_email:
enabled: false
address: "gitlab-incoming+%{key}@gmail.com"
user: "gitlab-incoming@gmail.com"
password: "[REDACTED]"
host: "imap.gmail.com"
port: 993
ssl: true
start_tls: false
mailbox: "inbox"

11
spec/fixtures/mail_room_enabled.yml vendored Normal file
View file

@ -0,0 +1,11 @@
test:
incoming_email:
enabled: true
address: "gitlab-incoming+%{key}@gmail.com"
user: "gitlab-incoming@gmail.com"
password: "[REDACTED]"
host: "imap.gmail.com"
port: 993
ssl: true
start_tls: false
mailbox: "inbox"