123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 'use strict';
- // Resolves the default auth mechanism according to
- // https://github.com/mongodb/specifications/blob/master/source/auth/auth.rst
- function getDefaultAuthMechanism(ismaster) {
- if (ismaster) {
- // If ismaster contains saslSupportedMechs, use scram-sha-256
- // if it is available, else scram-sha-1
- if (Array.isArray(ismaster.saslSupportedMechs)) {
- return ismaster.saslSupportedMechs.indexOf('SCRAM-SHA-256') >= 0
- ? 'scram-sha-256'
- : 'scram-sha-1';
- }
- // Fallback to legacy selection method. If wire version >= 3, use scram-sha-1
- if (ismaster.maxWireVersion >= 3) {
- return 'scram-sha-1';
- }
- }
- // Default for wireprotocol < 3
- return 'mongocr';
- }
- /**
- * A representation of the credentials used by MongoDB
- * @class
- * @property {string} mechanism The method used to authenticate
- * @property {string} [username] The username used for authentication
- * @property {string} [password] The password used for authentication
- * @property {string} [source] The database that the user should authenticate against
- * @property {object} [mechanismProperties] Special properties used by some types of auth mechanisms
- */
- class MongoCredentials {
- /**
- * Creates a new MongoCredentials object
- * @param {object} [options]
- * @param {string} [options.username] The username used for authentication
- * @param {string} [options.password] The password used for authentication
- * @param {string} [options.source] The database that the user should authenticate against
- * @param {string} [options.mechanism] The method used to authenticate
- * @param {object} [options.mechanismProperties] Special properties used by some types of auth mechanisms
- */
- constructor(options) {
- options = options || {};
- this.username = options.username;
- this.password = options.password;
- this.source = options.source || options.db;
- this.mechanism = options.mechanism || 'default';
- this.mechanismProperties = options.mechanismProperties;
- }
- /**
- * Determines if two MongoCredentials objects are equivalent
- * @param {MongoCredentials} other another MongoCredentials object
- * @returns {boolean} true if the two objects are equal.
- */
- equals(other) {
- return (
- this.mechanism === other.mechanism &&
- this.username === other.username &&
- this.password === other.password &&
- this.source === other.source
- );
- }
- /**
- * If the authentication mechanism is set to "default", resolves the authMechanism
- * based on the server version and server supported sasl mechanisms.
- *
- * @param {Object} [ismaster] An ismaster response from the server
- */
- resolveAuthMechanism(ismaster) {
- // If the mechanism is not "default", then it does not need to be resolved
- if (this.mechanism.toLowerCase() === 'default') {
- this.mechanism = getDefaultAuthMechanism(ismaster);
- }
- }
- }
- module.exports = { MongoCredentials };
|