Skip to content

Commit bfe514a

Browse files
committed
Add keyword parameters to authenticators
Username can be set by args[0], authcid, username, or user. Secret can be set by args[1], secret, or password. Since all of the existing authenticators have the same API, it is sufficient to update `check_args` in the base class.
1 parent 241ae40 commit bfe514a

4 files changed

Lines changed: 30 additions & 6 deletions

File tree

lib/net/smtp/auth_cram_md5.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ class Net::SMTP
99
class AuthCramMD5 < Net::SMTP::Authenticator
1010
auth_type :cram_md5
1111

12-
def auth(user, secret)
12+
def auth(user_arg = nil, secret_arg = nil,
13+
authcid: nil, username: nil, user: nil,
14+
secret: nil, password: nil,
15+
**)
16+
user = req_param authcid, username, user, user_arg, "username (authcid)"
17+
secret = req_param password, secret, secret_arg, "secret (password)"
1318
challenge = continue('AUTH CRAM-MD5')
1419
crammed = cram_md5_response(secret, challenge.unpack1('m'))
1520
finish(base64_encode("#{user} #{crammed}"))

lib/net/smtp/auth_login.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ class Net::SMTP
22
class AuthLogin < Net::SMTP::Authenticator
33
auth_type :login
44

5-
def auth(user, secret)
5+
def auth(user_arg = nil, secret_arg = nil,
6+
authcid: nil, username: nil, user: nil,
7+
secret: nil, password: nil,
8+
**)
9+
user = req_param authcid, username, user, user_arg, "username (authcid)"
10+
secret = req_param password, secret, secret_arg, "secret (password)"
611
continue('AUTH LOGIN')
712
continue(base64_encode(user))
813
finish(base64_encode(secret))

lib/net/smtp/auth_plain.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ class Net::SMTP
22
class AuthPlain < Net::SMTP::Authenticator
33
auth_type :plain
44

5-
def auth(user, secret)
5+
def auth(user_arg = nil, secret_arg = nil,
6+
authcid: nil, username: nil, user: nil,
7+
secret: nil, password: nil,
8+
**)
9+
user = req_param authcid, username, user, user_arg, "username (authcid)"
10+
secret = req_param password, secret, secret_arg, "secret (password)"
611
finish('AUTH PLAIN ' + base64_encode("\0#{user}\0#{secret}"))
712
end
813
end

lib/net/smtp/authenticator.rb

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ def self.auth_class(type)
1313
Authenticator.auth_classes[type.intern]
1414
end
1515

16-
def self.check_args(user_arg = nil, secret_arg = nil, *, **)
17-
unless user_arg
16+
def self.check_args(user_arg = nil, secret_arg = nil, *,
17+
authcid: nil, username: nil, user: nil,
18+
secret: nil, password: nil,
19+
**)
20+
unless authcid || username || user || user_arg
1821
raise ArgumentError, 'SMTP-AUTH requested but missing user name'
1922
end
20-
unless secret_arg
23+
unless password || secret || secret_arg
2124
raise ArgumentError, 'SMTP-AUTH requested but missing secret phrase'
2225
end
2326
end
@@ -50,6 +53,12 @@ def base64_encode(str)
5053
# expects "str" may not become too long
5154
[str].pack('m0')
5255
end
56+
57+
def req_param(*args, name)
58+
args.compact.first or
59+
raise ArgumentError, "SMTP-AUTH requested but missing #{name}"
60+
end
61+
5362
end
5463
end
5564
end

0 commit comments

Comments
 (0)