class Net::IMAP::SASL::Authenticators

SASL 验证器的注册表

注册的验证器必须响应 #new#call(例如,类或 Proc),接收任何凭据和选项,并返回一个验证器实例。返回的对象代表一个单独的身份验证交换,并且不得重复用于多个身份验证尝试。

验证器实例对象必须响应 #process,接收服务器的挑战并返回客户端的响应。可选地,它还可以响应 #initial_response?#done?。当 #initial_response? 返回 true 时,首次调用 #process 时可以使用 nil。当 #done? 返回 false 时,表示交换未完成,如果交换过早终止,则应引发异常。

有关示例,请参阅 PlainAuthenticatorXOAuth2AuthenticatorScramSHA1Authenticator 的源代码。

公共类方法

new(use_defaults: true, use_deprecated: true) 点击切换源代码

创建一个新的 Authenticators 注册表。

通常不直接实例化此类。使用 SASL.authenticators 来重用默认的全局注册表。

use_defaultsfalse 时,注册表将以空状态启动。当 use_deprecatedfalse 时,默认情况下将不包含已弃用的验证器。

# File net-imap-0.5.4/lib/net/imap/sasl/authenticators.rb, line 36
def initialize(use_defaults: true, use_deprecated: true)
  @authenticators = {}
  return unless use_defaults
  add_authenticator "Anonymous"
  add_authenticator "External"
  add_authenticator "OAuthBearer"
  add_authenticator "Plain"
  add_authenticator "Scram-SHA-1"
  add_authenticator "Scram-SHA-256"
  add_authenticator "XOAuth2"
  return unless use_deprecated
  add_authenticator "Login"      # deprecated
  add_authenticator "Cram-MD5"   # deprecated
  add_authenticator "Digest-MD5" # deprecated
end
normalize_name(mechanism) 点击切换源代码

将机制名称规范化为大写字符串,并将下划线转换为破折号。

# File net-imap-0.5.4/lib/net/imap/sasl/authenticators.rb, line 26
def self.normalize_name(mechanism) -(mechanism.to_s.upcase.tr(?_, ?-)) end

公共实例方法

add_authenticator(mechanism) 点击切换源代码
add_authenticator(mechanism, authenticator_class)
add_authenticator(mechanism, authenticator_proc)

authenticator 注册一个验证器供使用。mechanism 是由 authenticator_class 实现的 SASL 机制的名称(例如,"PLAIN")。

如果 mechanism 指的是现有验证器,则将替换旧的验证器。

当只给出一个参数时,验证器类将从 Net::IMAP::SASL::#{name}Authenticator 延迟加载(保留大小写,并删除非字母数字字符)。

# File net-imap-0.5.4/lib/net/imap/sasl/authenticators.rb, line 71
def add_authenticator(name, authenticator = nil)
  authenticator ||= begin
    class_name = "#{name.gsub(/[^a-zA-Z0-9]/, "")}Authenticator".to_sym
    auth_class = nil
    ->(*creds, **props, &block) {
      auth_class ||= Net::IMAP::SASL.const_get(class_name)
      auth_class.new(*creds, **props, &block)
    }
  end
  key = Authenticators.normalize_name(name)
  @authenticators[key] = authenticator
end
authenticator(mechanism, ...) → auth_session 点击切换源代码

使用为 mechanism 注册的验证器构建验证器实例。返回的对象代表一个单独的身份验证交换,并且不得重复用于多个身份验证尝试。

所有参数(除了 mechanism)都会转发到已注册验证器的 #new#call 方法。每个验证器都必须记录自己的参数。

注意

此方法仅供连接协议代码内部使用。协议客户端用户应参阅其客户端的文档,例如 Net::IMAP#authenticate

# File net-imap-0.5.4/lib/net/imap/sasl/authenticators.rb, line 111
def authenticator(mechanism, ...)
  key = Authenticators.normalize_name(mechanism)
  auth = @authenticators.fetch(key) do
    raise ArgumentError, 'unknown auth type - "%s"' % key
  end
  auth.respond_to?(:new) ? auth.new(...) : auth.call(...)
end
也别名为:new
mechanism?(name) 点击切换源代码
# File net-imap-0.5.4/lib/net/imap/sasl/authenticators.rb, line 90
def mechanism?(name)
  key = Authenticators.normalize_name(name)
  @authenticators.key?(key)
end
names() 点击切换源代码

返回所有已注册的 SASL 机制的名称。

# File net-imap-0.5.4/lib/net/imap/sasl/authenticators.rb, line 53
def names; @authenticators.keys end
new(mechanism, ...)
别名:authenticator
remove_authenticator(name) 点击切换源代码

删除为 name 注册的验证器

# File net-imap-0.5.4/lib/net/imap/sasl/authenticators.rb, line 85
def remove_authenticator(name)
  key = Authenticators.normalize_name(name)
  @authenticators.delete(key)
end