123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // This file was modified by Oracle on September 21, 2021.
- // The changes involve saving additional authentication factor passwords
- // in the command scope and enabling multi-factor authentication in the
- // client-side when the server supports it.
- // Modifications copyright (c) 2021, Oracle and/or its affiliates.
- 'use strict';
- const Command = require('./command.js');
- const Packets = require('../packets/index.js');
- const ClientConstants = require('../constants/client');
- const ClientHandshake = require('./client_handshake.js');
- const CharsetToEncoding = require('../constants/charset_encodings.js');
- class ChangeUser extends Command {
- constructor(options, callback) {
- super();
- this.onResult = callback;
- this.user = options.user;
- this.password = options.password;
- // "password1" is an alias of "password"
- this.password1 = options.password;
- this.password2 = options.password2;
- this.password3 = options.password3;
- this.database = options.database;
- this.passwordSha1 = options.passwordSha1;
- this.charsetNumber = options.charsetNumber;
- this.currentConfig = options.currentConfig;
- this.authenticationFactor = 0;
- }
- start(packet, connection) {
- const newPacket = new Packets.ChangeUser({
- flags: connection.config.clientFlags,
- user: this.user,
- database: this.database,
- charsetNumber: this.charsetNumber,
- password: this.password,
- passwordSha1: this.passwordSha1,
- authPluginData1: connection._handshakePacket.authPluginData1,
- authPluginData2: connection._handshakePacket.authPluginData2
- });
- this.currentConfig.user = this.user;
- this.currentConfig.password = this.password;
- this.currentConfig.database = this.database;
- this.currentConfig.charsetNumber = this.charsetNumber;
- connection.clientEncoding = CharsetToEncoding[this.charsetNumber];
- // clear prepared statements cache as all statements become invalid after changeUser
- connection._statements.clear();
- connection.writePacket(newPacket.toPacket());
- // check if the server supports multi-factor authentication
- const multiFactorAuthentication = connection.serverCapabilityFlags & ClientConstants.MULTI_FACTOR_AUTHENTICATION;
- if (multiFactorAuthentication) {
- // if the server supports multi-factor authentication, we enable it in
- // the client
- this.authenticationFactor = 1;
- }
- return ChangeUser.prototype.handshakeResult;
- }
- }
- ChangeUser.prototype.handshakeResult =
- ClientHandshake.prototype.handshakeResult;
- ChangeUser.prototype.calculateNativePasswordAuthToken =
- ClientHandshake.prototype.calculateNativePasswordAuthToken;
- module.exports = ChangeUser;
|