""" ============================================ 🔥 RUHI-CORE v1.0.0 - COMPLETE PaaS Engine ============================================ Module A (Engine) + Module B (Files) + Module C (Dashboard) All combined into one powerful file. """ import os import json from contextlib import asynccontextmanager from pathlib import Path from fastapi import FastAPI, Request, WebSocket, WebSocketDisconnect, Depends from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse, JSONResponse, FileResponse from loguru import logger from core.config import settings from core.orchestrator import orchestrator from core.process_manager import process_manager from core.metrics_collector import metrics_collector from core.websocket_handler import ws_manager from core.reverse_proxy import reverse_proxy from core.auth import get_current_user, verify_token from api.routes import auth, services, metrics, terminal, files from api.middleware.ip_whitelist import IPWhitelistMiddleware @asynccontextmanager async def lifespan(app: FastAPI): logger.info("🚀 RUHI-CORE Engine starting...") await orchestrator.startup() yield logger.info("🛑 RUHI-CORE Engine shutting down...") await orchestrator.shutdown() app = FastAPI( title="RUHI-CORE", description="Premium PaaS Platform", version="1.0.0", lifespan=lifespan, docs_url="/api/docs", redoc_url="/api/redoc" ) app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"]) app.add_middleware(IPWhitelistMiddleware) app.include_router(auth.router) app.include_router(services.router) app.include_router(metrics.router) app.include_router(terminal.router) app.include_router(files.router) # WebSocket endpoints @app.websocket("/ws/dashboard") async def dashboard_websocket(websocket: WebSocket): token = websocket.query_params.get("token", "") try: verify_token(token) except: await websocket.close(code=4001); return await ws_manager.connect_dashboard(websocket) try: while True: await websocket.receive_text() except WebSocketDisconnect: await ws_manager.disconnect_dashboard(websocket) except: await ws_manager.disconnect_dashboard(websocket) @app.websocket("/ws/logs/{service_id}") async def service_logs_websocket(websocket: WebSocket, service_id: str): token = websocket.query_params.get("token", "") try: verify_token(token) except: await websocket.close(code=4001); return service = process_manager.get_service(service_id) if not service: await websocket.close(code=4004); return await ws_manager.connect_logs(websocket, service_id) try: existing = list(service.log_buffer) await websocket.send_text(json.dumps({"type": "history", "logs": existing})) while True: await websocket.receive_text() except WebSocketDisconnect: await ws_manager.disconnect_logs(websocket, service_id) except: await ws_manager.disconnect_logs(websocket, service_id) @app.api_route("/proxy/{service_name}/{path:path}", methods=["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD"]) async def proxy_to_service(service_name: str, path: str, request: Request): return await reverse_proxy.proxy_request(service_name, path, request) @app.get("/health") async def health_check(): return {"status": "healthy", "platform": "RUHI-CORE", "version": "1.0.0"} @app.on_event("startup") async def create_default_config(): config_file = settings.CONFIG_DIR / "ruhi.yaml" if not config_file.exists(): config_file.parent.mkdir(parents=True, exist_ok=True) config_file.write_text("platform: RUHI-CORE\nversion: 1.0.0\n") # ============================================================ # 🔥🔥🔥 MEGA PREMIUM DASHBOARD - MODULE C 🔥🔥🔥 # Cyberpunk Dark Mode | Glassmorphism | Animated | God-Level UI # ============================================================ @app.get("/", response_class=HTMLResponse) async def serve_dashboard(): return HTMLResponse(content=MEGA_DASHBOARD_HTML) MEGA_DASHBOARD_HTML = ''' RUHI-CORE | Premium PaaS Engine
Username
👤
Password
🔑
RUHI-CORE/Dashboard
Connecting
00:00:00

🚀 Create New Service

NameSizeModifiedPermsActions
Loading...
📄No file open-
Open a file to edit

📦 Drag & Drop Deploy

📦

Drop your ZIP here

or click to browse

Supports: .zip .tar.gz .tar .7z .rar • Max 500MB
1
Uploading archive...
2
Extracting files...
3
Detecting project type...
4
Installing dependencies...
5
Launching service...
📋 Logs
Select a service above
ruhi-core@engine ~ $
Welcome to RUHI-CORE Terminal ⚡\\n\\nType commands below. Use "clear" to clear.\\n

🏗️ Process Tree

Loading...

⚙️ System Info

Loading...

🔧 Quick Actions

'''