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
							 |