UNPKG

cgi-core

Version:

Lightweight, zero-dependency middleware for hosting CGI scripts with HTTP/1.1 support

66 lines (58 loc) 2.14 kB
// Copyright (c) 2024-2025 lfortin // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. import { randomUUID } from "node:crypto"; import express from "express"; import { createHandler } from "../cgi-core.mjs"; const port = process.env.PORT || 3001; const config = { urlPath: "/cgi-bin", filePath: "./cgi-bin", extensions: { "/usr/bin/perl": ["pl", "cgi"], "/usr/bin/python": ["py"], "/usr/bin/ruby": ["rb"], "/bin/bash": ["sh"], "/usr/local/bin/node": ["js", "node"], }, indexExtension: "cgi", debugOutput: true, logRequests: true, maxBuffer: 4 * 1024 ** 2, requestChunkSize: 4 * 1024, responseChunkSize: 4 * 1024, requestTimeout: 30000, env: (env, req) => { return { REMOTE_AGENT: req.headers["user-agent"], UNIQUE_ID: randomUUID(), }; }, }; const app = express(); app.all("/cgi-bin*", createHandler(config)); app.use((req, res) => { res.type("html"); res.status(200); res.send("<html><body>outside of url path /cgi-bin</body></html>"); }); app.listen(port, () => { console.log(`go to http://127.0.0.1:${port}/cgi-bin/env.js ;)`); });