109 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| // @ts-check
 | |
| 
 | |
| import { Server as HttpServer } from "http";
 | |
| import path from "path";
 | |
| import fs from "fs";
 | |
| import { Server } from "socket.io";
 | |
| import { parse } from "url";
 | |
| import suSocketAuth from "../package-shared/functions/backend/suSocketAuth";
 | |
| import parseCookies from "@/package-shared/utils/backend/parseCookies";
 | |
| 
 | |
| export default async function serverSocket(server: HttpServer) {
 | |
|     const io = new Server(server);
 | |
| 
 | |
|     io.on("connection", async (socket) => {
 | |
|         const req = socket.request;
 | |
|         const parsedUrl = parse(req.url || "", true);
 | |
|         const { pathname, query, href, search } = parsedUrl;
 | |
|         const cookie = req.headers.cookie;
 | |
|         const paradigm = req.headers["x-socket-paradigm"];
 | |
| 
 | |
|         const parsedCookies = parseCookies({ request: req });
 | |
| 
 | |
|         const suAdminUser = await suSocketAuth(req);
 | |
| 
 | |
|         const logPath = path.resolve(__dirname, "../log.log");
 | |
| 
 | |
|         if (!suAdminUser) return;
 | |
| 
 | |
|         switch (paradigm) {
 | |
|             case "Console":
 | |
|                 try {
 | |
|                     socket.emit("console", "Welcome");
 | |
| 
 | |
|                     process.stdin.on("data", (data) => {
 | |
|                         console.log("STDOUT data =>", data.toString());
 | |
|                     });
 | |
| 
 | |
|                     const originalConsoleLog = console.log;
 | |
|                     console.log = function (...args) {
 | |
|                         const logMessage = args
 | |
|                             .map((arg) =>
 | |
|                                 typeof arg === "object"
 | |
|                                     ? JSON.stringify(arg)
 | |
|                                     : arg
 | |
|                             )
 | |
|                             .join(" ");
 | |
|                         socket.emit("console", logMessage + "\n\r");
 | |
| 
 | |
|                         originalConsoleLog.apply(console, args);
 | |
|                     };
 | |
| 
 | |
|                     socket.on("log", (log) => {
 | |
|                         console.log(log);
 | |
|                     });
 | |
| 
 | |
|                     socket.on("get-log", (log) => {
 | |
|                         if (fs.existsSync(logPath)) {
 | |
|                             socket.emit(
 | |
|                                 "console-log",
 | |
|                                 fs.readFileSync(logPath, "utf-8")
 | |
|                             );
 | |
|                         }
 | |
|                     });
 | |
| 
 | |
|                     //////////////////////////////////////////
 | |
|                     //////////////////////////////////////////
 | |
|                     //////////////////////////////////////////
 | |
| 
 | |
|                     if (process.env.NEXT_PUBLIC_DSQL_LOCAL) {
 | |
|                         const PAUSE = "\x13";
 | |
|                         const CANCEL = "\x03";
 | |
|                         const RESUME = "\x11";
 | |
| 
 | |
|                         // const ptyProcess = pty.spawn("bash", [], {
 | |
|                         //     name: "xterm-color",
 | |
|                         // });
 | |
| 
 | |
|                         // socket.on("shell", (message) => {
 | |
|                         //     ptyProcess.write(message);
 | |
|                         // });
 | |
| 
 | |
|                         // ptyProcess.onData((data) => {
 | |
|                         //     socket.emit("shell", data);
 | |
|                         // });
 | |
| 
 | |
|                         // socket.on("disconnect", () => {
 | |
|                         //     ptyProcess.kill("SIGTERM");
 | |
|                         // });
 | |
|                     }
 | |
| 
 | |
|                     socket.on("clear-log", (message) => {
 | |
|                         if (fs.existsSync(logPath))
 | |
|                             fs.writeFileSync(logPath, "", "utf-8");
 | |
|                     });
 | |
|                 } catch (error: any) {
 | |
|                     console.log("Error in Console socket =>", error.message);
 | |
|                 }
 | |
|                 break;
 | |
| 
 | |
|             default:
 | |
|                 break;
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     io.on("error", (err) => {
 | |
|         console.log("Socket Server Error =>", err);
 | |
|     });
 | |
| }
 | 
