Optionally load plugins config from environment

This commit is contained in:
Wyatt Johnson
2017-04-06 11:58:18 -06:00
parent fb8b33b2eb
commit a9c88f52ce
3 changed files with 17 additions and 5 deletions
+11 -4
View File
@@ -3,11 +3,18 @@
Plugins for Talk can take various forms, currently we are only supporting server
side plugins.
## Plugin Registration: `plugins.json`
## Plugin Registration
All plugins must be registered in the root file `plugins.json`.
The parsing order for the plugin regsitration is as follows:
The format for this file is thus:
- `process.env.TALK_PLUGINS_JSON`
- `plugins.json`
- `plugins.default.json`
If you need to "disable all plugins", you can simply provide `{}` as the
contents of `process.env.TALK_PLUGINS_JSON` or the `plugins.json`.
The format for this is thus:
```json
{
@@ -18,7 +25,7 @@ The format for this file is thus:
```
Where we have a `server` key with an array of plugins that match the folder
name in the `plugins/` folder. For example, the above `plugins.json` would
name in the `plugins/` folder. For example, the above config would
require a plugin from `plugins/people`, which must provide a `index.js` file
that returns an object that matches the Plugin Specification.
+1
View File
@@ -37,6 +37,7 @@ available in the format: `<scheme>://<host>` without the path.
- `TALK_INSTALL_LOCK` (_optional for dynamic setup_) - Defaults to `FALSE`. When `TRUE`, disables the dynamic setup endpoint.
- `TALK_RECAPTCHA_SECRET` (*required for reCAPTCHA support*) - server secret used for enabling reCAPTCHA powered logins. If not provided it will instead default to providing only a time based lockout.
- `TALK_RECAPTCHA_PUBLIC` (*required for reCAPTCHA support*) - client secret used for enabling reCAPTCHA powered logins. If not provided it will instead default to providing only a time based lockout.
- `TALK_PLUGINS_JSON` (_optional_) - used to specify the plugin config via the environment
Refer to the wiki page on [Configuration Loading](https://github.com/coralproject/talk/wiki/Configuration-Loading) for
alternative methods of loading configuration during development.
+5 -1
View File
@@ -14,8 +14,12 @@ let plugins = {};
try {
let defaultPlugins = path.join(__dirname, 'plugins.default.json');
let customPlugins = path.join(__dirname, 'plugins.json');
let envPluginJSON = process.env.TALK_PLUGINS_JSON;
if (fs.existsSync(customPlugins)) {
if (envPluginJSON && envPluginJSON.length > 0) {
debug('Now using TALK_PLUGINS_JSON environment variable for plugins');
plugins = JSON.parse(envPluginJSON);
} else if (fs.existsSync(customPlugins)) {
debug(`Now using ${customPlugins} for plugins`);
plugins = JSON.parse(fs.readFileSync(customPlugins, 'utf8'));
} else {