mirror of
https://github.com/matrix-org/mjolnir.git
synced 2024-10-01 01:36:06 -04:00
Config fixes (#432)
* Use the npm package `config` to load the config. This is what was used prior to https://github.com/matrix-org/mjolnir/pull/347. It was a nice idea motivated to drop a dependency that was confusing. It was just never followed through and was underestimated how much disruption it would cause. It was also believed that the library would mean there could only ever be one global copy of the config, It was followed up by: https://github.com/matrix-org/mjolnir/pull/369 https://github.com/matrix-org/mjolnir/pull/357 https://github.com/matrix-org/mjolnir/pull/429 https://github.com/matrix-org/mjolnir/pull/397/files https://github.com/matrix-org/mjolnir/issues/365 For simplicity sake I am reinstating the library. The practice of loading default.yaml by default is also dangerous and has led to issues multiple times in #mjolnir:matrix.org. It is a sample and not a default. In a following commit I will be adding the ability to specify the config to use from the cli. * Allow config to be specified with an explicit cli argument. * Update doc to transition away from old config handling
This commit is contained in:
parent
b2c0e23e36
commit
333c55e18c
@ -25,7 +25,7 @@ In short, please make sure that the mjolnir configuration exists under `./config
|
|||||||
Run the following command in your terminal, replace `./mjolnir` with the root directory of your config, if it is in another spot.
|
Run the following command in your terminal, replace `./mjolnir` with the root directory of your config, if it is in another spot.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run --rm -it -v ./mjolnir:/data matrixdotorg/mjolnir:latest
|
docker run --rm -it -v ./mjolnir:/data matrixdotorg/mjolnir:latest bot --mjolnir-config /data/config/production.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
# Docker Compose
|
# Docker Compose
|
||||||
|
@ -13,5 +13,5 @@ yarn build
|
|||||||
cp config/default.yaml config/production.yaml
|
cp config/default.yaml config/production.yaml
|
||||||
nano config/production.yaml
|
nano config/production.yaml
|
||||||
|
|
||||||
NODE_ENV=production node lib/index.js
|
node lib/index.js --mjolnir-config ./config/production.yaml
|
||||||
```
|
```
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
"version": "sed -i '/# version automated/s/[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][0-9]*/'$npm_package_version'/' synapse_antispam/setup.py && git add synapse_antispam/setup.py && cat synapse_antispam/setup.py"
|
"version": "sed -i '/# version automated/s/[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][0-9]*/'$npm_package_version'/' synapse_antispam/setup.py && git add synapse_antispam/setup.py && cat synapse_antispam/setup.py"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/config": "^3.3.0",
|
||||||
"@types/crypto-js": "^4.0.2",
|
"@types/crypto-js": "^4.0.2",
|
||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.13",
|
||||||
"@types/html-to-text": "^8.0.1",
|
"@types/html-to-text": "^8.0.1",
|
||||||
@ -45,6 +46,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"await-lock": "^2.2.2",
|
"await-lock": "^2.2.2",
|
||||||
"body-parser": "^1.20.1",
|
"body-parser": "^1.20.1",
|
||||||
|
"config": "^3.3.8",
|
||||||
"express": "^4.17",
|
"express": "^4.17",
|
||||||
"html-to-text": "^8.0.0",
|
"html-to-text": "^8.0.0",
|
||||||
"humanize-duration": "^3.27.1",
|
"humanize-duration": "^3.27.1",
|
||||||
|
@ -15,9 +15,9 @@ limitations under the License.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import * as path from "path";
|
|
||||||
import { load } from "js-yaml";
|
import { load } from "js-yaml";
|
||||||
import { MatrixClient } from "matrix-bot-sdk";
|
import { MatrixClient } from "matrix-bot-sdk";
|
||||||
|
import Config from "config";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The configuration, as read from production.yaml
|
* The configuration, as read from production.yaml
|
||||||
@ -170,12 +170,32 @@ const defaultConfig: IConfig = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export function read(): IConfig {
|
/**
|
||||||
const config_dir = process.env.NODE_CONFIG_DIR || "./config";
|
* Grabs an explicit path provided for mjolnir's config from an arguments vector if provided, otherwise returns undefined.
|
||||||
const config_file = `${process.env.NODE_ENV || "default"}.yaml`
|
* @param argv An arguments vector sourced from `process.argv`.
|
||||||
|
* @returns The path if one was provided or undefined.
|
||||||
const content = fs.readFileSync(path.join(config_dir, config_file), "utf8");
|
*/
|
||||||
const parsed = load(content);
|
function configPathFromArguments(argv: string[]): undefined|string {
|
||||||
const config = {...defaultConfig, ...(parsed as object)} as IConfig;
|
const configOptionIndex = argv.findIndex(arg => arg === "--mjolnir-config");
|
||||||
return config;
|
if (configOptionIndex > 0) {
|
||||||
|
const configOptionPath = argv.at(configOptionIndex + 1);
|
||||||
|
if (!configOptionPath) {
|
||||||
|
throw new Error("No path provided with option --mjolnir-config");
|
||||||
|
}
|
||||||
|
return configOptionPath;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function read(): IConfig {
|
||||||
|
const explicitConfigPath = configPathFromArguments(process.argv);
|
||||||
|
if (explicitConfigPath) {
|
||||||
|
const content = fs.readFileSync(explicitConfigPath, "utf8");
|
||||||
|
const parsed = load(content);
|
||||||
|
return Config.util.extendDeep({}, defaultConfig, parsed);
|
||||||
|
} else {
|
||||||
|
const config = Config.util.extendDeep({}, defaultConfig, Config.util.toObject()) as IConfig;
|
||||||
|
return config;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
17
yarn.lock
17
yarn.lock
@ -122,6 +122,11 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8"
|
resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8"
|
||||||
integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==
|
integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==
|
||||||
|
|
||||||
|
"@types/config@^3.3.0":
|
||||||
|
version "3.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/config/-/config-3.3.0.tgz#2b632cb37c639bf8d57054561f5a77d31dcebc1e"
|
||||||
|
integrity sha512-9kZSbl3/X3TVNowLCu5HFQdQmD+4287Om55avknEYkuo6R2dDrsp/EXEHUFvfYeG7m1eJ0WYGj+cbcUIhARJAQ==
|
||||||
|
|
||||||
"@types/connect@*":
|
"@types/connect@*":
|
||||||
version "3.4.35"
|
version "3.4.35"
|
||||||
resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz"
|
resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz"
|
||||||
@ -776,6 +781,13 @@ concat-map@0.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||||
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
|
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
|
||||||
|
|
||||||
|
config@^3.3.8:
|
||||||
|
version "3.3.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/config/-/config-3.3.8.tgz#14ef7aef22af25877fdaee696ec64d761feb7be0"
|
||||||
|
integrity sha512-rFzF6VESOdp7wAXFlB9IOZI4ouL05g3A03v2eRcTHj2JBQaTNJ40zhAUl5wRbWHqLZ+uqp/7OE0BWWtAVgrong==
|
||||||
|
dependencies:
|
||||||
|
json5 "^2.2.1"
|
||||||
|
|
||||||
content-disposition@0.5.3:
|
content-disposition@0.5.3:
|
||||||
version "0.5.3"
|
version "0.5.3"
|
||||||
resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz"
|
resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz"
|
||||||
@ -2052,6 +2064,11 @@ json5@^1.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
minimist "^1.2.0"
|
minimist "^1.2.0"
|
||||||
|
|
||||||
|
json5@^2.2.1:
|
||||||
|
version "2.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
|
||||||
|
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
|
||||||
|
|
||||||
jsonpointer@^5.0.0:
|
jsonpointer@^5.0.0:
|
||||||
version "5.0.1"
|
version "5.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
|
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
|
||||||
|
Loading…
Reference in New Issue
Block a user