84 lines
3.3 KiB
JavaScript
84 lines
3.3 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* postinstall.js - Aplica patches de compatibilidade no node-firebird
|
|
* após npm install, garantindo compatibilidade com Node.js 22+.
|
|
*/
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const connPath = path.resolve(__dirname, '../node_modules/node-firebird/lib/wire/connection.js');
|
|
|
|
if (!fs.existsSync(connPath)) {
|
|
console.log('[patch] connection.js not found, skipping');
|
|
process.exit(0);
|
|
}
|
|
|
|
let content = fs.readFileSync(connPath, 'utf8');
|
|
let patched = false;
|
|
|
|
// ============================================================
|
|
// Patch 1: SRP empty buffer (Firebird 3.0 Legacy_Auth)
|
|
// ============================================================
|
|
const srpOld = (
|
|
' // TODO : Fallback Srp256 to Srp ?\n' +
|
|
' /*if (!d.buffer) {\n' +
|
|
' cnx.sendOpContAuth(\n' +
|
|
' cnx.clientKeys.public.toString(16),\n' +
|
|
' DEFAULT_ENCODING,\n' +
|
|
' accept.pluginName\n' +
|
|
' );\n' +
|
|
'\n' +
|
|
' return cb(new Error(\'login\'));\n' +
|
|
' }*/\n' +
|
|
'\n' +
|
|
' // Check buffer contains salt\n' +
|
|
' var saltLen = d.buffer.readUInt16LE(0);'
|
|
);
|
|
|
|
const srpNew = (
|
|
' // No auth data from server - server accepted the connection\n' +
|
|
' // without requiring SRP. This happens with Firebird 3.0 when\n' +
|
|
' // the server already validated the client.\n' +
|
|
' if (!d || !d.buffer) {\n' +
|
|
" accept.authData = '';\n" +
|
|
" accept.sessionKey = '';\n" +
|
|
' } else {\n' +
|
|
' // Check buffer contains salt\n' +
|
|
' var saltLen = d.buffer.readUInt16LE(0);'
|
|
);
|
|
|
|
if (content.includes(srpOld)) {
|
|
content = content.replace(srpOld, srpNew);
|
|
patched = true;
|
|
console.log('[patch] Patch 1 (SRP) applied');
|
|
}
|
|
|
|
// ============================================================
|
|
// Patch 2: Missing closing brace (Node.js 22+ syntax)
|
|
// ============================================================
|
|
const syntaxOld = (
|
|
' accept.authData = proof.authData.toString(16);\n' +
|
|
' accept.sessionKey = proof.clientSessionKey;\n' +
|
|
' } else if (accept.pluginName === Const.AUTH_PLUGIN_LEGACY) {'
|
|
);
|
|
|
|
const syntaxNew = (
|
|
' accept.authData = proof.authData.toString(16);\n' +
|
|
' accept.sessionKey = proof.clientSessionKey;\n' +
|
|
' } // fecha o else do if (!d || !d.buffer)\n' +
|
|
' } else if (accept.pluginName === Const.AUTH_PLUGIN_LEGACY) {'
|
|
);
|
|
|
|
if (content.includes(syntaxOld)) {
|
|
content = content.replace(syntaxOld, syntaxNew);
|
|
patched = true;
|
|
console.log('[patch] Patch 2 (syntax Node22) applied');
|
|
}
|
|
|
|
if (patched) {
|
|
fs.writeFileSync(connPath, content, 'utf8');
|
|
console.log('[patch] node-firebird patched successfully');
|
|
} else {
|
|
console.log('[patch] node-firebird already patched or not needed');
|
|
}
|