Files
flying-jib/plugins/fj-bind-guard.js
T
2026-07-30 23:18:12 -04:00

50 lines
1.4 KiB
JavaScript

'use strict'
/**
* Flying Squid plugin: refuse non-loopback Minecraft TCP bind (ADR-0005).
*/
const { isLoopbackAddress } = require('../lib/bind-guard')
module.exports.server = function (serv, settings) {
// Force options even if caller misconfigured
if (settings) {
settings.host = '127.0.0.1'
}
const check = () => {
try {
const socketServer = serv._server && serv._server.socketServer
if (!socketServer || typeof socketServer.address !== 'function') return
const addr = socketServer.address()
if (!addr || typeof addr === 'string') return
if (!isLoopbackAddress(addr.address)) {
const msg = `fj-bind-guard: non-loopback listen ${addr.address}:${addr.port} — shutting down`
serv.err(msg)
try {
serv._server.close()
} catch {
// ignore
}
throw new Error(msg)
} else {
serv.info(`fj-bind-guard: OK loopback ${addr.address}:${addr.port}`)
}
} catch (err) {
if (err && err.message && err.message.includes('fj-bind-guard')) throw err
// address may not be ready yet
}
}
serv.on('listening', check)
// Also check shortly after plugins ready
if (serv.pluginsReady) {
setTimeout(check, 50)
} else {
serv.once('pluginsReady', () => setTimeout(check, 50))
}
}
module.exports.player = function () {}
module.exports.entity = function () {}