Skip to content

Commit

Permalink
Merge pull request #73 from nevans/sasl/delegate-check_auth_args
Browse files Browse the repository at this point in the history
Delegate checking auth args to the authenticator
  • Loading branch information
tmtm authored Nov 4, 2023
2 parents c41e299 + c02ce79 commit 4b94205
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 17 deletions.
24 changes: 7 additions & 17 deletions lib/net/smtp.rb
Original file line number Diff line number Diff line change
Expand Up @@ -633,9 +633,8 @@ def tcp_socket(address, port)

def do_start(helo_domain, user, secret, authtype)
raise IOError, 'SMTP session already started' if @started
if user or secret
check_auth_method(authtype || DEFAULT_AUTH_TYPE)
check_auth_args user, secret
if user || secret || authtype
check_auth_args authtype, user, secret
end
s = Timeout.timeout(@open_timeout, Net::OpenTimeout) do
tcp_socket(@address, @port)
Expand Down Expand Up @@ -832,27 +831,18 @@ def open_message_stream(from_addr, *to_addrs, &block) # :yield: stream
DEFAULT_AUTH_TYPE = :plain

def authenticate(user, secret, authtype = DEFAULT_AUTH_TYPE)
check_auth_method authtype
check_auth_args user, secret
check_auth_args authtype, user, secret
authenticator = Authenticator.auth_class(authtype).new(self)
authenticator.auth(user, secret)
end

private

def check_auth_method(type)
unless Authenticator.auth_class(type)
def check_auth_args(type, *args, **kwargs)
type ||= DEFAULT_AUTH_TYPE
klass = Authenticator.auth_class(type) or
raise ArgumentError, "wrong authentication type #{type}"
end
end

def check_auth_args(user, secret, authtype = DEFAULT_AUTH_TYPE)
unless user
raise ArgumentError, 'SMTP-AUTH requested but missing user name'
end
unless secret
raise ArgumentError, 'SMTP-AUTH requested but missing secret phrase'
end
klass.check_args(*args, **kwargs)
end

#
Expand Down
9 changes: 9 additions & 0 deletions lib/net/smtp/authenticator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@ def self.auth_class(type)
Authenticator.auth_classes[type]
end

def self.check_args(user_arg = nil, secret_arg = nil, *, **)
unless user_arg
raise ArgumentError, 'SMTP-AUTH requested but missing user name'
end
unless secret_arg
raise ArgumentError, 'SMTP-AUTH requested but missing secret phrase'
end
end

attr_reader :smtp

def initialize(smtp)
Expand Down

0 comments on commit 4b94205

Please sign in to comment.