diff --git a/README.md b/README.md index f258f3d..e5b8852 100644 --- a/README.md +++ b/README.md @@ -37,15 +37,15 @@ server: } authentication: -{ - # name of authenticaton provider - provider = "file" - - settings: +( { - file = "/etc/webfused/passwd" + provider = "file" + settings: + { + file = "/etc/webfused/passwd" + } } -} +) filesystems: ( diff --git a/etc/webfused.conf b/etc/webfused.conf index 3f28976..eb2df66 100644 --- a/etc/webfused.conf +++ b/etc/webfused.conf @@ -17,13 +17,15 @@ server: } authentication: -{ - provider = "file" - settings: +( { - file = "/etc/webfused/passwd" + provider = "file" + settings: + { + file = "/etc/webfused/passwd" + } } -} +) filesystems: ( diff --git a/src/webfused/config/factory.c b/src/webfused/config/factory.c index ddd4ff0..794b67c 100644 --- a/src/webfused/config/factory.c +++ b/src/webfused/config/factory.c @@ -152,43 +152,61 @@ wfd_config_read_server( } static bool -wfd_config_read_authentication( - config_t * config, +wfd_config_read_authenticator( + config_setting_t * authenticator, struct wfd_config_builder builder) { - bool result = true; + bool result = (NULL != authenticator); - bool hasAuthentication = (NULL != config_lookup(config, "authentication")); - if (hasAuthentication) + char const * provider_name = NULL; + if (result) { - char const * provider_name = NULL; + int rc = config_setting_lookup_string(authenticator, "provider", &provider_name); + if (CONFIG_TRUE != rc) { - int rc = config_lookup_string(config, "authentication.provider", &provider_name); - if (CONFIG_TRUE != rc) - { - WFD_ERROR("missing authentication provider"); - result = false; - } + WFD_ERROR("missing authentication provider"); + result = false; } + } - struct config_setting_t * settings = NULL; - if (result) + struct config_setting_t * settings = NULL; + if (result) + { + settings = config_setting_lookup(authenticator, "settings"); + if (NULL == settings) { - settings = config_lookup(config, "authentication.settings"); - if (NULL == settings) - { - WFD_ERROR("missing authentication settings"); - result = false; - } + WFD_ERROR("missing authentication settings"); + result = false; } + } - if (result) - { - struct wfd_settings auth_settings; - wfd_settings_init(&auth_settings, settings); + if (result) + { + struct wfd_settings auth_settings; + wfd_settings_init(&auth_settings, settings); + + result = wfd_config_builder_add_auth_provider(builder, provider_name, &auth_settings); + wfd_settings_cleanup(&auth_settings); + } - result = wfd_config_builder_add_auth_provider(builder, provider_name, &auth_settings); - wfd_settings_cleanup(&auth_settings); + return result; +} + +static bool +wfd_config_read_authentication( + config_t * config, + struct wfd_config_builder builder) +{ + bool result = true; + + config_setting_t * authentication = config_lookup(config, "authentication"); + if (NULL != authentication) + { + int length = config_setting_length(authentication); + for (int i = 0; (result) && (i < length); i++) + { + config_setting_t * authenticator = config_setting_get_elem(authentication, i); + result = wfd_config_read_authenticator(authenticator, builder); } } diff --git a/test/test_config_factory.cc b/test/test_config_factory.cc index 58d2f7d..48a6de8 100644 --- a/test/test_config_factory.cc +++ b/test/test_config_factory.cc @@ -268,10 +268,12 @@ TEST(config, authentication) char const config_text[] = "version = { major = 1, minor = 0 }\n" "authentication:\n" - "{\n" - " provider = \"test\"\n" - " settings: { }\n" - "}\n" + "(\n" + " {\n" + " provider = \"test\"\n" + " settings: { }\n" + " }\n" + ")\n" ; bool result = wfd_config_load_string(builder.getBuilder(), config_text); ASSERT_TRUE(result); @@ -289,10 +291,12 @@ TEST(config, failed_create_authenticator) char const config_text[] = "version = { major = 1, minor = 0 }\n" "authentication:\n" - "{\n" - " provider = \"test\"\n" - " settings: { }\n" - "}\n" + "(\n" + " {\n" + " provider = \"test\"\n" + " settings: { }\n" + " }\n" + ")\n" ; bool result = wfd_config_load_string(builder.getBuilder(), config_text); ASSERT_FALSE(result); @@ -309,9 +313,11 @@ TEST(config, failed_missing_auth_provider) char const config_text[] = "version = { major = 1, minor = 0 }\n" "authentication:\n" - "{\n" - " settings: { }\n" - "}\n" + "(\n" + " {\n" + " settings: { }\n" + " }\n" + ")\n" ; bool result = wfd_config_load_string(builder.getBuilder(), config_text); ASSERT_FALSE(result); @@ -328,9 +334,11 @@ TEST(config, failed_missing_auth_settings) char const config_text[] = "version = { major = 1, minor = 0 }\n" "authentication:\n" - "{\n" - " provider = \"test\"\n" - "}\n" + "(\n" + " {\n" + " provider = \"test\"\n" + " }\n" + ")\n" ; bool result = wfd_config_load_string(builder.getBuilder(), config_text); ASSERT_FALSE(result);