Commit 939e8e7
lib/minbox/client.rb
@@ -18,7 +18,7 @@ module Minbox
when /^HELO/i then helo(line)
when /^MAIL FROM/i then mail_from(line)
when /^RCPT TO/i then rcpt_to(line)
- when /^DATA/i then data(line, &block)
+ when /^DATA/i then data(&block)
when /^QUIT/i then quit
when /^STARTTLS/i then start_tls
when /^RSET/i then reset
@@ -43,7 +43,7 @@ module Minbox
close
end
- def data(line)
+ def data
write '354 End data with <CR><LF>.<CR><LF>'
body = []
line = read
@@ -103,10 +103,7 @@ module Minbox
parts = Base64.decode64(data).split("\0")
username = parts[-2]
password = parts[-1]
- logger.debug("#{username}:#{password}")
- return write '535 Authenticated failed - protocol error' unless username && password
-
- write '235 2.7.0 Authentication successful'
+ authenticate(username, password)
end
def auth_login(line)
@@ -114,16 +111,10 @@ module Minbox
if username.strip == ''
write '334 VXNlcm5hbWU6'
username = read
- write '334 UGFzc3dvcmQ6'
- else
- write '334 UGFzc3dvcmQ6'
end
+ write '334 UGFzc3dvcmQ6'
password = Base64.decode64(read)
- logger.debug("#{username}:#{password}")
-
- return write '535 Authenticated failed - protocol error' unless username && password
-
- write '235 2.7.0 Authentication successful'
+ authenticate(username, password)
end
def write(message)
@@ -146,5 +137,12 @@ module Minbox
def connected?
@socket
end
+
+ def authenticate(username, password)
+ logger.debug("#{username}:#{password}")
+ return write '535 Authenticated failed - protocol error' unless username && password
+
+ write '235 2.7.0 Authentication successful'
+ end
end
end
lib/minbox/server.rb
@@ -3,14 +3,15 @@
module Minbox
class Server
SUBJECT = '/C=CA/ST=AB/L=Calgary/O=minbox/OU=development/CN=minbox'
- attr_reader :host, :port, :logger, :key
+ attr_reader :host, :logger, :key, :server
def initialize(host = 'localhost', port = 25, tls = false, logger = Minbox.logger)
@host = host
- @port = port
@logger = logger
@tls = tls
@key = OpenSSL::PKey::RSA.new(2048)
+ logger.debug("Starting server on port #{port}...")
+ @server = TCPServer.new(port.to_i)
end
def tls?
@@ -18,13 +19,11 @@ module Minbox
end
def listen!(&block)
- logger.debug("Starting server on port #{port}...")
- @server = TCPServer.new(port.to_i)
@server = upgrade(@server) if tls?
logger.debug('Server started!')
loop do
- handle(@server.accept, &block)
+ handle(server.accept, &block)
rescue StandardError => error
logger.error(error)
end
@@ -36,7 +35,7 @@ module Minbox
end
def shutdown!
- @server&.close
+ server&.close
end
def ssl_context