You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
1.3 KiB
JavaScript

"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 {
async auth(authContext) {
const { connection, credentials } = authContext;
if (!credentials) {
throw new error_1.MongoMissingCredentialsError('AuthContext must provide credentials.');
}
const { username, password, source } = credentials;
const { nonce } = await connection.commandAsync((0, utils_1.ns)(`${source}.$cmd`), { getnonce: 1 }, undefined);
const hashPassword = crypto
.createHash('md5')
.update(`${username}:mongo:${password}`, 'utf8')
.digest('hex');
// Final key
const key = crypto
.createHash('md5')
.update(`${nonce}${username}${hashPassword}`, 'utf8')
.digest('hex');
const authenticateCommand = {
authenticate: 1,
user: username,
nonce,
key
};
await connection.commandAsync((0, utils_1.ns)(`${source}.$cmd`), authenticateCommand, undefined);
}
}
exports.MongoCR = MongoCR;
//# sourceMappingURL=mongocr.js.map