مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-11-30 21:32:30 +00:00
feat: new configuration system (and schema) (#2819)
هذا الالتزام موجود في:
118
spec/examples/full_legacy_config_file.yml
Normal file
118
spec/examples/full_legacy_config_file.yml
Normal file
@@ -0,0 +1,118 @@
|
||||
# This a legacy configuration file format which was used in Postal version
|
||||
# less than v3. It remains supported in v3+ by mapping these values to their
|
||||
# correct values. Support for this file format will be removed in Postal v4.
|
||||
#
|
||||
# It exists here for reference but also to faciliate testing to ensure the
|
||||
# legacy mapping works as expected
|
||||
version: 1
|
||||
|
||||
web:
|
||||
host: postal.llamas.com
|
||||
protocol: https
|
||||
|
||||
general:
|
||||
use_ip_pools: false
|
||||
exception_url: https://sentry.llamas.com/abcdef1234
|
||||
maximum_delivery_attempts: 20
|
||||
maximum_hold_expiry_days: 10
|
||||
suppression_list_removal_delay: 60
|
||||
use_local_ns_for_domains: true
|
||||
default_spam_threshold: 10
|
||||
default_spam_failure_threshold: 25
|
||||
use_resent_sender_header: true
|
||||
|
||||
web_server:
|
||||
bind_address: 127.0.0.1
|
||||
port: 6000
|
||||
max_threads: 10
|
||||
|
||||
main_db:
|
||||
host: localhost
|
||||
port: 3306
|
||||
username: postal
|
||||
password: t35tpassword
|
||||
database: postal
|
||||
pool_size: 20
|
||||
encoding: utf8mb4
|
||||
|
||||
message_db:
|
||||
host: localhost
|
||||
port: 3306
|
||||
username: postal
|
||||
password: p05t41
|
||||
prefix: postal
|
||||
|
||||
logging:
|
||||
rails_log: true
|
||||
graylog:
|
||||
host: logs.llamas.com
|
||||
port: 12201
|
||||
facility: mailer
|
||||
|
||||
smtp_server:
|
||||
port: 25
|
||||
bind_address: 127.0.0.1
|
||||
tls_enabled: true
|
||||
tls_certificate_path: config/smtp.cert
|
||||
tls_private_key_path: config/smtp.key
|
||||
tls_ciphers: abc
|
||||
ssl_version: SSLv23
|
||||
proxy_protocol: false
|
||||
log_connect: true
|
||||
max_message_size: 10
|
||||
|
||||
smtp_relays:
|
||||
- hostname: 1.2.3.4
|
||||
port: 25
|
||||
ssl_mode: Auto
|
||||
- hostname: 2.2.2.2
|
||||
port: 2525
|
||||
ssl_mode: None
|
||||
|
||||
dns:
|
||||
mx_records:
|
||||
- mx1.postal.llamas.com
|
||||
- mx2.postal.llamas.com
|
||||
smtp_server_hostname: smtp.postal.llamas.com
|
||||
spf_include: spf.postal.llamas.com
|
||||
return_path: rp.postal.llamas.com
|
||||
route_domain: routes.postal.llamas.com
|
||||
track_domain: track.postal.llamas.com
|
||||
helo_hostname: helo.postal.llamas.com
|
||||
dkim_identifier: postal
|
||||
domain_verify_prefix: postal-verification
|
||||
custom_return_path_prefix: psrp
|
||||
|
||||
smtp:
|
||||
host: 127.0.0.1
|
||||
port: 25
|
||||
username: postalserver
|
||||
password: llama
|
||||
from_name: Postal
|
||||
from_address: postal@llamas.com
|
||||
|
||||
rails:
|
||||
environment: production
|
||||
secret_key: abcdef123123123123123
|
||||
|
||||
rspamd:
|
||||
enabled: true
|
||||
host: rspamd.llamas.com
|
||||
port: 11334
|
||||
ssl: false
|
||||
password: llama
|
||||
flags: abc
|
||||
|
||||
spamd:
|
||||
enabled: false
|
||||
host: spamd.llamas.com
|
||||
port: 783
|
||||
|
||||
clamav:
|
||||
enabled: false
|
||||
host: clamav.llamas.com
|
||||
port: 2000
|
||||
|
||||
smtp_client:
|
||||
open_timeout: 60
|
||||
read_timeout: 120
|
||||
@@ -42,7 +42,7 @@ module MessageDequeuer
|
||||
end
|
||||
|
||||
context "when the number of attempts is more than the maximum" do
|
||||
let(:queued_message) { create(:queued_message, :locked, message: message, attempts: Postal.config.general.maximum_delivery_attempts + 1) }
|
||||
let(:queued_message) { create(:queued_message, :locked, message: message, attempts: Postal::Config.postal.default_maximum_delivery_attempts + 1) }
|
||||
|
||||
it "logs" do
|
||||
processor.process
|
||||
|
||||
346
spec/lib/postal/legacy_config_source_spec.rb
Normal file
346
spec/lib/postal/legacy_config_source_spec.rb
Normal file
@@ -0,0 +1,346 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "rails_helper"
|
||||
|
||||
module Postal
|
||||
|
||||
SOURCE_CONFIG = YAML.safe_load(File.read(Rails.root.join("spec/examples/full_legacy_config_file.yml")))
|
||||
|
||||
# Rather than actuall test the LegacyConfigSource directly, I have decided
|
||||
# to test this source via. the Konfig::Config system to ensure it works as
|
||||
# expected in practice rather than just in theory. Testing '#get' would be
|
||||
# fairly easy (and mostly pointless) where as testing the values we actually
|
||||
# want are correct is preferred.
|
||||
RSpec.describe LegacyConfigSource do
|
||||
before do
|
||||
# For the purposes of testing, we want to ignore any defaults provided
|
||||
# by the schema itself. Otherwise, we might see a value returned that
|
||||
# looks correct but is actually the default rather than the value from
|
||||
# config file.
|
||||
allow_any_instance_of(Konfig::SchemaAttribute).to receive(:default).and_return(nil)
|
||||
end
|
||||
|
||||
let(:source) { described_class.new(SOURCE_CONFIG) }
|
||||
subject(:config) { Konfig::Config.build(ConfigSchema, sources: [source]) }
|
||||
|
||||
describe "the 'postal' group" do
|
||||
it "returns a value for postal.web_hostname" do
|
||||
expect(config.postal.web_hostname).to eq "postal.llamas.com"
|
||||
end
|
||||
|
||||
it "returns a value for postal.web_protocol" do
|
||||
expect(config.postal.web_protocol).to eq "https"
|
||||
end
|
||||
|
||||
it "returns a value for postal.smtp_hostname" do
|
||||
expect(config.postal.smtp_hostname).to eq "smtp.postal.llamas.com"
|
||||
end
|
||||
|
||||
it "returns a value for postal.use_ip_pools?" do
|
||||
expect(config.postal.use_ip_pools?).to eq false
|
||||
end
|
||||
|
||||
it "returns a value for postal.default_maximum_delivery_attempts" do
|
||||
expect(config.postal.default_maximum_delivery_attempts).to eq 20
|
||||
end
|
||||
|
||||
it "returns a value for postal.default_maximum_hold_expiry_days" do
|
||||
expect(config.postal.default_maximum_hold_expiry_days).to eq 10
|
||||
end
|
||||
|
||||
it "returns a value for postal.default_suppression_list_automatic_removal_days" do
|
||||
expect(config.postal.default_suppression_list_automatic_removal_days).to eq 60
|
||||
end
|
||||
|
||||
it "returns a value for postal.use_local_ns_for_domain_verification?" do
|
||||
expect(config.postal.use_local_ns_for_domain_verification?).to eq true
|
||||
end
|
||||
|
||||
it "returns a value for postal.default_spam_threshold" do
|
||||
expect(config.postal.default_spam_threshold).to eq 10
|
||||
end
|
||||
|
||||
it "returns a value for postal.default_spam_failure_threshold" do
|
||||
expect(config.postal.default_spam_failure_threshold).to eq 25
|
||||
end
|
||||
|
||||
it "returns a value for postal.use_resent_sender_header?" do
|
||||
expect(config.postal.use_resent_sender_header?).to eq true
|
||||
end
|
||||
|
||||
it "returns a value for postal.smtp_relays" do
|
||||
expect(config.postal.smtp_relays).to eq [
|
||||
{ "host" => "1.2.3.4", "port" => 25, "ssl_mode" => "Auto" },
|
||||
{ "host" => "2.2.2.2", "port" => 2525, "ssl_mode" => "None" }
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'web_server' group" do
|
||||
it "returns a value for web_server.default_bind_address" do
|
||||
expect(config.web_server.default_bind_address).to eq "127.0.0.1"
|
||||
end
|
||||
|
||||
it "returns a value for web_server.default_port" do
|
||||
expect(config.web_server.default_port).to eq 6000
|
||||
end
|
||||
|
||||
it "returns a value for web_server.max_threads" do
|
||||
expect(config.web_server.max_threads).to eq 10
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'main_db' group" do
|
||||
it "returns a value for main_db.host" do
|
||||
expect(config.main_db.host).to eq "localhost"
|
||||
end
|
||||
|
||||
it "returns a value for main_db.port" do
|
||||
expect(config.main_db.port).to eq 3306
|
||||
end
|
||||
|
||||
it "returns a value for main_db.username" do
|
||||
expect(config.main_db.username).to eq "postal"
|
||||
end
|
||||
|
||||
it "returns a value for main_db.password" do
|
||||
expect(config.main_db.password).to eq "t35tpassword"
|
||||
end
|
||||
|
||||
it "returns a value for main_db.database" do
|
||||
expect(config.main_db.database).to eq "postal"
|
||||
end
|
||||
|
||||
it "returns a value for main_db.pool_size" do
|
||||
expect(config.main_db.pool_size).to eq 20
|
||||
end
|
||||
|
||||
it "returns a value for main_db.encoding" do
|
||||
expect(config.main_db.encoding).to eq "utf8mb4"
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'message_db' group" do
|
||||
it "returns a value for message_db.host" do
|
||||
expect(config.message_db.host).to eq "localhost"
|
||||
end
|
||||
|
||||
it "returns a value for message_db.port" do
|
||||
expect(config.message_db.port).to eq 3306
|
||||
end
|
||||
|
||||
it "returns a value for message_db.username" do
|
||||
expect(config.message_db.username).to eq "postal"
|
||||
end
|
||||
|
||||
it "returns a value for message_db.password" do
|
||||
expect(config.message_db.password).to eq "p05t41"
|
||||
end
|
||||
|
||||
it "returns a value for message_db.database_name_prefix" do
|
||||
expect(config.message_db.database_name_prefix).to eq "postal"
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'logging' group" do
|
||||
it "returns a value for logging.rails_log_enabled" do
|
||||
expect(config.logging.rails_log_enabled).to eq true
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'gelf' group" do
|
||||
it "returns a value for gelf.host" do
|
||||
expect(config.gelf.host).to eq "logs.llamas.com"
|
||||
end
|
||||
|
||||
it "returns a value for gelf.port" do
|
||||
expect(config.gelf.port).to eq 12_201
|
||||
end
|
||||
|
||||
it "returns a value for gelf.facility" do
|
||||
expect(config.gelf.facility).to eq "mailer"
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'smtp_server' group" do
|
||||
it "returns a value for smtp_server.default_port" do
|
||||
expect(config.smtp_server.default_port).to eq 25
|
||||
end
|
||||
|
||||
it "returns a value for smtp_server.default_bind_address" do
|
||||
expect(config.smtp_server.default_bind_address).to eq "127.0.0.1"
|
||||
end
|
||||
|
||||
it "returns a value for smtp_server.tls_enabled" do
|
||||
expect(config.smtp_server.tls_enabled).to eq true
|
||||
end
|
||||
|
||||
it "returns a value for smtp_server.tls_certificate_path" do
|
||||
expect(config.smtp_server.tls_certificate_path).to eq "config/smtp.cert"
|
||||
end
|
||||
|
||||
it "returns a value for smtp_server.tls_private_key_path" do
|
||||
expect(config.smtp_server.tls_private_key_path).to eq "config/smtp.key"
|
||||
end
|
||||
|
||||
it "returns a value for smtp_server.tls_ciphers" do
|
||||
expect(config.smtp_server.tls_ciphers).to eq "abc"
|
||||
end
|
||||
|
||||
it "returns a value for smtp_server.ssl_version" do
|
||||
expect(config.smtp_server.ssl_version).to eq "SSLv23"
|
||||
end
|
||||
|
||||
it "returns a value for smtp_server.proxy_protocol" do
|
||||
expect(config.smtp_server.proxy_protocol).to eq false
|
||||
end
|
||||
|
||||
it "returns a value for smtp_server.log_connections" do
|
||||
expect(config.smtp_server.log_connections).to eq true
|
||||
end
|
||||
|
||||
it "returns a value for smtp_server.max_message_size" do
|
||||
expect(config.smtp_server.max_message_size).to eq 10
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'dns' group" do
|
||||
it "returns a value for dns.mx_records" do
|
||||
expect(config.dns.mx_records).to eq ["mx1.postal.llamas.com", "mx2.postal.llamas.com"]
|
||||
end
|
||||
|
||||
it "returns a value for dns.spf_include" do
|
||||
expect(config.dns.spf_include).to eq "spf.postal.llamas.com"
|
||||
end
|
||||
|
||||
it "returns a value for dns.return_path_domain" do
|
||||
expect(config.dns.return_path_domain).to eq "rp.postal.llamas.com"
|
||||
end
|
||||
|
||||
it "returns a value for dns.route_domain" do
|
||||
expect(config.dns.route_domain).to eq "routes.postal.llamas.com"
|
||||
end
|
||||
|
||||
it "returns a value for dns.track_domain" do
|
||||
expect(config.dns.track_domain).to eq "track.postal.llamas.com"
|
||||
end
|
||||
|
||||
it "returns a value for dns.helo_hostname" do
|
||||
expect(config.dns.helo_hostname).to eq "helo.postal.llamas.com"
|
||||
end
|
||||
|
||||
it "returns a value for dns.dkim_identifier" do
|
||||
expect(config.dns.dkim_identifier).to eq "postal"
|
||||
end
|
||||
|
||||
it "returns a value for dns.domain_verify_prefix" do
|
||||
expect(config.dns.domain_verify_prefix).to eq "postal-verification"
|
||||
end
|
||||
|
||||
it "returns a value for dns.custom_return_path_prefix" do
|
||||
expect(config.dns.custom_return_path_prefix).to eq "psrp"
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'smtp' group" do
|
||||
it "returns a value for smtp.host" do
|
||||
expect(config.smtp.host).to eq "127.0.0.1"
|
||||
end
|
||||
|
||||
it "returns a value for smtp.port" do
|
||||
expect(config.smtp.port).to eq 25
|
||||
end
|
||||
|
||||
it "returns a value for smtp.username" do
|
||||
expect(config.smtp.username).to eq "postalserver"
|
||||
end
|
||||
|
||||
it "returns a value for smtp.password" do
|
||||
expect(config.smtp.password).to eq "llama"
|
||||
end
|
||||
|
||||
it "returns a value for smtp.from_name" do
|
||||
expect(config.smtp.from_name).to eq "Postal"
|
||||
end
|
||||
|
||||
it "returns a value for smtp.from_address" do
|
||||
expect(config.smtp.from_address).to eq "postal@llamas.com"
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'rails' group" do
|
||||
it "returns a value for rails.environment" do
|
||||
expect(config.rails.environment).to eq "production"
|
||||
end
|
||||
|
||||
it "returns a value for rails.secret_key" do
|
||||
expect(config.rails.secret_key).to eq "abcdef123123123123123"
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'rspamd' group" do
|
||||
it "returns a value for rspamd.enabled" do
|
||||
expect(config.rspamd.enabled).to eq true
|
||||
end
|
||||
|
||||
it "returns a value for rspamd.host" do
|
||||
expect(config.rspamd.host).to eq "rspamd.llamas.com"
|
||||
end
|
||||
|
||||
it "returns a value for rspamd.port" do
|
||||
expect(config.rspamd.port).to eq 11_334
|
||||
end
|
||||
|
||||
it "returns a value for rspamd.ssl?" do
|
||||
expect(config.rspamd.ssl?).to eq false
|
||||
end
|
||||
|
||||
it "returns a value for rspamd.password" do
|
||||
expect(config.rspamd.password).to eq "llama"
|
||||
end
|
||||
|
||||
it "returns a value for rspamd.flags" do
|
||||
expect(config.rspamd.flags).to eq "abc"
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'spamd' group" do
|
||||
it "returns a value for spamd.enabled" do
|
||||
expect(config.spamd.enabled).to eq false
|
||||
end
|
||||
|
||||
it "returns a value for spamd.host" do
|
||||
expect(config.spamd.host).to eq "spamd.llamas.com"
|
||||
end
|
||||
|
||||
it "returns a value for spamd.port" do
|
||||
expect(config.spamd.port).to eq 783
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'clamav' group" do
|
||||
it "returns a value for clamav.enabled" do
|
||||
expect(config.clamav.enabled).to eq false
|
||||
end
|
||||
|
||||
it "returns a value for clamav.host" do
|
||||
expect(config.clamav.host).to eq "clamav.llamas.com"
|
||||
end
|
||||
|
||||
it "returns a value for clamav.port" do
|
||||
expect(config.clamav.port).to eq 2000
|
||||
end
|
||||
end
|
||||
|
||||
describe "the 'smtp_client' group" do
|
||||
it "returns a value for smtp_client.open_timeout" do
|
||||
expect(config.smtp_client.open_timeout).to eq 60
|
||||
end
|
||||
|
||||
it "returns a value for smtp_client.read_timeout" do
|
||||
expect(config.smtp_client.read_timeout).to eq 120
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -12,7 +12,7 @@ describe ReceivedHeader do
|
||||
it "returns the correct string" do
|
||||
result = described_class.generate(nil, "testhelo", "1.1.1.1", :smtp)
|
||||
expect(result).to eq "from testhelo (hostname.com [1.1.1.1]) " \
|
||||
"by #{Postal.config.dns.smtp_server_hostname} " \
|
||||
"by #{Postal::Config.postal.smtp_hostname} " \
|
||||
"with SMTP; #{Time.now.utc.rfc2822}"
|
||||
end
|
||||
end
|
||||
@@ -21,7 +21,7 @@ describe ReceivedHeader do
|
||||
it "returns the correct string" do
|
||||
server = Server.new(privacy_mode: true)
|
||||
result = described_class.generate(server, "testhelo", "1.1.1.1", :smtp)
|
||||
expect(result).to eq "by #{Postal.config.dns.smtp_server_hostname} " \
|
||||
expect(result).to eq "by #{Postal::Config.postal.smtp_hostname} " \
|
||||
"with SMTP; #{Time.now.utc.rfc2822}"
|
||||
end
|
||||
end
|
||||
@@ -31,7 +31,7 @@ describe ReceivedHeader do
|
||||
server = Server.new(privacy_mode: false)
|
||||
result = described_class.generate(server, "testhelo", "1.1.1.1", :smtp)
|
||||
expect(result).to eq "from testhelo (hostname.com [1.1.1.1]) " \
|
||||
"by #{Postal.config.dns.smtp_server_hostname} " \
|
||||
"by #{Postal::Config.postal.smtp_hostname} " \
|
||||
"with SMTP; #{Time.now.utc.rfc2822}"
|
||||
end
|
||||
end
|
||||
@@ -40,7 +40,7 @@ describe ReceivedHeader do
|
||||
it "returns the correct string" do
|
||||
result = described_class.generate(nil, "web-ui", "1.1.1.1", :http)
|
||||
expect(result).to eq "from web-ui (hostname.com [1.1.1.1]) " \
|
||||
"by #{Postal.config.web.host} " \
|
||||
"by #{Postal::Config.postal.web_hostname} " \
|
||||
"with HTTP; #{Time.now.utc.rfc2822}"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -39,7 +39,7 @@ module SMTPServer
|
||||
client.handle("RCPT TO: #{route.name}@#{route.domain.name}")
|
||||
Timecop.freeze do
|
||||
client.handle("DATA")
|
||||
expect(client.headers["received"]).to include "from test.example.com (1.2.3.4 [1.2.3.4]) by postal.example.com with SMTP; #{Time.now.utc.rfc2822}"
|
||||
expect(client.headers["received"]).to include "from test.example.com (1.2.3.4 [1.2.3.4]) by #{Postal::Config.postal.smtp_hostname} with SMTP; #{Time.now.utc.rfc2822}"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -72,7 +72,7 @@ module SMTPServer
|
||||
client.handle("This is some content for the message.")
|
||||
client.handle("It will keep going.")
|
||||
expect(client.instance_variable_get("@data")).to eq <<~DATA
|
||||
Received: from test.example.com (1.2.3.4 [1.2.3.4]) by #{Postal.config.dns.smtp_server_hostname} with SMTP; #{Time.now.utc.rfc2822}\r
|
||||
Received: from test.example.com (1.2.3.4 [1.2.3.4]) by #{Postal::Config.postal.smtp_hostname} with SMTP; #{Time.now.utc.rfc2822}\r
|
||||
Subject: Test\r
|
||||
\r
|
||||
This is some content for the message.\r
|
||||
|
||||
@@ -24,7 +24,7 @@ module SMTPServer
|
||||
describe "when finished sending data" do
|
||||
context "when the data is larger than the maximum message size" do
|
||||
it "returns an error and resets the state" do
|
||||
allow(Postal.config.smtp_server).to receive(:max_message_size).and_return(1)
|
||||
allow(Postal::Config.smtp_server).to receive(:max_message_size).and_return(1)
|
||||
client.handle("DATA")
|
||||
client.handle("a" * 1024 * 1024 * 10)
|
||||
expect(client.handle(".")).to eq "552 Message too large (maximum size 1MB)"
|
||||
@@ -34,10 +34,10 @@ module SMTPServer
|
||||
context "when a loop is detected" do
|
||||
it "returns an error and resets the state" do
|
||||
client.handle("DATA")
|
||||
client.handle("Received: from example1.com by #{Postal.config.dns.smtp_server_hostname}")
|
||||
client.handle("Received: from example2.com by #{Postal.config.dns.smtp_server_hostname}")
|
||||
client.handle("Received: from example1.com by #{Postal.config.dns.smtp_server_hostname}")
|
||||
client.handle("Received: from example2.com by #{Postal.config.dns.smtp_server_hostname}")
|
||||
client.handle("Received: from example1.com by #{Postal::Config.postal.smtp_hostname}")
|
||||
client.handle("Received: from example2.com by #{Postal::Config.postal.smtp_hostname}")
|
||||
client.handle("Received: from example1.com by #{Postal::Config.postal.smtp_hostname}")
|
||||
client.handle("Received: from example2.com by #{Postal::Config.postal.smtp_hostname}")
|
||||
client.handle("Subject: Test")
|
||||
client.handle("From: #{mail_from}")
|
||||
client.handle("To: #{rcpt_to}")
|
||||
@@ -93,7 +93,7 @@ module SMTPServer
|
||||
|
||||
context "when sending a bounce message" do
|
||||
let(:credential) { nil }
|
||||
let(:rcpt_to) { "#{server.token}@#{Postal.config.dns.return_path}" }
|
||||
let(:rcpt_to) { "#{server.token}@#{Postal::Config.dns.return_path_domain}" }
|
||||
|
||||
context "when there is a return path route" do
|
||||
let(:domain) { create(:domain, owner: server) }
|
||||
@@ -114,7 +114,7 @@ module SMTPServer
|
||||
|
||||
queued_message = QueuedMessage.first
|
||||
expect(queued_message).to have_attributes(
|
||||
domain: Postal.config.dns.return_path,
|
||||
domain: Postal::Config.dns.return_path_domain,
|
||||
server: server
|
||||
)
|
||||
|
||||
@@ -145,7 +145,7 @@ module SMTPServer
|
||||
|
||||
queued_message = QueuedMessage.first
|
||||
expect(queued_message).to have_attributes(
|
||||
domain: Postal.config.dns.return_path,
|
||||
domain: Postal::Config.dns.return_path_domain,
|
||||
server: server
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ module SMTPServer
|
||||
describe "HELO" do
|
||||
it "returns the hostname" do
|
||||
expect(client.state).to eq :welcome
|
||||
expect(client.handle("HELO: test.example.com")).to eq "250 #{Postal.config.dns.smtp_server_hostname}"
|
||||
expect(client.handle("HELO: test.example.com")).to eq "250 #{Postal::Config.postal.smtp_hostname}"
|
||||
expect(client.state).to eq :welcomed
|
||||
end
|
||||
end
|
||||
@@ -24,7 +24,7 @@ module SMTPServer
|
||||
|
||||
context "when TLS is enabled" do
|
||||
it "returns capabilities include starttls" do
|
||||
allow(Postal.config.smtp_server).to receive(:tls_enabled?).and_return(true)
|
||||
allow(Postal::Config.smtp_server).to receive(:tls_enabled?).and_return(true)
|
||||
expect(client.handle("EHLO test.example.com")).to eq ["250-My capabilities are",
|
||||
"250-STARTTLS",
|
||||
"250 AUTH CRAM-MD5 PLAIN LOGIN"]
|
||||
|
||||
@@ -36,18 +36,18 @@ module SMTPServer
|
||||
|
||||
context "when the RCPT TO address is the system return path host" do
|
||||
it "returns an error if the server does not exist" do
|
||||
expect(client.handle("RCPT TO: nothing@#{Postal.config.dns.return_path}")).to eq "550 Invalid server token"
|
||||
expect(client.handle("RCPT TO: nothing@#{Postal::Config.dns.return_path_domain}")).to eq "550 Invalid server token"
|
||||
end
|
||||
|
||||
it "returns an error if the server is suspended" do
|
||||
server = create(:server, :suspended)
|
||||
expect(client.handle("RCPT TO: #{server.token}@#{Postal.config.dns.return_path}"))
|
||||
expect(client.handle("RCPT TO: #{server.token}@#{Postal::Config.dns.return_path_domain}"))
|
||||
.to eq "535 Mail server has been suspended"
|
||||
end
|
||||
|
||||
it "adds a recipient if all OK" do
|
||||
server = create(:server)
|
||||
address = "#{server.token}@#{Postal.config.dns.return_path}"
|
||||
address = "#{server.token}@#{Postal::Config.dns.return_path_domain}"
|
||||
expect(client.handle("RCPT TO: #{address}")).to eq "250 OK"
|
||||
expect(client.recipients).to eq [[:bounce, address, server]]
|
||||
expect(client.state).to eq :rcpt_to_received
|
||||
@@ -56,19 +56,19 @@ module SMTPServer
|
||||
|
||||
context "when the RCPT TO address is on a host using the return path prefix" do
|
||||
it "returns an error if the server does not exist" do
|
||||
address = "nothing@#{Postal.config.dns.custom_return_path_prefix}.example.com"
|
||||
address = "nothing@#{Postal::Config.dns.custom_return_path_prefix}.example.com"
|
||||
expect(client.handle("RCPT TO: #{address}")).to eq "550 Invalid server token"
|
||||
end
|
||||
|
||||
it "returns an error if the server is suspended" do
|
||||
server = create(:server, :suspended)
|
||||
address = "#{server.token}@#{Postal.config.dns.custom_return_path_prefix}.example.com"
|
||||
address = "#{server.token}@#{Postal::Config.dns.custom_return_path_prefix}.example.com"
|
||||
expect(client.handle("RCPT TO: #{address}")).to eq "535 Mail server has been suspended"
|
||||
end
|
||||
|
||||
it "adds a recipient if all OK" do
|
||||
server = create(:server)
|
||||
address = "#{server.token}@#{Postal.config.dns.custom_return_path_prefix}.example.com"
|
||||
address = "#{server.token}@#{Postal::Config.dns.custom_return_path_prefix}.example.com"
|
||||
expect(client.handle("RCPT TO: #{address}")).to eq "250 OK"
|
||||
expect(client.recipients).to eq [[:bounce, address, server]]
|
||||
expect(client.state).to eq :rcpt_to_received
|
||||
@@ -77,28 +77,28 @@ module SMTPServer
|
||||
|
||||
context "when the RCPT TO address is within the route domain" do
|
||||
it "returns an error if the route token is invalid" do
|
||||
address = "nothing@#{Postal.config.dns.route_domain}"
|
||||
address = "nothing@#{Postal::Config.dns.route_domain}"
|
||||
expect(client.handle("RCPT TO: #{address}")).to eq "550 Invalid route token"
|
||||
end
|
||||
|
||||
it "returns an error if the server is suspended" do
|
||||
server = create(:server, :suspended)
|
||||
route = create(:route, server: server)
|
||||
address = "#{route.token}@#{Postal.config.dns.route_domain}"
|
||||
address = "#{route.token}@#{Postal::Config.dns.route_domain}"
|
||||
expect(client.handle("RCPT TO: #{address}")).to eq "535 Mail server has been suspended"
|
||||
end
|
||||
|
||||
it "returns an error if the route is set to Reject mail" do
|
||||
server = create(:server)
|
||||
route = create(:route, server: server, mode: "Reject")
|
||||
address = "#{route.token}@#{Postal.config.dns.route_domain}"
|
||||
address = "#{route.token}@#{Postal::Config.dns.route_domain}"
|
||||
expect(client.handle("RCPT TO: #{address}")).to eq "550 Route does not accept incoming messages"
|
||||
end
|
||||
|
||||
it "adds a recipient if all OK" do
|
||||
server = create(:server)
|
||||
route = create(:route, server: server)
|
||||
address = "#{route.token}+tag1@#{Postal.config.dns.route_domain}"
|
||||
address = "#{route.token}+tag1@#{Postal::Config.dns.route_domain}"
|
||||
expect(client.handle("RCPT TO: #{address}")).to eq "250 OK"
|
||||
expect(client.recipients).to eq [[:route, "#{route.name}+tag1@#{route.domain.name}", server, { route: route }]]
|
||||
expect(client.state).to eq :rcpt_to_received
|
||||
|
||||
@@ -216,7 +216,7 @@ describe Domain do
|
||||
|
||||
describe "#spf_record" do
|
||||
it "returns the SPF record" do
|
||||
expect(domain.spf_record).to eq "v=spf1 a mx include:#{Postal.config.dns.spf_include} ~all"
|
||||
expect(domain.spf_record).to eq "v=spf1 a mx include:#{Postal::Config.dns.spf_include} ~all"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -251,7 +251,7 @@ describe Domain do
|
||||
end
|
||||
|
||||
it "returns the DKIM identifier" do
|
||||
expect(domain.dkim_identifier).to eq "#{Postal.config.dns.dkim_identifier}-#{domain.dkim_identifier_string}"
|
||||
expect(domain.dkim_identifier).to eq "#{Postal::Config.dns.dkim_identifier}-#{domain.dkim_identifier_string}"
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -269,14 +269,14 @@ describe Domain do
|
||||
end
|
||||
|
||||
it "returns the DKIM identifier" do
|
||||
expect(domain.dkim_record_name).to eq "#{Postal.config.dns.dkim_identifier}-#{domain.dkim_identifier_string}._domainkey"
|
||||
expect(domain.dkim_record_name).to eq "#{Postal::Config.dns.dkim_identifier}-#{domain.dkim_identifier_string}._domainkey"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#return_path_domain" do
|
||||
it "returns the return path domain" do
|
||||
expect(domain.return_path_domain).to eq "#{Postal.config.dns.custom_return_path_prefix}.#{domain.name}"
|
||||
expect(domain.return_path_domain).to eq "#{Postal::Config.dns.custom_return_path_prefix}.#{domain.name}"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -284,14 +284,14 @@ describe Domain do
|
||||
let(:domain) { create(:domain, verification_method: "DNS") }
|
||||
|
||||
it "returns the DNS verification string" do
|
||||
expect(domain.dns_verification_string).to eq "#{Postal.config.dns.domain_verify_prefix} #{domain.verification_token}"
|
||||
expect(domain.dns_verification_string).to eq "#{Postal::Config.dns.domain_verify_prefix} #{domain.verification_token}"
|
||||
end
|
||||
end
|
||||
|
||||
describe "#resolver" do
|
||||
context "when the local nameservers should be used" do
|
||||
before do
|
||||
allow(Postal.config.general).to receive(:use_local_ns_for_domains?).and_return(true)
|
||||
allow(Postal::Config.postal).to receive(:use_local_ns_for_domain_verification?).and_return(true)
|
||||
end
|
||||
|
||||
it "uses the local DNS" do
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
ENV["POSTAL_ENV"] = "test"
|
||||
ENV["POSTAL_CONFIG_FILE_PATH"] ||= "config/postal/postal.test.yml"
|
||||
|
||||
require "dotenv"
|
||||
Dotenv.load(".env.test")
|
||||
|
||||
require File.expand_path("../config/environment", __dir__)
|
||||
require "rspec/rails"
|
||||
|
||||
المرجع في مشكلة جديدة
حظر مستخدم