class Mongo::Auth::CR::Conversation
Defines behaviour around a single MONGODB-CR conversation between the client and server.
@since 2.0.0
Constants
- LOGIN
The login message base.
@since 2.0.0
Attributes
@return [ String ] database The database to authenticate against.
@return [ String ] nonce The initial auth nonce.
@return [ Protocol::Reply ] reply The current reply in the
conversation.
@return [ User ] user The user for the conversation.
Public Class Methods
Create the new conversation.
@example Create the new conversation.
Conversation.new(user, "admin")
@param [ Auth::User ] user The user to converse about.
@since 2.0.0
# File lib/mongo/auth/cr/conversation.rb, line 107 def initialize(user) @user = user end
Public Instance Methods
Continue the CR conversation. This sends the client final message to the server after setting the reply from the previous server communication.
@example Continue the conversation.
conversation.continue(reply)
@param [ Protocol::Reply ] reply The reply of the previous
message.
@return [ Protocol::Query ] The next message to send.
@since 2.0.0
# File lib/mongo/auth/cr/conversation.rb, line 56 def continue(reply) validate!(reply) Protocol::Query.new( user.auth_source, Database::COMMAND, LOGIN.merge(user: user.name, nonce: nonce, key: user.auth_key(nonce)), limit: -1 ) end
Finalize the CR conversation. This is meant to be iterated until the provided reply indicates the conversation is finished.
@example Finalize the conversation.
conversation.finalize(reply)
@param [ Protocol::Reply ] reply The reply of the previous
message.
@return [ Protocol::Query ] The next message to send.
@since 2.0.0
# File lib/mongo/auth/cr/conversation.rb, line 78 def finalize(reply) validate!(reply) end
Start the CR conversation. This returns the first message that needs to be send to the server.
@example Start the conversation.
conversation.start
@return [ Protocol::Query ] The first CR conversation message.
@since 2.0.0
# File lib/mongo/auth/cr/conversation.rb, line 91 def start Protocol::Query.new( user.auth_source, Database::COMMAND, Auth::GET_NONCE, limit: -1) end
Private Instance Methods
# File lib/mongo/auth/cr/conversation.rb, line 113 def validate!(reply) raise Unauthorized.new(user) if reply.documents[0][Operation::Result::OK] != 1 @nonce = reply.documents[0][Auth::NONCE] @reply = reply end