69 lines
2.3 KiB
JavaScript
69 lines
2.3 KiB
JavaScript
var ClientConstants = require('../constants/client.js');
|
|
var Charsets = require('../constants/charsets.js');
|
|
var Packet = require('../packets/packet.js');
|
|
|
|
var auth41 = require('../auth_41.js');
|
|
|
|
function HandshakeResponse(handshake)
|
|
{
|
|
this.user = handshake.user || '';
|
|
this.database = handshake.database || '';
|
|
this.password = handshake.password || '';
|
|
this.passwordSha1 = handshake.passwordSha1;
|
|
this.authPluginData1 = handshake.authPluginData1;
|
|
this.authPluginData2 = handshake.authPluginData2;
|
|
this.compress = handshake.compress;
|
|
this.clientFlags = handshake.flags;
|
|
// TODO: pre-4.1 auth support
|
|
var authToken;
|
|
if (this.passwordSha1)
|
|
authToken = auth41.calculateTokenFromPasswordSha(this.passwordSha1, this.authPluginData1, this.authPluginData2);
|
|
else
|
|
authToken = auth41.calculateToken(this.password, this.authPluginData1, this.authPluginData2);
|
|
this.authToken = authToken;
|
|
this.charsetNumber = handshake.charsetNumber;
|
|
}
|
|
|
|
HandshakeResponse.fromPacket = function(packet)
|
|
{
|
|
var args = {};
|
|
//packet.skip(4);
|
|
args.clientFlags = packet.readInt32();
|
|
args.maxPacketSize = packet.readInt32();
|
|
args.charsetNumber = packet.readInt8();
|
|
packet.skip(23);
|
|
args.user = packet.readNullTerminatedString();
|
|
var authTokenLength = packet.readInt8();
|
|
args.authToken = packet.readBuffer(authTokenLength);
|
|
args.database = packet.readNullTerminatedString();
|
|
//return new HandshakeResponse(args);
|
|
return args;
|
|
};
|
|
|
|
HandshakeResponse.prototype.toPacket = function()
|
|
{
|
|
if (typeof this.user != 'string')
|
|
throw new Error('"user" connection config prperty must be a string');
|
|
if (typeof this.database != 'string')
|
|
throw new Error('"database" connection config prperty must be a string');
|
|
|
|
var length = 36 + 23 + this.user.length + this.database.length;
|
|
|
|
var buffer = new Buffer(length);
|
|
var packet = new Packet(0, buffer, 0, length);
|
|
buffer.fill(0);
|
|
packet.offset = 4;
|
|
|
|
packet.writeInt32(this.clientFlags);
|
|
packet.writeInt32(0); // max packet size. todo: move to config
|
|
packet.writeInt8(this.charsetNumber);
|
|
packet.skip(23);
|
|
packet.writeNullTerminatedString(this.user);
|
|
packet.writeInt8(this.authToken.length);
|
|
packet.writeBuffer(this.authToken);
|
|
packet.writeNullTerminatedString(this.database);
|
|
return packet;
|
|
};
|
|
|
|
module.exports = HandshakeResponse;
|