agosh commited on
Commit
df527c9
·
verified ·
1 Parent(s): 15b7e8d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +10 -5
app.py CHANGED
@@ -2,12 +2,14 @@ import os
2
  import asyncio
3
  import json
4
  import pty
5
- import subprocess
6
- from fastapi import FastAPI, WebSocket, WebSocketDisconnect
7
  from fastapi.middleware.cors import CORSMiddleware
 
8
 
9
  app = FastAPI()
10
 
 
 
11
  app.add_middleware(
12
  CORSMiddleware,
13
  allow_origins=["*"],
@@ -16,13 +18,17 @@ app.add_middleware(
16
  )
17
 
18
  @app.websocket("/ws")
19
- async def websocket_endpoint(websocket: WebSocket):
 
 
 
 
 
20
  await websocket.accept()
21
 
22
  pid, fd = pty.fork()
23
 
24
  if pid == 0:
25
- # Processo filho: executa shell com variável TERM
26
  os.environ["TERM"] = "xterm-256color"
27
  shell = os.environ.get("SHELL", "/bin/bash")
28
  os.execvp(shell, [shell])
@@ -43,7 +49,6 @@ async def websocket_endpoint(websocket: WebSocket):
43
  try:
44
  while True:
45
  msg = await websocket.receive_text()
46
- # Tenta interpretar como JSON (para resize)
47
  try:
48
  data = json.loads(msg)
49
  if data.get("type") == "resize":
 
2
  import asyncio
3
  import json
4
  import pty
5
+ from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Query
 
6
  from fastapi.middleware.cors import CORSMiddleware
7
+ from starlette.websockets import WebSocketCloseReason
8
 
9
  app = FastAPI()
10
 
11
+ PASSWORD = os.getenv("TERMINAL_PASSWORD")
12
+
13
  app.add_middleware(
14
  CORSMiddleware,
15
  allow_origins=["*"],
 
18
  )
19
 
20
  @app.websocket("/ws")
21
+ async def websocket_endpoint(websocket: WebSocket, password: str = Query(default="")):
22
+ if password != PASSWORD:
23
+ await websocket.close(code=WebSocketCloseReason.POLICY_VIOLATION)
24
+ print("Conexão recusada: senha incorreta")
25
+ return
26
+
27
  await websocket.accept()
28
 
29
  pid, fd = pty.fork()
30
 
31
  if pid == 0:
 
32
  os.environ["TERM"] = "xterm-256color"
33
  shell = os.environ.get("SHELL", "/bin/bash")
34
  os.execvp(shell, [shell])
 
49
  try:
50
  while True:
51
  msg = await websocket.receive_text()
 
52
  try:
53
  data = json.loads(msg)
54
  if data.get("type") == "resize":