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