2023-01-31 22:00:30 -05:00
|
|
|
import * as toml from 'toml';
|
2023-02-02 21:19:55 -05:00
|
|
|
import IConfig from './IConfig.js';
|
2023-01-31 22:00:30 -05:00
|
|
|
import * as fs from "fs";
|
2023-02-02 21:19:55 -05:00
|
|
|
import WSServer from './WSServer.js';
|
2024-04-23 09:57:02 -04:00
|
|
|
|
|
|
|
|
import { QemuVM, QemuVmDefinition } from '@cvmts/qemu';
|
|
|
|
|
|
|
|
|
|
import * as Shared from '@cvmts/shared';
|
2024-04-05 09:10:47 -04:00
|
|
|
import AuthManager from './AuthManager.js';
|
2023-02-24 22:54:28 -05:00
|
|
|
|
2024-04-23 09:57:02 -04:00
|
|
|
let logger = new Shared.Logger("CVMTS.Init");
|
|
|
|
|
|
|
|
|
|
logger.Info("CollabVM Server starting up");
|
2023-01-31 22:00:30 -05:00
|
|
|
|
|
|
|
|
// Parse the config file
|
|
|
|
|
|
|
|
|
|
var Config : IConfig;
|
|
|
|
|
|
|
|
|
|
if (!fs.existsSync("config.toml")) {
|
2024-04-23 09:57:02 -04:00
|
|
|
logger.Error("Fatal error: Config.toml not found. Please copy config.example.toml and fill out fields")
|
2023-01-31 22:00:30 -05:00
|
|
|
process.exit(1);
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
var configRaw = fs.readFileSync("config.toml").toString();
|
|
|
|
|
Config = toml.parse(configRaw);
|
|
|
|
|
} catch (e) {
|
2024-04-23 09:57:02 -04:00
|
|
|
logger.Error("Fatal error: Failed to read or parse the config file: {0}", (e as Error).message);
|
2023-01-31 22:00:30 -05:00
|
|
|
process.exit(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2023-02-02 21:19:55 -05:00
|
|
|
async function start() {
|
2023-09-12 00:25:57 +02:00
|
|
|
// Print a warning if qmpSockDir is set
|
|
|
|
|
// and the host OS is Windows, as this
|
|
|
|
|
// configuration will very likely not work.
|
|
|
|
|
if(process.platform === "win32" && Config.vm.qmpSockDir) {
|
2024-04-23 09:57:02 -04:00
|
|
|
logger.Warning("You appear to have the option 'qmpSockDir' enabled in the config.")
|
|
|
|
|
logger.Warning("This is not supported on Windows, and you will likely run into issues.");
|
|
|
|
|
logger.Warning("To remove this warning, use the qmpHost and qmpPort options instead.");
|
2023-09-12 00:25:57 +02:00
|
|
|
}
|
|
|
|
|
|
2024-04-05 09:10:47 -04:00
|
|
|
// Init the auth manager if enabled
|
2024-04-23 09:57:02 -04:00
|
|
|
let auth = Config.auth.enabled ? new AuthManager(Config.auth.apiEndpoint, Config.auth.secretKey) : null;
|
2024-04-05 09:10:47 -04:00
|
|
|
|
2023-02-02 21:19:55 -05:00
|
|
|
// Fire up the VM
|
2024-04-23 09:57:02 -04:00
|
|
|
let def: QemuVmDefinition = {
|
|
|
|
|
id: Config.collabvm.node,
|
|
|
|
|
command: Config.vm.qemuArgs
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var VM = new QemuVM(def);
|
2023-02-02 21:19:55 -05:00
|
|
|
await VM.Start();
|
|
|
|
|
|
|
|
|
|
// Start up the websocket server
|
2024-04-05 09:10:47 -04:00
|
|
|
var WS = new WSServer(Config, VM, auth);
|
2023-02-02 21:19:55 -05:00
|
|
|
WS.listen();
|
|
|
|
|
}
|
|
|
|
|
start();
|