From 329e66c949ff33532b16cbdc5bb88afdbc9b778a Mon Sep 17 00:00:00 2001 From: Mike Sutton Date: Wed, 16 Nov 2022 01:01:10 +0100 Subject: [PATCH] combined consumer and proxy into minimal rails backed --- consumer/.ruby-gemset | 1 - consumer/bettermail_consumer.rb | 88 --------------------- consumer/start.sh | 1 - proxy/.ruby-gemset | 1 - proxy/.ruby-version | 1 - proxy/Gemfile | 7 -- proxy/Gemfile.lock | 34 --------- proxy/bettermail_proxy.rb | 122 ------------------------------ proxy/ssl/cert.pem | 32 -------- proxy/ssl/key.pem | 52 ------------- proxy/start.sh | 1 - tests/.ruby-gemset | 1 + {consumer => tests}/.ruby-version | 0 {consumer => tests}/Gemfile | 3 +- {consumer => tests}/Gemfile.lock | 4 - tests/test_sending_emails.rb | 31 ++++++++ 16 files changed, 33 insertions(+), 346 deletions(-) delete mode 100644 consumer/.ruby-gemset delete mode 100644 consumer/bettermail_consumer.rb delete mode 100755 consumer/start.sh delete mode 100644 proxy/.ruby-gemset delete mode 100644 proxy/.ruby-version delete mode 100644 proxy/Gemfile delete mode 100644 proxy/Gemfile.lock delete mode 100644 proxy/bettermail_proxy.rb delete mode 100644 proxy/ssl/cert.pem delete mode 100644 proxy/ssl/key.pem delete mode 100755 proxy/start.sh create mode 100644 tests/.ruby-gemset rename {consumer => tests}/.ruby-version (100%) rename {consumer => tests}/Gemfile (75%) rename {consumer => tests}/Gemfile.lock (89%) create mode 100644 tests/test_sending_emails.rb diff --git a/consumer/.ruby-gemset b/consumer/.ruby-gemset deleted file mode 100644 index 74ed08e..0000000 --- a/consumer/.ruby-gemset +++ /dev/null @@ -1 +0,0 @@ -bettermail_consumer diff --git a/consumer/bettermail_consumer.rb b/consumer/bettermail_consumer.rb deleted file mode 100644 index b5f8105..0000000 --- a/consumer/bettermail_consumer.rb +++ /dev/null @@ -1,88 +0,0 @@ -# frozen_string_literal: true - -require 'dotenv/load' -require 'pg' -require 'mail' -require 'bunny' - -# Server class -class BettermailConsumer - def initialize - @pg = PG::Connection.new(ENV['DATABASE_URL']) - end - - def start - begin - puts ' [*] Waiting for messages. To exit press CTRL+C' - mail_queue = bunny_channel.queue(ENV['RABBIT_MAIL_QUEUE']) - mail_queue.subscribe(block: true) do |_delivery_info, _properties, body| - mail = Mail.read_from_string(body) - puts mail - end - sns_queue = bunny_channel.queue(ENV['RABBIT_SNS_QUEUE']) - sns_queue.subscribe(block: true) do |_delivery_info, _properties, body| - puts " [x] Received #{_delivery_info}" - end - rescue Interrupt => _ - stop - end - - end - - def stop - @bunny_conn&.close - @pg&.close - end - - def bunny_channel - if @bunny_channel.nil? - @bunny_conn = Bunny.new - @bunny_conn.start - @bunny_channel = @bunny_conn.create_channel - end - @bunny_channel - end -end - -service_name='BetterMail::Consumer' -# Create a new server instance for listening at localhost interfaces 127.0.0.1:2525 -# and accepting a maximum of 4 simultaneous connections per default -service = BettermailConsumer.new - -# save flag for Ctrl-C pressed -flag_status_ctrl_c_pressed = false - -# try to gracefully shutdown on Ctrl-C -trap('INT') do - # print an empty line right after ^C - puts - # notify flag about Ctrl-C was pressed - flag_status_ctrl_c_pressed = true - # signal exit to app - exit 0 -end - -# Output for debug -puts("Starting #{service_name}") - -# setup exit code -at_exit do - # check to shutdown connection - if service - # Output for debug - puts('Ctrl-C interrupted, exit now...') if flag_status_ctrl_c_pressed - # info about shutdown - puts("Shutdown #{service_name}...") - # stop all threads and connections gracefully - service.stop - end - - # Output for debug - puts "#{service_name} stopped!" -end - -# Start the server -service.start - -# Run on server forever -service.join diff --git a/consumer/start.sh b/consumer/start.sh deleted file mode 100755 index d475420..0000000 --- a/consumer/start.sh +++ /dev/null @@ -1 +0,0 @@ -ruby ./bettermail_consumer.rb diff --git a/proxy/.ruby-gemset b/proxy/.ruby-gemset deleted file mode 100644 index 2afb3ee..0000000 --- a/proxy/.ruby-gemset +++ /dev/null @@ -1 +0,0 @@ -bettermail_proxy diff --git a/proxy/.ruby-version b/proxy/.ruby-version deleted file mode 100644 index 2eb2fe9..0000000 --- a/proxy/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -ruby-2.7.2 diff --git a/proxy/Gemfile b/proxy/Gemfile deleted file mode 100644 index d17444b..0000000 --- a/proxy/Gemfile +++ /dev/null @@ -1,7 +0,0 @@ -source 'https://rubygems.org' -ruby '2.7.2' -gem 'dotenv' -gem 'bunny' -gem 'midi-smtp-server', '~> 3.0.1' -gem 'mail' -gem 'openssl' diff --git a/proxy/Gemfile.lock b/proxy/Gemfile.lock deleted file mode 100644 index af728cd..0000000 --- a/proxy/Gemfile.lock +++ /dev/null @@ -1,34 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - amq-protocol (2.3.2) - bunny (2.19.0) - amq-protocol (~> 2.3, >= 2.3.1) - sorted_set (~> 1, >= 1.0.2) - dotenv (2.8.1) - mail (2.7.1) - mini_mime (>= 0.1.1) - midi-smtp-server (3.0.3) - mini_mime (1.1.2) - openssl (3.0.1) - rbtree (0.4.5) - set (1.0.3) - sorted_set (1.0.3) - rbtree - set (~> 1.0) - -PLATFORMS - ruby - -DEPENDENCIES - bunny - dotenv - mail - midi-smtp-server (~> 3.0.1) - openssl - -RUBY VERSION - ruby 2.7.2p137 - -BUNDLED WITH - 2.1.4 diff --git a/proxy/bettermail_proxy.rb b/proxy/bettermail_proxy.rb deleted file mode 100644 index 21ec89e..0000000 --- a/proxy/bettermail_proxy.rb +++ /dev/null @@ -1,122 +0,0 @@ -# frozen_string_literal: true - -require 'dotenv/load' -require 'midi-smtp-server' -require 'mail' -require 'bunny' - -# Server class -class BettermailProxy < MidiSmtpServer::Smtpd - - def stop(wait_seconds_before_close: nil, gracefully: nil) - super() - @bunny_conn&.close - end - - def bunny - if @bunny.nil? - @bunny_conn = Bunny.new - @bunny_conn.start - ch = @bunny_conn.create_channel - ch.direct(ENV['RABBIT_CHANNEL']) - ch.queue(ENV['RABBIT_MAIL_QUEUE']) - @bunny = ch.default_exchange - end - @bunny - end - - # update local welcome and helo response - def on_connect_event(ctx) - ctx[:server][:local_response] = 'Client connected' - ctx[:server][:helo_response] = 'Welcome to the BetterMail proxy - an SMTP drop in replacement' - end - - def on_message_data_headers_event(ctx) - # check and append all headers - ctx[:message][:data] << "X-bettermail: Received by proxy at #{Time.now}" << ctx[:message][:crlf] - end - - # check the authentication - # if any value returned, that will be used for ongoing processing - # otherwise the original value will be used for authorization_id - def on_auth_event(ctx, authorization_id, authentication_id, authentication) - # to proceed this test use commands ... - # auth plain - # > AGFkbWluaXN0cmF0b3IAcGFzc3dvcmQ= - # auth login - # > YWRtaW5pc3RyYXRvcg== - # > cGFzc3dvcmQ= - # if authorization_id == '' && authentication_id == 'administrator' && authentication == 'password' - # # yes - # return 'supervisor' - # end - # # otherwise exit with authentication exception - # raise MidiSmtpServer::Smtpd535Exception - logger.debug("Authenticated id: #{authentication_id} with authentication: #{authentication} from: #{ctx[:server][:remote_ip]}:#{ctx[:server][:remote_port]}") - authentication_id - end - - - # get each message after DATA . - def on_message_data_event(ctx) - # Just decode message once to make sure, that this message ist readable - mail = Mail.read_from_string(ctx[:message][:data]) - logger.info('Message good. Sending to queue for processing') - bunny.publish(mail.to_s, :headers => { 'x-smtp' => mail.header.to_s }, :routing_key => ENV["RABBIT_MAIL_QUEUE"]) - logger.info('Done') - end -end - -# Create a new server instance for listening at localhost interfaces 127.0.0.1:2525 -# and accepting a maximum of 4 simultaneous connections per default -service = BettermailProxy.new( - ports: ENV['PROXY_PORTS'], - hosts: ENV['PROXY_HOSTS'], - max_processings: 10, - auth_mode: :AUTH_REQUIRED, - tls_mode: :TLS_REQUIRED, - tls_cert_path: './ssl/cert.pem', - tls_key_path: './ssl/key.pem' -) - -service_name='BetterMail::SMTPProxy' -# Create a new server instance for listening at localhost interfaces 127.0.0.1:2525 -# and accepting a maximum of 4 simultaneous connections per default - -# save flag for Ctrl-C pressed -flag_status_ctrl_c_pressed = false - -# try to gracefully shutdown on Ctrl-C -trap('INT') do - # print an empty line right after ^C - puts - # notify flag about Ctrl-C was pressed - flag_status_ctrl_c_pressed = true - # signal exit to app - exit(0) -end - -# Output for debug -puts("Starting #{service_name}") - -# setup exit code -at_exit do - # check to shutdown connection - if service - # Output for debug - puts('Ctrl-C interrupted, exit now...') if flag_status_ctrl_c_pressed - # info about shutdown - puts("Shutdown #{service_name}...") - # stop all threads and connections gracefully - service.stop - end - - # Output for debug - puts "#{service_name} stopped!" -end - -# Start the server -service.start - -# Run on server forever -service.join diff --git a/proxy/ssl/cert.pem b/proxy/ssl/cert.pem deleted file mode 100644 index 3a56cd6..0000000 --- a/proxy/ssl/cert.pem +++ /dev/null @@ -1,32 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFbTCCA1WgAwIBAgIUAf9HBsl8FOGp9rGyrroaRmBraFAwDQYJKoZIhvcNAQEL -BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM -GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAgFw0yMjExMTQxMTA5MjJaGA80NzYw -MTAxMTExMDkyMlowRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx -ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBALaBN6wMI6kuMcebP7KTnj/uVCaw6fq5AnnRtHRl -2g26KQDhvyLjBi3Bbp/zRgm2uEprhkHJ+orAXDshjMZOU4mBlWxlX9mZCoVJfbU6 -4jvEtzNHXXfgWj6ec/l1jLkpfn51MBYXER3zcgTiCBs5JgvWtxw9/0uSwEeN/HY4 -U1yzYRlQQeEWZFovTA2wYJhN6xZy0mmLe5LBCdJSpXit2mrYAFZGvH+MnbEnXLXE -FgeJe+w9otjfqq37LxxUjfe2xEeTtliE/x6iuTew7/k04vTi1Dk0tHmeMhkA/tUW -snxRGkZHqnZKhmv3NNTFV6NSwRXrm9N/gefSA1/DOB3WpH2U0YCXsiTpR+31ounG -/60ox9XrVIzDkHNR7qc+91KpD6xyttt2qdeC4bnwQWK/KqYcpL54Io6P06JWstFQ -nR5bvvK7NVWDWwM5nqw28aCEZ63X2mq/GO7wQqhKIB8+oGFqm/Bu8ciLzK/89Cxw -KW4hy0sXJ+PU5gPECS4q57NgVU39Auyue3vziNsQ3NusoAjqqQ7mMmBWrzGEyoc7 -tirNnNRbdz+9M+1CHu8622BiU55KAgL27/H1WiWqaMLLRn0NhYGZipH+THdVxhJl -H1rqDa8o0j0DL2kQkjUvMQG5q6tMavbbmEB4vyPwxTBNVcKnkg9++r0JQiIshDXV -tgElAgMBAAGjUzBRMB0GA1UdDgQWBBSL6Xv5EJCvf/MJO7U/HABHivI9dTAfBgNV -HSMEGDAWgBSL6Xv5EJCvf/MJO7U/HABHivI9dTAPBgNVHRMBAf8EBTADAQH/MA0G -CSqGSIb3DQEBCwUAA4ICAQAArEGEwU/uvTSg9ekkufsOYr7yKnlmXdoHN9BTN/6V -7sXhWdFQguW41/u/Xzm24SvaSSr0DCVs2h75tgnms/Bf9x2OK9WGTNCLmI9YDWyD -By050oQ+0BDWdDXxVAX1tz5dm4H0fTU+jzr58CoQpR1wIkmSNBdWwbWvMQeqAL8r -b6pLVElM5LdCX0OZYDt1E3Hpja6UYBro0ziGnfVLO4/UWVYBgHWU+IpiM1bZI1Iq -SYIqJwy1bC3duU0z76YvvUkNA0UiGMQbbjqorrR8ltzArV4qZaV3JcLZa1LpvTGc -7qLGNutkJvmksahvgklreb6oEc1FbFt5wew8FUgLeAZXgy8LwTyKXLq1YSLJc/QE -OaJfb7Tork2sd+/9kGwyPQ36/YaRRGIs6OaNbFTjCJs73Zyycu+RFaxewjo8offP -sozyilQAU6jl4XGO7fQOVJsUgb33pOrgI7f8EMbUAYZHGUwrbiCxNoiJRxM5e4J+ -7AsPU4C21mIysndXT6v14HZBTMLbjfPASOr+FdZw7L+rtHk2iLvAfFeeMDPd4Zrb -1/xtQ6iAd64RkmwlrFvbLPWLuFK7QVRHIpAGa/aFRPq7xECuHI8cGupU+lZtrORo -YBRsYyizGXwiuMstzx8ZV+CpeW4hBfCvHiYqshceAeQd+89ljoc/iJNf0PdUgN+Q -og== ------END CERTIFICATE----- diff --git a/proxy/ssl/key.pem b/proxy/ssl/key.pem deleted file mode 100644 index 0dec64b..0000000 --- a/proxy/ssl/key.pem +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -5ZADVjSHf21VhXCmSSGtL59GcaMYVA== ------END PRIVATE KEY----- diff --git a/proxy/start.sh b/proxy/start.sh deleted file mode 100755 index a3cd011..0000000 --- a/proxy/start.sh +++ /dev/null @@ -1 +0,0 @@ -ruby ./bettermail_proxy.rb diff --git a/tests/.ruby-gemset b/tests/.ruby-gemset new file mode 100644 index 0000000..5e5cb36 --- /dev/null +++ b/tests/.ruby-gemset @@ -0,0 +1 @@ +bettermail_tests diff --git a/consumer/.ruby-version b/tests/.ruby-version similarity index 100% rename from consumer/.ruby-version rename to tests/.ruby-version diff --git a/consumer/Gemfile b/tests/Gemfile similarity index 75% rename from consumer/Gemfile rename to tests/Gemfile index 13abcf4..0f30529 100644 --- a/consumer/Gemfile +++ b/tests/Gemfile @@ -1,6 +1,5 @@ source 'https://rubygems.org' ruby '2.7.2' -gem 'dotenv' gem 'bunny' gem 'mail' -gem 'pg' + diff --git a/consumer/Gemfile.lock b/tests/Gemfile.lock similarity index 89% rename from consumer/Gemfile.lock rename to tests/Gemfile.lock index 94db6aa..40cb67e 100644 --- a/consumer/Gemfile.lock +++ b/tests/Gemfile.lock @@ -5,11 +5,9 @@ GEM bunny (2.19.0) amq-protocol (~> 2.3, >= 2.3.1) sorted_set (~> 1, >= 1.0.2) - dotenv (2.8.1) mail (2.7.1) mini_mime (>= 0.1.1) mini_mime (1.1.2) - pg (1.4.4) rbtree (0.4.5) set (1.0.3) sorted_set (1.0.3) @@ -21,9 +19,7 @@ PLATFORMS DEPENDENCIES bunny - dotenv mail - pg RUBY VERSION ruby 2.7.2p137 diff --git a/tests/test_sending_emails.rb b/tests/test_sending_emails.rb new file mode 100644 index 0000000..7f6345c --- /dev/null +++ b/tests/test_sending_emails.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require 'mail' +require 'bunny' +require 'securerandom' + +@default_smtp_settings = { + address: 'localhost', + port: '2025', + user_name: 'hello', + password: 'world', + enable_starttls_auto: true, + authentication: 'plain', + openssl_verify_mode: 'none' + } + +def send_mail(index) + mail = Mail.new( + from: "test-#{index}-#{SecureRandom.uuid}@thefactory.local", + to: "#{SecureRandom.uuid}@acme.local", + cc: "cc-#{SecureRandom.uuid}@acme.local", + bcc: "bcc-#{SecureRandom.uuid}@acme.local", + subject: "Testing #{index}", + ) + mail.delivery_method :smtp, @default_smtp_settings + mail.deliver! +end + +number_of_emails = ARGV[0] || 1 + +send_mail number_of_emails