UNPKG

allproxy

Version:

AllProxy: MITM HTTP Debugging Tool.

97 lines 3.79 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Message_1 = require("../../../common/Message"); const HexFormatter_1 = __importDefault(require("./HexFormatter")); const MongoOpCode_1 = __importDefault(require("./MongoOpCode")); class SqlFormatter { constructor(reqBuf, rspBuf) { this.formattedRequest = this._formatRequest(reqBuf); this.formattedResponse = rspBuf ? this._formatResponse(rspBuf) : Message_1.NO_RESPONSE; this.command = 'Request unknown'; } getCommand() { return this.command; } /** * Get formatted request */ getRequest() { return this.formattedRequest; } /** * Get formatted response */ getResponse() { return this.formattedResponse; } _formatRequest(buf) { const packet = new MongoPacket(buf); const opCode = packet.getOpCode(); const requestID = packet.getRequestID(); const details = packet.getDetails(); return opCode + ' id=' + requestID + ' ' + details + '\n' + HexFormatter_1.default.format(buf) + '\n'; } _formatResponse(buf) { const packet = new MongoPacket(buf); const flags = packet.getResponseFlags(); const numberReturned = packet.getNumberReturned(); return `\nflags=${flags} documents=${numberReturned}\n\n${HexFormatter_1.default.format(buf)}\n`; } } exports.default = SqlFormatter; // Keep track of Mongo packets class MongoPacket { constructor(buf) { this.responseFlags = ''; this.numberReturned = 0; this.buf = buf; this.offset = 0; this.messageLength = buf.readInt32LE(0); this.requestID = buf.readInt32LE(4); this.responseTo = buf.readInt32LE(8); this.opCode = MongoOpCode_1.default.toString(buf.readInt32LE(12)); this.details = ''; switch (this.opCode) { case MongoOpCode_1.default.OP_UPDATE: case MongoOpCode_1.default.OP_INSERT: case MongoOpCode_1.default.OP_QUERY: case MongoOpCode_1.default.OP_GET_MORE: case MongoOpCode_1.default.OP_DELETE: this.details = cstring(20); // fullCollectionName break; case MongoOpCode_1.default.OP_REPLAY: { this.responseFlags = 'none'; const flags = buf.readInt32LE(16); switch (flags) { case 0: this.responseFlags = 'CursorNotFound'; break; case 1: this.responseFlags = 'QueryFailure'; break; case 2: this.responseFlags = 'ShardConfigState'; break; case 3: this.responseFlags = 'AwaitCapable'; break; } this.numberReturned = buf.readInt32LE(32); break; } } function cstring(start) { let end = start; for (; buf.readUInt8(end) !== 0; ++end) ; const str = buf.toString('utf8', start, end); return str; } } getOffset() { return this.offset; } getMessageLength() { return this.messageLength; } getRequestID() { return this.requestID; } getResponseTo() { return this.requestID; } getOpCode() { return this.opCode; } getDetails() { return this.details; } getResponseFlags() { return this.responseFlags; } getNumberReturned() { return this.numberReturned; } } //# sourceMappingURL=MongoFormatter.js.map