Path: blob/master/src/packages/project/servers/websocketfs.ts
1447 views
/*1Start a websocketfs server.2*/34import { join } from "node:path";5import type { Server } from "http";6import { Server as SftpServer } from "websocket-sftp";7import { getLogger } from "@cocalc/project/logger";8import { WebSocketServer } from "ws";9import { parse } from "url";1011const log = getLogger("cocalc:websocketfs");1213export default function initWebsocketFs(14server: Server,15basePath: string,16): void {17const path = join(basePath, ".smc", "websocketfs");18log.info(`Initializing websocketfs filesystem server`);1920const wss = new WebSocketServer({ noServer: true });2122const sftpServer = new SftpServer({23virtualRoot: process.env.HOME,24wss,25});2627process.on("exit", () => {28sftpServer.end();29});3031server.on("upgrade", (request, socket, head) => {32const { pathname } = parse(request.url ?? "");33// log.info("Got upgrade request for ", pathname);34if (pathname === path) {35log.info("creating new websocketfs handler");36wss.handleUpgrade(request, socket, head, (ws) => {37wss.emit("connection", ws, request);38});39}40});41}424344