mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-11 15:04:52 +09:00
The role of a slave as a host for Factorio servers is not well reflected in its name and has caused confusion among users. Rename slave to host to better reflect its role as a host of Factorio servers.
55 lines
1.4 KiB
JavaScript
55 lines
1.4 KiB
JavaScript
/**
|
|
* @module
|
|
*/
|
|
"use strict";
|
|
const libPlugin = require("@clusterio/lib/plugin");
|
|
|
|
|
|
class InstancePlugin extends libPlugin.BaseInstancePlugin {
|
|
async init() {
|
|
if (!this.instance.config.get("factorio.enable_save_patching")) {
|
|
throw new Error("player_auth plugin requires save patching.");
|
|
}
|
|
|
|
this.instance.server.on("ipc-player_auth", event => this.handleEvent(event).catch(
|
|
err => this.logger.error(`Error handling event:\n${err.stack}`)
|
|
));
|
|
}
|
|
|
|
async handleEvent(event) {
|
|
if (event.type === "open_dialog") {
|
|
if (!this.host.connector.connected) {
|
|
await this.sendRcon(`/web-login error ${event.player} login is temporarily unavailable`);
|
|
return;
|
|
}
|
|
|
|
let response;
|
|
try {
|
|
response = await this.info.messages.fetchPlayerCode.send(this.instance, { player: event.player });
|
|
} catch (err) {
|
|
await this.sendRcon(`/web-login error ${event.player} ${err.message}`);
|
|
return;
|
|
}
|
|
await this.sendRcon(`/web-login open ${event.player} ${response.controller_url} ${response.player_code}`);
|
|
|
|
} else if (event.type === "set_verify_code") {
|
|
try {
|
|
await this.info.messages.setVerifyCode.send(this.instance, {
|
|
player: event.player,
|
|
verify_code: event.verify_code,
|
|
});
|
|
|
|
} catch (err) {
|
|
await this.sendRcon(`/web-login error ${event.player} ${err.message}`);
|
|
return;
|
|
}
|
|
|
|
await this.sendRcon(`/web-login code_set ${event.player}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
InstancePlugin,
|
|
};
|