Class: Mongo::Auth::User
- Inherits:
-
Object
- Object
- Mongo::Auth::User
- Includes:
- Loggable
- Defined in:
- lib/mongo/auth/user.rb,
lib/mongo/auth/user/view.rb
Overview
Represents a user in MongoDB.
Defined Under Namespace
Classes: View
Constant Summary
Constants included from Loggable
Instance Attribute Summary collapse
-
#auth_mech_properties ⇒ Hash
readonly
The authentication mechanism properties.
-
#auth_source ⇒ String
readonly
The authorization source, either a database or external name.
-
#database ⇒ String
readonly
The database the user is created in.
-
#mechanism ⇒ Symbol
readonly
The authorization mechanism.
-
#name ⇒ String
readonly
The username.
-
#password ⇒ String
readonly
The cleartext password.
-
#roles ⇒ Array<String>
readonly
Roles The user roles.
Instance Method Summary collapse
-
#==(other) ⇒ true, false
Determine if this user is equal to another.
-
#auth_key(nonce) ⇒ String
Get an authentication key for the user based on a nonce from the server.
-
#encoded_name ⇒ String
Get the UTF-8 encoded name with escaped special characters for use with SCRAM authorization.
-
#hash ⇒ String
Get the hash key for the user.
-
#hashed_password ⇒ String
Get the user’s hashed password for SCRAM-SHA-1.
-
#initialize(options) ⇒ User
constructor
Create the new user.
-
#options ⇒ Object
private
Loggable requires an options attribute.
-
#sasl_prepped_password ⇒ Object
private
Get the user’s stringprepped password for SCRAM-SHA-256.
-
#spec ⇒ Hash
Get the specification for the user, used in creation.
Methods included from Loggable
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
Constructor Details
#initialize(options) ⇒ User
Create the new user.
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/mongo/auth/user.rb', line 160 def initialize() @database = [:database] || Database::ADMIN @auth_source = [:auth_source] || self.class.default_auth_source() @name = [:user] @password = [:password] || [:pwd] @mechanism = [:auth_mech] if @mechanism # Since the driver must select an authentication class for # the specified mechanism, mechanisms that the driver does not # know about, and cannot translate to an authentication class, # need to be rejected. unless @mechanism.is_a?(Symbol) # Although we documented auth_mech option as being a symbol, we # have not enforced this; warn, reject in lint mode if Lint.enabled? raise Error::LintError, "Auth mechanism #{@mechanism.inspect} must be specified as a symbol" else log_warn("Auth mechanism #{@mechanism.inspect} should be specified as a symbol") @mechanism = @mechanism.to_sym end end unless Auth::SOURCES.key?(@mechanism) raise InvalidMechanism.new([:auth_mech]) end end @auth_mech_properties = [:auth_mech_properties] || {} @roles = [:roles] || [] end |
Instance Attribute Details
#auth_mech_properties ⇒ Hash (readonly)
Returns The authentication mechanism properties.
34 35 36 |
# File 'lib/mongo/auth/user.rb', line 34 def auth_mech_properties @auth_mech_properties end |
#auth_source ⇒ String (readonly)
Returns The authorization source, either a database or external name.
28 29 30 |
# File 'lib/mongo/auth/user.rb', line 28 def auth_source @auth_source end |
#database ⇒ String (readonly)
Returns The database the user is created in.
31 32 33 |
# File 'lib/mongo/auth/user.rb', line 31 def database @database end |
#mechanism ⇒ Symbol (readonly)
Returns The authorization mechanism.
37 38 39 |
# File 'lib/mongo/auth/user.rb', line 37 def mechanism @mechanism end |
#name ⇒ String (readonly)
Returns The username.
40 41 42 |
# File 'lib/mongo/auth/user.rb', line 40 def name @name end |
#password ⇒ String (readonly)
Returns The cleartext password.
43 44 45 |
# File 'lib/mongo/auth/user.rb', line 43 def password @password end |
#roles ⇒ Array<String> (readonly)
Returns roles The user roles.
46 47 48 |
# File 'lib/mongo/auth/user.rb', line 46 def roles @roles end |
Instance Method Details
#==(other) ⇒ true, false
Determine if this user is equal to another.
66 67 68 69 |
# File 'lib/mongo/auth/user.rb', line 66 def ==(other) return false unless other.is_a?(User) name == other.name && database == other.database && password == other.password end |
#auth_key(nonce) ⇒ String
Get an authentication key for the user based on a nonce from the server.
82 83 84 |
# File 'lib/mongo/auth/user.rb', line 82 def auth_key(nonce) Digest::MD5.hexdigest("#{nonce}#{name}#{hashed_password}") end |
#encoded_name ⇒ String
Get the UTF-8 encoded name with escaped special characters for use with SCRAM authorization.
95 96 97 |
# File 'lib/mongo/auth/user.rb', line 95 def encoded_name name.encode(BSON::UTF8).gsub('=','=3D').gsub(',','=2C') end |
#hash ⇒ String
Get the hash key for the user.
107 108 109 |
# File 'lib/mongo/auth/user.rb', line 107 def hash [ name, database, password ].hash end |
#hashed_password ⇒ String
Get the user’s hashed password for SCRAM-SHA-1.
119 120 121 122 123 124 125 |
# File 'lib/mongo/auth/user.rb', line 119 def hashed_password unless password raise Error::MissingPassword end @hashed_password ||= Digest::MD5.hexdigest("#{name}:mongo:#{password}").encode(BSON::UTF8) end |
#options ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Loggable requires an options attribute. We don’t have any options hence provide this as a stub.
52 53 54 |
# File 'lib/mongo/auth/user.rb', line 52 def {} end |
#sasl_prepped_password ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Get the user’s stringprepped password for SCRAM-SHA-256.
130 131 132 133 134 135 136 137 138 139 |
# File 'lib/mongo/auth/user.rb', line 130 def sasl_prepped_password unless password raise Error::MissingPassword end @sasl_prepped_password ||= StringPrep.prepare(password, StringPrep::Profiles::SASL::MAPPINGS, StringPrep::Profiles::SASL::PROHIBITED, normalize: true, bidi: true).encode(BSON::UTF8) end |
#spec ⇒ Hash
Get the specification for the user, used in creation.
197 198 199 200 201 202 203 |
# File 'lib/mongo/auth/user.rb', line 197 def spec {roles: roles}.tap do |spec| if password spec[:pwd] = password end end end |