Commit 399fdf8
Changed files (6)
lib/minbox/cli.rb
@@ -2,6 +2,7 @@ require 'thor'
require 'mail'
require 'minbox'
+require 'minbox/secure_server'
module Minbox
module Cli
@@ -17,7 +18,9 @@ module Minbox
body "#{Time.now} This is a test message."
end
require 'net/smtp'
- Net::SMTP.start(host, port) do |smtp|
+ smtp = Net::SMTP.new(host, port)
+ smtp.enable_starttls
+ smtp.start do |smtp|
smtp.send_message(mail.to_s, 'me+1@example.org', 'them+1@example.com')
smtp.send_message(mail.to_s, 'me+2@example.org', 'them+2@example.com')
end
@@ -32,6 +35,17 @@ module Minbox
end
end
+ method_option :output, type: :array, default: ['stdout']
+ desc 'secure_server <HOST> <PORT>', 'SMTP secure server'
+ def secure_server(host = 'localhost', port = '25')
+ # publisher = Publisher.from(options[:output])
+ SecureServer.new(port).listen do |socket|
+ puts "HELLLLLLLOOOOO"
+ read_line = socket.gets
+ puts read_line
+ end
+ end
+
desc 'version', 'Display the current version'
def version
say Minbox::VERSION
lib/minbox/client.rb
@@ -35,6 +35,7 @@ module Minbox
def quit
write "221 Bye"
close
+ @server.downgrade
end
def data(line, &block)
@@ -61,6 +62,7 @@ module Minbox
_ehlo, _client_domain = line.split(" ")
write "250-#{host}"
#write "250 AUTH PLAIN LOGIN"
+ write "250 STARTTLS"
write "250 OK"
end
@@ -70,7 +72,16 @@ module Minbox
end
def start_tls
- write "502 TLS not available"
+ write "220 Ready to start TLS"
+ ssl_context = OpenSSL::SSL::SSLContext.new()
+ ssl_context.cert = OpenSSL::X509::Certificate.new(File.open("server.pem"))
+ ssl_context.key = OpenSSL::PKey::RSA.new(File.open("server.pem"))
+ ssl_context.ssl_version = :SSLv23
+ ssl_socket = OpenSSL::SSL::SSLSocket.new(@socket, ssl_context)
+ # ssl_socket.sync_close = true
+ # ssl_socket.connect
+ @socket = ssl_socket
+ # write "502 TLS not available"
end
def reset
lib/minbox/secure_server.rb
@@ -0,0 +1,18 @@
+module Minbox
+ class SecureServer
+
+ def initialize(port)
+ server = TCPServer.new(port)
+ sslContext = OpenSSL::SSL::SSLContext.new
+ sslContext.cert = OpenSSL::X509::Certificate.new(File.open("server.pem"))
+ sslContext.key = OpenSSL::PKey::RSA.new(File.open("server.pem"))
+ @sslServer = OpenSSL::SSL::SSLServer.new(server, sslContext)
+ end
+
+ def listen
+ loop do
+ yield @sslServer.accept
+ end
+ end
+ end
+end
lib/minbox/server.rb
@@ -10,7 +10,7 @@ module Minbox
def listen!(&block)
logger.debug("Starting server on port #{port}...")
- @server = TCPServer.new(port.to_i)
+ @server = @original_server = TCPServer.new(port.to_i)
logger.debug("Server started!")
loop do
.gitignore
@@ -6,6 +6,7 @@
/pkg/
/spec/reports/
/tmp/
+server.pem
# rspec failure tracking
.rspec_status
.ruby-version
@@ -0,0 +1,1 @@
+2.6.1