Download server.js from agosh/sps: direct link, hf CLI and curl.
- Browser
- Download file 1.58 kB
-
https://huggingface.co/spaces/agosh/sps/resolve/main/server.js
- Command line
-
hf download hf://spaces/agosh/sps/server.js
-
curl -L -o server.js https://huggingface.co/spaces/agosh/sps/resolve/main/server.js
1.58 kB
| const http = require('http'); | |
| const WebSocket = require('ws'); | |
| const pty = require('node-pty'); | |
| const url = require('url'); | |
| const port = 8000; | |
| const requiredPassword = process.env.TERMINAL_PASSWORD; | |
| const server = http.createServer(); | |
| const wss = new WebSocket.Server({ server }); | |
| wss.on('connection', (ws, req) => { | |
| const query = url.parse(req.url, true).query; | |
| const password = query.password; | |
| if (password !== requiredPassword) { | |
| ws.send('Erro: Senha incorreta'); | |
| ws.close(); | |
| return; | |
| } | |
| const shell = '/bin/fish'; | |
| const cwd = process.env.HOME || '/tmp'; | |
| const ptyProcess = pty.spawn(shell, [], { | |
| name: 'xterm-256color', | |
| cols: 80, | |
| rows: 24, | |
| cwd: cwd, | |
| env: { | |
| ...process.env, | |
| TERM: 'xterm-256color', | |
| COLORTERM: 'truecolor', | |
| HOME: process.env.HOME || '/home/node' | |
| } | |
| }); | |
| console.log(`Terminal iniciado (PID: ${ptyProcess.pid})`); | |
| ptyProcess.on('data', (data) => { | |
| if (ws.readyState === WebSocket.OPEN) { | |
| ws.send(data); | |
| } | |
| }); | |
| ws.on('message', (msg) => { | |
| ptyProcess.write(msg.toString()); | |
| }); | |
| ws.on('resize', (size) => { | |
| try { | |
| ptyProcess.resize(size.cols || 80, size.rows || 24); | |
| } catch (e) { | |
| console.error('Erro ao redimensionar:', e); | |
| } | |
| }); | |
| ws.on('close', () => { | |
| console.log('Conexão encerrada'); | |
| ptyProcess.kill(); | |
| }); | |
| ws.on('error', (err) => { | |
| console.error('Erro na conexão WebSocket:', err); | |
| ptyProcess.kill(); | |
| }); | |
| }); | |
| server.listen(port, () => { | |
| console.log(`Servidor rodando na porta ${port}`); | |
| }); |