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
						
					
					
				| "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
 |