Allow any of grant's (nested) configuration parameters (oAuth) (#6155)

* Allow underscore configuration extraction

* Allow any of grants config properties
This commit is contained in:
Rijk van Zanten
2021-06-09 12:08:48 -04:00
committed by GitHub
parent ad8bd3e7cd
commit 61f2e48ced
2 changed files with 20 additions and 20 deletions

View File

@@ -4,6 +4,7 @@
import env from './env';
import { toArray } from './utils/to-array';
import { getConfigFromEnv } from './utils/get-config-from-env';
const enabledProviders = toArray(env.OAUTH_PROVIDERS).map((provider) => provider.toLowerCase());
@@ -16,23 +17,8 @@ const config: any = {
},
};
for (const [key, value] of Object.entries(env)) {
if (key.startsWith('OAUTH') === false) continue;
const parts = key.split('_');
const provider = parts[1].toLowerCase();
if (enabledProviders.includes(provider) === false) continue;
// OAUTH <PROVIDER> SETTING = VALUE
parts.splice(0, 2);
const configKey = parts.join('_').toLowerCase();
config[provider] = {
...(config[provider] || {}),
[configKey]: value,
};
for (const provider of enabledProviders) {
config[provider] = getConfigFromEnv(`OAUTH_${provider.toUpperCase()}_`, undefined, 'underscore');
}
export default config;

View File

@@ -2,7 +2,11 @@ import camelcase from 'camelcase';
import { set } from 'lodash';
import env from '../env';
export function getConfigFromEnv(prefix: string, omitPrefix?: string | string[]): any {
export function getConfigFromEnv(
prefix: string,
omitPrefix?: string | string[],
type: 'camelcase' | 'underscore' = 'camelcase'
): Record<string, any> {
const config: any = {};
for (const [key, value] of Object.entries(env)) {
@@ -23,12 +27,22 @@ export function getConfigFromEnv(prefix: string, omitPrefix?: string | string[])
if (key.includes('__')) {
const path = key
.split('__')
.map((key, index) => (index === 0 ? camelcase(camelcase(key.slice(prefix.length))) : camelcase(key)));
.map((key, index) => (index === 0 ? transform(transform(key.slice(prefix.length))) : transform(key)));
set(config, path.join('.'), value);
} else {
config[camelcase(key.slice(prefix.length))] = value;
config[transform(key.slice(prefix.length))] = value;
}
}
return config;
function transform(key: string): string {
if (type === 'camelcase') {
return camelcase(key);
} else if (type === 'underscore') {
return key.toLowerCase();
}
return key;
}
}