Commit 056c1e5

mokha <mokha@cisco.com>
2019-03-09 21:48:54
add option to start server via tls.
1 parent dccaf65
Changed files (4)
lib/minbox/cli.rb
@@ -26,10 +26,11 @@ module Minbox
       end
 
       method_option :output, type: :array, default: ['stdout']
+      method_option :tls, type: :boolean, default: false
       desc 'server <HOST> <PORT>', 'SMTP server'
       def server(host = 'localhost', port = '25')
         publisher = Publisher.from(options[:output])
-        Server.new(host, port).listen! do |mail|
+        Server.new(host, port, options[:tls]).listen! do |mail|
           publisher.publish(mail)
         end
       end
lib/minbox/client.rb
@@ -2,10 +2,11 @@ module Minbox
   class Client
     attr_reader :host, :socket, :logger
 
-    def initialize(host, socket, logger)
+    def initialize(host, socket, logger, tls = false)
       @host = host
       @logger = logger
       @socket = socket
+      @tls = tls
     end
 
     def handle(&block)
@@ -65,7 +66,7 @@ module Minbox
       write "250-#{host}"
       #write "250 AUTH PLAIN LOGIN"
       write "250-ENHANCEDSTATUSCODES"
-      #write "250 STARTTLS"
+      write "250 STARTTLS" if @tls
       write "250 OK"
     end
 
lib/minbox/server.rb
@@ -2,16 +2,17 @@ module Minbox
   class Server
     attr_reader :host, :port, :logger
 
-    def initialize(host = 'localhost', port = 25, logger = Minbox.logger)
+    def initialize(host = 'localhost', port = 25, tls = false, logger = Minbox.logger)
       @host = host
       @port = port
       @logger = logger
+      @tls = tls
     end
 
     def listen!(&block)
       logger.debug("Starting server on port #{port}...")
       @server = TCPServer.new(port.to_i)
-      #@server = upgrade(@server)
+      @server = upgrade(@server) if @tls
       logger.debug("Server started!")
 
       loop do
@@ -23,7 +24,7 @@ module Minbox
 
     def handle(socket, &block)
       logger.debug("client connected: #{socket.inspect}")
-      Client.new(host, socket, logger).handle(&block)
+      Client.new(host, socket, logger, @tls).handle(&block)
     end
 
     def shutdown!
@@ -69,9 +70,6 @@ module Minbox
       ssl_context.cert = certificate_for(key)
       ssl_context.key = key
       ssl_context.ssl_version = :SSLv23
-      ssl_context.renegotiation_cb = lambda do |ssl|
-        puts "Negotiating..."
-      end
       ssl_context
     end
   end
spec/minbox/server_spec.rb
@@ -68,6 +68,7 @@ RSpec.describe Minbox::Server do
             x.add_file __FILE__
           end
           Net::SMTP.start(host, port, 'mail.from.domain', 'username', 'password', :login) do |smtp|
+            smtp.debug_output= STDOUT
             smtp.send_message(mail.to_s, Faker::Internet.email, Faker::Internet.email)
           end
         end
@@ -98,9 +99,9 @@ RSpec.describe Minbox::Server do
       context "when upgrading to tls" do
         let(:result) do
           mail = create_mail
-          Net::SMTP.start(host, port) do |smtp|
-            #smtp.enable_starttls
-            smtp.enable_tls
+          smtp = Net::SMTP.new(host, port)
+          smtp.enable_starttls
+          smtp.start do |smtp|
             smtp.send_message(mail.to_s, Faker::Internet.email, Faker::Internet.email)
           end
         end