-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
84 lines (62 loc) · 2.23 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# main.py
import json
import time
import uvicorn
from fastapi import FastAPI, Request, WebSocket, WebSocketDisconnect
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from pyngrok import ngrok
from starlette.staticfiles import StaticFiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="./public/static"), name="static")
# Directorio de plantillas
templates = Jinja2Templates(directory="templates")
# Lista para almacenar las peticiones recibidas
peticiones_recibidas = []
# Lista de websockets conectados
websockets_conectados = []
# Iniciar el túnel ngrok en el puerto 8000
public_url = ngrok.connect(8081).public_url
print(f" * Túnel ngrok establecido en {public_url}")
@app.post("/webhook")
async def webhook(request: Request):
# Obtener los detalles de la petición
headers = dict(request.headers)
body = await request.body()
body_str = body.decode('utf-8')
try:
json_body = await request.json()
except:
json_body = None
info_peticion = {
'headers': headers,
'method': request.method,
'body': body_str,
'json': json_body,
'client': request.client.host,
'datetime': time.strftime("%Y-%m-%d %H:%M:%S")
}
# Almacenar la petición
peticiones_recibidas.insert(0, info_peticion)
# Notificar a los websockets conectados
data = json.dumps({'event': 'new_request', 'data': info_peticion})
for websocket in websockets_conectados:
await websocket.send_text(data)
return {"message": "Webhook recibido"}
@app.get("/", response_class=HTMLResponse)
async def get_dashboard(request: Request):
return templates.TemplateResponse("index.html", {"request": request, "public_url": public_url})
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
websockets_conectados.append(websocket)
try:
while True:
await websocket.receive_text() # Mantener la conexión abierta
except WebSocketDisconnect:
websockets_conectados.remove(websocket)
@app.get("/api/peticiones")
async def get_peticiones():
return peticiones_recibidas
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8081)