Skip to content

Commit

Permalink
Tweaking config instructions and initialization - resolves #365
Browse files Browse the repository at this point in the history
Configuration instructions encourage the user to use a configuration
file called `development.yaml` (for self-build) or `production.yaml`
(for Docker build) but do not provide instructions to point Mjölnir
to read from these files.

This patch:
- allows Mjölnir to read `production.yaml` if available, without
	additional instructions needed;
- change the instructions for self-build to use `default.yaml`,
	which is read without additional instructions;
- add instructions in case the user wishes to use `development.yaml`;
- tweak the error message in case the config file isn't setup at
	all to clarify this for users.
  • Loading branch information
Yoric committed Sep 7, 2022
1 parent 4d5447c commit fdccffd
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 7 deletions.
21 changes: 19 additions & 2 deletions docs/setup_selfbuild.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```
32 changes: 28 additions & 4 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
2 changes: 1 addition & 1 deletion test/commands/UnbanBanCommandTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<any> => {
Expand Down

0 comments on commit fdccffd

Please sign in to comment.