diff --git a/docs/setup_selfbuild.md b/docs/setup_selfbuild.md index 908078ae..82f1aa0d 100644 --- a/docs/setup_selfbuild.md +++ b/docs/setup_selfbuild.md @@ -7,9 +7,26 @@ cd mjolnir yarn install yarn build -# Copy and edit the config. It *is* recommended to change the data path. +# Edit the config. +# You probably should change `dataPath`. +nano config/default.yaml + +node lib/index.js +``` + +Or, if you wish to use a different configuration file, e.g. `development.yaml` + +```bash +git clone https://github.com/matrix-org/mjolnir.git +cd mjolnir + +yarn install +yarn build + +# Edit the config. +# You probably should change `dataPath`. cp config/default.yaml config/development.yaml nano config/development.yaml -node lib/index.js +NODE_ENV=development node lib/index.js ``` diff --git a/src/config.ts b/src/config.ts index dad9ee46..a4445a4a 100644 --- a/src/config.ts +++ b/src/config.ts @@ -170,12 +170,36 @@ const defaultConfig: IConfig = { }, }; -export function read(): IConfig { +export function read(checkConfigured = true): IConfig { const config_dir = process.env.NODE_CONFIG_DIR || "./config"; - const config_file = `${process.env.NODE_ENV || "default"}.yaml` - - const content = fs.readFileSync(path.join(config_dir, config_file), "utf8"); + let config_path; + for (let key of [ + process.env.NODE_ENV, + "production", + "default" + ]) { + if (!key) { + continue; + } + const candidate_path = path.join(config_dir, `${key}.yaml`); + if (!fs.existsSync(candidate_path)) { + continue; + } + config_path = candidate_path; + break; + } + if (!config_path) { + throw new Error("Could not find any valid configuration file"); + } + const content = fs.readFileSync(config_path, "utf8"); const parsed = load(content); const config = {...defaultConfig, ...(parsed as object)} as IConfig; + if (checkConfigured && config.accessToken === "YOUR_TOKEN_HERE") { + // A small check to simplify the error message in case + // the configuration file hasn't been modified. + throw new Error(`Invalid access token in configuration file ${config_path}. ` + + "This usually indicates that Mjölnir's configuration file was not setup " + + "or that Mjölnir is using the wrong configuration file."); + } return config; } diff --git a/test/commands/UnbanBanCommandTest.ts b/test/commands/UnbanBanCommandTest.ts index f19c897e..f0184a38 100644 --- a/test/commands/UnbanBanCommandTest.ts +++ b/test/commands/UnbanBanCommandTest.ts @@ -22,7 +22,7 @@ import { read as configRead } from "../../src/config"; import { RULE_ROOM, RULE_SERVER, RULE_USER } from "../../src/models/ListRule"; function createTestMjolnir(defaultShortcode: string|null = null): Mjolnir { - const config = configRead(); + const config = configRead(false); const client = { // Mock `MatrixClient.getAccountData` . getAccountData: (eventType: string): Promise => {