UNPKG

node-expose-sspi-strict

Version:

Expose the Microsoft Windows SSPI interface in order to do NTLM and Kerberos authentication.

91 lines (90 loc) 3.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; exports.__esModule = true; exports.getMessageType = exports.toHex = exports.hexDump = void 0; var debug_1 = __importDefault(require("debug")); var base64_arraybuffer_1 = require("base64-arraybuffer"); var debug = debug_1["default"]('node-expose-sspi:misc'); function isPrintable(keycode) { var valid = (keycode > 47 && keycode < 58) || // number keys keycode === 32 || // spacebar & return key(s) (if you want to allow carriage returns) (keycode > 64 && keycode < 91) || // letter keys (keycode > 95 && keycode < 112) || // numpad keys (keycode > 185 && keycode < 193) || // ;=,-./` (in order) (keycode > 218 && keycode < 223); // [\]' (in order) return valid; } /** * Gives a string representation of binary data. * * @param {ArrayBuffer} buffer * @returns {string} the string representation. */ function hexDump(buffer) { var dataView = new DataView(buffer, 0); debug('buffer length', buffer.byteLength); var result = ''; var line = ''; for (var i = 0; i < buffer.byteLength; i++) { if (i % 16 === 0) { line = ''; var address = '0x' + i.toString(10).padStart(8, '0') + ':'; result += address; } var n = dataView.getUint8(i); result += n.toString(16).padStart(2, '0') + ' '; var c = '.'; if (isPrintable(n)) { c = String.fromCharCode(n); } line += c; if (i % 16 === 7) { result += ' '; } if (i === buffer.byteLength - 1) { var spaces = ' '; for (var j = 0; j < 15 - (i % 16); j++) { result += spaces; } } if (i % 16 === 15 || i === buffer.byteLength - 1) { result += ': ' + line + '\n'; continue; } } return result; } exports.hexDump = hexDump; function toHex(buffer) { var dataView = new DataView(buffer, 0); debug('buffer length', buffer.byteLength); var result = ''; for (var i = 0; i < buffer.byteLength; i++) { var n = dataView.getUint8(i); result += n.toString(16).padStart(2, '0'); } return result; } exports.toHex = toHex; function getMessageType(token) { var buffer = base64_arraybuffer_1.decode(token); var str = toHex(buffer); // manage NTLM if (str.includes('4e544c4d53535000' + '01')) { return 'NTLM_NEGOTIATE_01'; } if (str.includes('4e544c4d53535000' + '02')) { return 'NTLM_CHALLENGE_02'; } if (str.includes('4e544c4d53535000' + '03')) { return 'NTLM_AUTHENTICATE_03'; } // manage Kerberos: if (token.startsWith('YII')) { return 'Kerberos_1'; } return 'Kerberos_N'; } exports.getMessageType = getMessageType;