mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2025-03-18 21:41:05 +02:00
Compare commits
No commits in common. "4271402e0d0e1840791158de288a3e7617227ec4" and "435cab01c8cf7f29e873eb7d9711dd0ad2ead816" have entirely different histories.
4271402e0d
...
435cab01c8
1 changed files with 23 additions and 40 deletions
|
@ -311,13 +311,17 @@ function convertRedisOptions(options: RedisOptionsSource, host: string): RedisOp
|
||||||
this function allows overriding any string-valued config option with
|
this function allows overriding any string-valued config option with
|
||||||
a sensible-named environment variable
|
a sensible-named environment variable
|
||||||
|
|
||||||
e.g. `MK_CONFIG_MEILISEARCH_APIKEY` sets `config.meilisearch.apikey`
|
e.g. `MK_CONFIG_MEILISEARCH_APIKEY` overrides `config.meilisearch.apikey`
|
||||||
|
|
||||||
|
the option's containing object must be present in the config *file*,
|
||||||
|
so in the example above, `config.meilisearch` must be set to
|
||||||
|
something in the file, it can't be completely commented out.
|
||||||
|
|
||||||
you can also override a single `dbSlave` value,
|
you can also override a single `dbSlave` value,
|
||||||
e.g. `MK_CONFIG_DBSLAVES_1_PASS` sets the password for the 2nd
|
e.g. `MK_CONFIG_DBSLAVES_1_PASS` sets the password for the 2nd
|
||||||
database replica (the first one would be
|
database replica (the first one would be
|
||||||
`MK_CONFIG_DBSLAVES_0_PASS`); in this case, `config.dbSlaves` must
|
`MK_CONFIG_DBSLAVES_0_PASS`); again, `config.dbSlaves` must be set
|
||||||
be set to an array of the right size already in the file
|
to an array of the right size already in the file
|
||||||
|
|
||||||
values can be read from files, too: setting `MK_DB_PASS_FILE` to
|
values can be read from files, too: setting `MK_DB_PASS_FILE` to
|
||||||
`/some/file` would set the main database password to the contents of
|
`/some/file` would set the main database password to the contents of
|
||||||
|
@ -328,10 +332,10 @@ function applyEnvOverrides(config: Source) {
|
||||||
// the given steps, building the env variable name
|
// the given steps, building the env variable name
|
||||||
|
|
||||||
function _apply_top(steps: (string | number)[]) {
|
function _apply_top(steps: (string | number)[]) {
|
||||||
_walk('', [], steps);
|
_apply_inner(config, '', steps);
|
||||||
}
|
}
|
||||||
|
|
||||||
function _walk(name: string, path: (string | number)[], steps: (string | number)[]) {
|
function _apply_inner(thisConfig: any, name: string, steps: (string | number)[]) {
|
||||||
// are there more steps after this one? recurse
|
// are there more steps after this one? recurse
|
||||||
if (steps.length > 1) {
|
if (steps.length > 1) {
|
||||||
const thisStep = steps.shift();
|
const thisStep = steps.shift();
|
||||||
|
@ -340,10 +344,10 @@ function applyEnvOverrides(config: Source) {
|
||||||
// if a step is not a simple value, iterate through it
|
// if a step is not a simple value, iterate through it
|
||||||
if (typeof thisStep === 'object') {
|
if (typeof thisStep === 'object') {
|
||||||
for (const thisOneStep of thisStep) {
|
for (const thisOneStep of thisStep) {
|
||||||
_descend(name, path, thisOneStep, steps);
|
_descend(thisConfig, name, thisOneStep, steps);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_descend(name, path, thisStep, steps);
|
_descend(thisConfig, name, thisStep, steps);
|
||||||
}
|
}
|
||||||
|
|
||||||
// the actual override has happened at the bottom of the
|
// the actual override has happened at the bottom of the
|
||||||
|
@ -356,10 +360,10 @@ function applyEnvOverrides(config: Source) {
|
||||||
|
|
||||||
if (typeof lastStep === 'object') {
|
if (typeof lastStep === 'object') {
|
||||||
for (const lastOneStep of lastStep) {
|
for (const lastOneStep of lastStep) {
|
||||||
_lastBit(name, path, lastOneStep);
|
_lastBit(thisConfig, name, lastOneStep);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_lastBit(name, path, lastStep);
|
_lastBit(thisConfig, name, lastStep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,50 +372,29 @@ function applyEnvOverrides(config: Source) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// this recurses down, bailing out if there's no config to override
|
// this recurses down, bailing out if there's no config to override
|
||||||
function _descend(name: string, path: (string | number)[], thisStep: string | number, steps: (string | number)[]) {
|
function _descend(thisConfig: any, name: string, thisStep: string | number, steps: (string | number)[]) {
|
||||||
name = `${name}${_step2name(thisStep)}_`;
|
name = `${name}${_step2name(thisStep)}_`;
|
||||||
path = [ ...path, thisStep ];
|
thisConfig = thisConfig[thisStep];
|
||||||
_walk(name, path, steps);
|
if (!thisConfig) return;
|
||||||
|
_apply_inner(thisConfig, name, steps);
|
||||||
}
|
}
|
||||||
|
|
||||||
// this is the bottom of the recursion: look at the environment and
|
// this is the bottom of the recursion: look at the environment and
|
||||||
// set the value
|
// set the value
|
||||||
function _lastBit(name: string, path: (string | number)[], lastStep: string | number) {
|
function _lastBit(thisConfig: any, name: string, lastStep: string | number) {
|
||||||
name = `MK_CONFIG_${name}${_step2name(lastStep)}`;
|
name = `${name}${_step2name(lastStep)}`;
|
||||||
|
|
||||||
const val = process.env[name];
|
const val = process.env[`MK_CONFIG_${name}`];
|
||||||
if (val != null && val != undefined) {
|
if (val != null && val != undefined) {
|
||||||
_assign(path, lastStep, val);
|
thisConfig[lastStep] = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
const file = process.env[`${name}_FILE`];
|
const file = process.env[`MK_CONFIG_${name}_FILE`];
|
||||||
if (file) {
|
if (file) {
|
||||||
_assign(path, lastStep, fs.readFileSync(file, 'utf-8').trim());
|
thisConfig[lastStep] = fs.readFileSync(file, 'utf-8').trim();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const alwaysStrings = { 'chmodSocket': 1 };
|
|
||||||
|
|
||||||
function _assign(path: (string | number)[], lastStep: string | number, value: string) {
|
|
||||||
let thisConfig = config;
|
|
||||||
for (const step of path) {
|
|
||||||
if (!thisConfig[step]) {
|
|
||||||
thisConfig[step] = {};
|
|
||||||
}
|
|
||||||
thisConfig = thisConfig[step];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!alwaysStrings[lastStep]) {
|
|
||||||
if (value.match(/^[0-9]+$/)) {
|
|
||||||
value = parseInt(value);
|
|
||||||
} else if (value.match(/^(true|false)$/i)) {
|
|
||||||
value = !!value.match(/^true$/i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
thisConfig[lastStep] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// these are all the settings that can be overridden
|
// these are all the settings that can be overridden
|
||||||
|
|
||||||
_apply_top([['url', 'port', 'socket', 'chmodSocket', 'disableHsts']]);
|
_apply_top([['url', 'port', 'socket', 'chmodSocket', 'disableHsts']]);
|
||||||
|
|
Loading…
Reference in a new issue