You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					44 lines
				
				1.7 KiB
			
		
		
			
		
	
	
					44 lines
				
				1.7 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | Object.defineProperty(exports, "__esModule", { value: true }); | ||
|  | exports.MongoCR = void 0; | ||
|  | const crypto = require("crypto"); | ||
|  | const error_1 = require("../../error"); | ||
|  | const utils_1 = require("../../utils"); | ||
|  | const auth_provider_1 = require("./auth_provider"); | ||
|  | class MongoCR extends auth_provider_1.AuthProvider { | ||
|  |     auth(authContext, callback) { | ||
|  |         const { connection, credentials } = authContext; | ||
|  |         if (!credentials) { | ||
|  |             return callback(new error_1.MongoMissingCredentialsError('AuthContext must provide credentials.')); | ||
|  |         } | ||
|  |         const username = credentials.username; | ||
|  |         const password = credentials.password; | ||
|  |         const source = credentials.source; | ||
|  |         connection.command((0, utils_1.ns)(`${source}.$cmd`), { getnonce: 1 }, undefined, (err, r) => { | ||
|  |             let nonce = null; | ||
|  |             let key = null; | ||
|  |             // Get nonce
 | ||
|  |             if (err == null) { | ||
|  |                 nonce = r.nonce; | ||
|  |                 // Use node md5 generator
 | ||
|  |                 let md5 = crypto.createHash('md5'); | ||
|  |                 // Generate keys used for authentication
 | ||
|  |                 md5.update(`${username}:mongo:${password}`, 'utf8'); | ||
|  |                 const hash_password = md5.digest('hex'); | ||
|  |                 // Final key
 | ||
|  |                 md5 = crypto.createHash('md5'); | ||
|  |                 md5.update(nonce + username + hash_password, 'utf8'); | ||
|  |                 key = md5.digest('hex'); | ||
|  |             } | ||
|  |             const authenticateCommand = { | ||
|  |                 authenticate: 1, | ||
|  |                 user: username, | ||
|  |                 nonce, | ||
|  |                 key | ||
|  |             }; | ||
|  |             connection.command((0, utils_1.ns)(`${source}.$cmd`), authenticateCommand, undefined, callback); | ||
|  |         }); | ||
|  |     } | ||
|  | } | ||
|  | exports.MongoCR = MongoCR; | ||
|  | //# sourceMappingURL=mongocr.js.map
 |