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.
65 lines
1.8 KiB
65 lines
1.8 KiB
var Sequence = require('./Sequence');
|
|
var Util = require('util');
|
|
var Packets = require('../packets');
|
|
var Auth = require('../Auth');
|
|
|
|
module.exports = Handshake;
|
|
Util.inherits(Handshake, Sequence);
|
|
function Handshake(config, callback) {
|
|
Sequence.call(this, callback);
|
|
|
|
this._config = config;
|
|
this._handshakeInitializationPacket = null;
|
|
}
|
|
|
|
Handshake.prototype.determinePacket = function(firstByte) {
|
|
if (firstByte === 0xff) {
|
|
return Packets.ErrorPacket;
|
|
}
|
|
|
|
if (!this._handshakeInitializationPacket) {
|
|
return Packets.HandshakeInitializationPacket;
|
|
}
|
|
|
|
if (firstByte === 0xfe) {
|
|
return Packets.UseOldPasswordPacket;
|
|
}
|
|
};
|
|
|
|
Handshake.prototype['HandshakeInitializationPacket'] = function(packet) {
|
|
this._handshakeInitializationPacket = packet;
|
|
|
|
this.emit('packet', new Packets.ClientAuthenticationPacket({
|
|
clientFlags : this._config.clientFlags,
|
|
maxPacketSize : this._config.maxPacketSize,
|
|
charsetNumber : this._config.charsetNumber,
|
|
user : this._config.user,
|
|
scrambleBuff : Auth.token(this._config.password, packet.scrambleBuff()),
|
|
database : this._config.database,
|
|
}));
|
|
};
|
|
|
|
Handshake.prototype['UseOldPasswordPacket'] = function(packet) {
|
|
if (!this._config.insecureAuth) {
|
|
var err = new Error(
|
|
'MySQL server is requesting the old and insecure pre-4.1 auth mechanism.' +
|
|
'Upgrade the user password or use the {insecureAuth: true} option.'
|
|
);
|
|
|
|
err.code = 'HANDSHAKE_INSECURE_AUTH';
|
|
err.fatal = true;
|
|
|
|
this.end(err);
|
|
return;
|
|
}
|
|
|
|
this.emit('packet', new Packets.OldPasswordPacket({
|
|
scrambleBuff : Auth.scramble323(this._handshakeInitializationPacket.scrambleBuff(), this._config.password),
|
|
}));
|
|
};
|
|
|
|
Handshake.prototype['ErrorPacket'] = function(packet) {
|
|
var err = this._packetToError(packet, true);
|
|
err.fatal = true;
|
|
this.end(err);
|
|
};
|