class Mongo::Auth::X509::Conversation

Defines behaviour around a single x.509 conversation between the client and server.

@since 2.0.0

Constants

LOGIN

The login message.

@since 2.0.0

Attributes

reply[R]

@return [ Protocol::Reply ] reply The current reply in the

conversation.
user[R]

@return [ User ] user The user for the conversation.

Public Class Methods

new(user) click to toggle source

Create the new conversation.

@example Create the new coversation.

Conversation.new(user, "admin")

@param [ Auth::User ] user The user to converse about.

@since 2.0.0

# File lib/mongo/auth/x509/conversation.rb, line 79
def initialize(user)
  @user = user
end

Public Instance Methods

finalize(reply) click to toggle source

Finalize the x.509 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/x509/conversation.rb, line 49
def finalize(reply)
  validate!(reply)
end
start() click to toggle source

Start the x.509 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 x.509 conversation message.

@since 2.0.0

# File lib/mongo/auth/x509/conversation.rb, line 62
def start
  Protocol::Query.new(
    Auth::EXTERNAL,
    Database::COMMAND,
    LOGIN.merge(user: user.name, mechanism: X509::MECHANISM),
    limit: -1
  )
end

Private Instance Methods

validate!(reply) click to toggle source
# File lib/mongo/auth/x509/conversation.rb, line 85
def validate!(reply)
  raise Unauthorized.new(user) if reply.documents[0][Operation::Result::OK] != 1
  @reply = reply
end