Basic functionality of remote npm

This commit is contained in:
Cooldude2606 committed 2025-04-29 01:40:22 +01:00
1 parent 47c5e0fabd
commit ff35b5c378
13 files changed
+496

No files matched your search

@@ -119,6 +119,9 @@ export default class ControlConnection extends BaseConnection {
this.handle(lib.UserDeleteRequest, this.handleUserDeleteRequest.bind(this));
this.handle(lib.UserBulkImportRequest, this.handleUserBulkImportRequest.bind(this));
this.handle(lib.UserBulkExportRequest, this.handleUserBulkExportRequest.bind(this));
this.handle(lib.RemoteUpdateRequest, this.handleRemoteUpdateRequest.bind(this));
this.handle(lib.PluginUpdateRequest, this.handlePluginUpdateRequest.bind(this));
this.handle(lib.PluginInstallRequest, this.handlePluginInstallRequest.bind(this));
this.handle(lib.DebugDumpWsRequest, this.handleDebugDumpWsRequest.bind(this));
this.handle(lib.ModPortalDownloadRequest, this.handleModPortalDownloadRequest.bind(this));
}
@@ -1049,6 +1052,34 @@ export default class ControlConnection extends BaseConnection {
return usersToSend;
}
async handleRemoteUpdateRequest(request: lib.RemoteUpdateRequest) {
if (!this._controller.config.get("controller.allow_remote_updates")) {
throw new lib.RequestError("Remote updates are disabled on this machine");
}
return lib.updatePackage("@clusterio/controller");
}
async handlePluginUpdateRequest(request: lib.PluginUpdateRequest) {
if (!this._controller.config.get("controller.allow_plugin_updates")) {
throw new lib.RequestError("Plugin updates are disabled on this machine");
}
if (!this._controller.pluginInfos.some(plugin => plugin.npmPackage === request.pluginPackage)) {
throw new lib.RequestError(`Plugin ${request.pluginPackage} is not installed on this machine`);
}
return lib.updatePackage(request.pluginPackage);
}
async handlePluginInstallRequest(request: lib.PluginInstallRequest) {
if (!this._controller.config.get("controller.allow_plugin_install")) {
throw new lib.RequestError("Plugin installs are disabled on this machine");
}
const npmRequest = await fetch(`https://www.npmjs.com/package/${encodeURI(request.pluginPackage)}`);
if (!npmRequest.ok) {
throw new lib.RequestError(`Unknown plugin: ${request.pluginPackage}`);
}
return lib.installPackage(request.pluginPackage);
}
async handleDebugDumpWsRequest(request: lib.DebugDumpWsRequest) {
this.ws_dumper = data => {
if (this.connector.connected) {