class Net::IMAP::SASL::ClientAdapter
此 API 是实验性的,可能会发生更改。
待办事项:与更多客户端一起使用,以验证 API 是否可以容纳它们。
表示 SASL::AuthenticationExchange
的客户端。 默认情况下,大多数方法只是委托给 client
。 客户端应继承 SASL::ClientAdapter
并根据需要覆盖方法,以使其 API 的语义与此 API 相匹配。
子类还应该在默认的 ProtocolAdapters::Generic
不够用时包含协议适配器混合。
协议要求¶ ↑
RFC4422 §4 列出了协议规范提供 SASL
的要求。 在可能的情况下,ClientAdapter
会将这些要求的处理委托给 SASL::ProtocolAdapters
。
属性
处理与协议服务器通信的客户端。
默认情况下,大多数 ClientAdapter
方法只是委托给 client
。
command_proc
可用于避免在 client
上公开私有方法。 它的值由传递给 ::new
的块设置,并且由 run_command
的默认实现使用。 覆盖 run_command
的子类可以使用 command_proc
用于他们发现有用的任何其他目的。
在 run_command
的默认实现中,会使用协议的身份验证 command
名称、mechanism
名称、一个可选的 initial_response
参数和一个 continuations
块调用 command_proc
。 command_proc
必须使用发送给它的参数运行协议命令,yield 每个延续的有效负载,使用每个 yield 的结果响应延续,并返回命令的成功结果。不成功的结果必须引发异常。
公共类方法
默认情况下,这只是设置 client
和 command_proc
属性。 子类可以覆盖它,例如:自动设置相应的 command_proc
。
# File net-imap-0.5.4/lib/net/imap/sasl/client_adapter.rb, line 56 def initialize(client, &command_proc) @client, @command_proc = client, command_proc end
公共实例方法
服务器是否声明支持 mechanism
?
# File net-imap-0.5.4/lib/net/imap/sasl/client_adapter.rb, line 76 def_delegator :client, :auth_capable?
尝试将 client
验证到服务器。
默认情况下,这只是委托给 AuthenticationExchange.authenticate
。
# File net-imap-0.5.4/lib/net/imap/sasl/client_adapter.rb, line 64 def authenticate(...) AuthenticationExchange.authenticate(self, ...) end
正常断开连接,根据需要发送“LOGOUT”命令。
# File net-imap-0.5.4/lib/net/imap/sasl/client_adapter.rb, line 113 def_delegator :client, :drop_connection
突然断开连接,在不注销的情况下关闭套接字。
# File net-imap-0.5.4/lib/net/imap/sasl/client_adapter.rb, line 118 def_delegator :client, :drop_connection!
客户端连接到的主机名。
# File net-imap-0.5.4/lib/net/imap/sasl/client_adapter.rb, line 99 def_delegator :client, :host
客户端连接到的目标端口。
# File net-imap-0.5.4/lib/net/imap/sasl/client_adapter.rb, line 104 def_delegator :client, :port
返回由 run_command 引发的服务器响应错误数组。此数组中的异常不会断开连接。
# File net-imap-0.5.4/lib/net/imap/sasl/client_adapter.rb, line 108 def response_errors; [] end
使用 command_name
(请参阅 SASL::ProtocolAdapters::Generic#command_name
)、mechanism
、initial_response
和一个 continuations_handler
块调用 command_proc
。 initial_response
是可选的;当它为 nil 时,它不会被发送到 command_proc。
yield 每个延续有效负载,使用每个 yield 的结果响应服务器,并返回结果。 不成功的结果必须引发异常。 该块中的异常必须导致命令失败。
覆盖此项的子类可以使用不同的 command_proc
。
# File net-imap-0.5.4/lib/net/imap/sasl/client_adapter.rb, line 90 def run_command(mechanism, initial_response = nil, &continuations_handler) command_proc or raise Error, "initialize with block or override" args = [command_name, mechanism, initial_response].compact command_proc.call(*args, &continuations_handler) end
协议、服务器和客户端是否都支持初始响应?
# File net-imap-0.5.4/lib/net/imap/sasl/client_adapter.rb, line 69 def_delegator :client, :sasl_ir_capable?