'use strict'; const retrieveBSON = require('../connection/utils').retrieveBSON; const AuthProvider = require('./auth_provider').AuthProvider; // TODO: can we get the Binary type from this.bson instead? const BSON = retrieveBSON(); const Binary = BSON.Binary; /** * Creates a new Plain authentication mechanism * * @extends AuthProvider */ class Plain extends AuthProvider { /** * Implementation of authentication for a single connection * @override */ _authenticateSingleConnection(sendAuthCommand, connection, credentials, callback) { const username = credentials.username; const password = credentials.password; const payload = new Binary(`\x00${username}\x00${password}`); const command = { saslStart: 1, mechanism: 'PLAIN', payload: payload, autoAuthorize: 1 }; sendAuthCommand(connection, '$external.$cmd', command, callback); } } module.exports = Plain;