From d8c5f74377ae34b233ddcbd1f19fbef3220ef5d4 Mon Sep 17 00:00:00 2001 From: Nick Muerdter Date: Tue, 13 Sep 2016 20:33:52 -0600 Subject: [PATCH] Fix overriding null configuration options in default.yml. Null values in default.yml were being treated as a special null type by lyaml, which was preventing overrides from actually overriding the null type. This prevented the omniauth-ldap and omniauth-cas options from being set (see https://github.com/NREL/api-umbrella/issues/278#issuecomment-238776123) --- src/api-umbrella/cli/read_config.lua | 3 ++ src/api-umbrella/proxy/models/file_config.lua | 5 +-- test/integration/config.js | 35 +++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 test/integration/config.js diff --git a/src/api-umbrella/cli/read_config.lua b/src/api-umbrella/cli/read_config.lua index bd317d2c4..781877359 100644 --- a/src/api-umbrella/cli/read_config.lua +++ b/src/api-umbrella/cli/read_config.lua @@ -102,6 +102,7 @@ local function read_runtime_config() f:close() config = lyaml.load(content) + nillify_yaml_nulls(config) end end @@ -110,6 +111,7 @@ end local function read_default_config() local content = file.read(path.join(src_root_dir, "config/default.yml"), true) config = lyaml.load(content) + nillify_yaml_nulls(config) end -- Handle setup of random secret tokens that should be be unique for API @@ -159,6 +161,7 @@ local function read_system_config() if content then local overrides = lyaml.load(content) deep_merge_overwrite_arrays(config, overrides) + nillify_yaml_nulls(config) end else print("WARNING: Config file does not exist: ", config_path) diff --git a/src/api-umbrella/proxy/models/file_config.lua b/src/api-umbrella/proxy/models/file_config.lua index f86d6eb11..a482b06e4 100644 --- a/src/api-umbrella/proxy/models/file_config.lua +++ b/src/api-umbrella/proxy/models/file_config.lua @@ -17,7 +17,9 @@ local function read_file() local content = f:read("*all") f:close() - return lyaml.load(content) + local data = lyaml.load(content) + nillify_yaml_nulls(data) + return data end local function set_defaults(data) @@ -78,7 +80,6 @@ end local function read() local data = read_file() - nillify_yaml_nulls(data) set_defaults(data) cache_computed_settings(data["apiSettings"]) diff --git a/test/integration/config.js b/test/integration/config.js new file mode 100644 index 000000000..020c34d93 --- /dev/null +++ b/test/integration/config.js @@ -0,0 +1,35 @@ +'use strict'; + +require('../test_helper'); + +var fs = require('fs'), + path = require('path'), + yaml = require('js-yaml'); + +describe('config', function() { + describe('overriding null values', function() { + shared.runServer({ + web: { + admin: { + auth_strategies: { + ldap: { + options: { + host: 'example.com', + } + }, + }, + }, + }, + }); + + it('overrides a default null value', function() { + var defaultConfig = yaml.safeLoad(fs.readFileSync(path.resolve(__dirname, '../../config/default.yml')).toString()); + var runtimeConfig = yaml.safeLoad(fs.readFileSync('/tmp/api-umbrella-test/var/run/runtime_config.yml').toString()); + + should.not.exist(defaultConfig.web.admin.auth_strategies.ldap.options); + runtimeConfig.web.admin.auth_strategies.ldap.options.should.eql({ + host: 'example.com', + }); + }); + }); +});