UNPKG

srcds-log-receiver

Version:
120 lines 4.68 kB
"use strict"; exports.__esModule = true; var logs = require("./index"); var moment = require("moment"); var packetHeader = new Buffer([255, 255, 255, 255]), magicBytePassword = 0x53, magicByteNoPassword = 0x52, magicStringEndHeader = "L "; function getPassword(message) { var start = packetHeader.length + 1; var end = message.indexOf(magicStringEndHeader); if (end < 0) { return null; } else { return message.slice(start, end); } } function stringifyAddress(address) { return address.address + ":" + address.port; } var LogMessageConstructor = (function () { function LogMessageConstructor(opts) { this.serverInfo = {}; this.opts = opts; this.buildServerInfo(opts); } LogMessageConstructor.prototype.buildServerInfo = function (opts) { var _this = this; opts.definedSources.forEach(function (v) { _this.serverInfo[stringifyAddress(v)] = v; }); }; LogMessageConstructor.prototype.GetLogMessage = function (message, senderInfo) { var logMessage = { isValid: false }; if (message.length < 16) { logMessage.invalidReason = InvalidReason.TooShort; return logMessage; } if (!this.validateHeader(message)) { logMessage.invalidReason = InvalidReason.BadHeader; return logMessage; } if (!this.validatePassword(logMessage, message, senderInfo)) { return logMessage; } if (!this.extractPayload(logMessage, message)) { return logMessage; } logMessage.isValid = true; logMessage.receivedAt = moment(); logMessage.original = message; logMessage.receivedFrom = senderInfo; return logMessage; }; LogMessageConstructor.prototype.validateHeader = function (message) { return message.slice(0, 4).compare(packetHeader) === 0; }; LogMessageConstructor.prototype.validatePassword = function (logMessage, message, senderInfo) { var packetType = message[4]; if (packetType == magicBytePassword) { logMessage.packetType = logs.LogType.Password; var serverString = stringifyAddress(senderInfo); var server = this.serverInfo[serverString]; var providedPass = getPassword(message); if (providedPass) { if (server) { if (server.password == providedPass.toString()) { logMessage.password = server.password; return true; } else { logMessage.invalidReason = InvalidReason.WrongPassword; return false; } } else if (this.opts.defaultPassword == providedPass.toString()) { logMessage.password = providedPass.toString(); return true; } else { logMessage.invalidReason = InvalidReason.WrongPassword; return false; } } else { logMessage.invalidReason = InvalidReason.NoPassword; return false; } } else if (packetType == magicByteNoPassword) { logMessage.packetType = logs.LogType.NoPassword; if (this.opts.requirePassword) return false; return true; } else { return false; } }; LogMessageConstructor.prototype.extractPayload = function (logMessage, message) { var messageStart = message.indexOf(magicStringEndHeader); if (messageStart < 0) { logMessage.invalidReason = InvalidReason.NoPayload; return false; } messageStart += magicStringEndHeader.length; logMessage.message = message.slice(messageStart, message.length - 2).toString(); return true; }; return LogMessageConstructor; }()); exports.LogMessageConstructor = LogMessageConstructor; var InvalidReason; (function (InvalidReason) { InvalidReason[InvalidReason["TooShort"] = 0] = "TooShort"; InvalidReason[InvalidReason["BadHeader"] = 1] = "BadHeader"; InvalidReason[InvalidReason["NoType"] = 2] = "NoType"; InvalidReason[InvalidReason["NoPassword"] = 3] = "NoPassword"; InvalidReason[InvalidReason["WrongPassword"] = 4] = "WrongPassword"; InvalidReason[InvalidReason["NoPayload"] = 5] = "NoPayload"; })(InvalidReason = exports.InvalidReason || (exports.InvalidReason = {})); //# sourceMappingURL=PacketParser.js.map