1
0
mirror of https://github.com/falk-werner/webfused synced 2024-10-27 20:44:08 +00:00

allow specification of multiple authenticators

This commit is contained in:
Falk Werner 2020-03-18 19:14:02 +01:00
parent b37e95f724
commit 46ba61e97d
4 changed files with 83 additions and 55 deletions

View File

@ -37,15 +37,15 @@ server:
} }
authentication: authentication:
(
{ {
# name of authenticaton provider
provider = "file" provider = "file"
settings: settings:
{ {
file = "/etc/webfused/passwd" file = "/etc/webfused/passwd"
} }
} }
)
filesystems: filesystems:
( (

View File

@ -17,6 +17,7 @@ server:
} }
authentication: authentication:
(
{ {
provider = "file" provider = "file"
settings: settings:
@ -24,6 +25,7 @@ authentication:
file = "/etc/webfused/passwd" file = "/etc/webfused/passwd"
} }
} }
)
filesystems: filesystems:
( (

View File

@ -152,18 +152,16 @@ wfd_config_read_server(
} }
static bool static bool
wfd_config_read_authentication( wfd_config_read_authenticator(
config_t * config, config_setting_t * authenticator,
struct wfd_config_builder builder) 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; char const * provider_name = NULL;
if (result)
{ {
int rc = config_lookup_string(config, "authentication.provider", &provider_name); int rc = config_setting_lookup_string(authenticator, "provider", &provider_name);
if (CONFIG_TRUE != rc) if (CONFIG_TRUE != rc)
{ {
WFD_ERROR("missing authentication provider"); WFD_ERROR("missing authentication provider");
@ -174,7 +172,7 @@ wfd_config_read_authentication(
struct config_setting_t * settings = NULL; struct config_setting_t * settings = NULL;
if (result) if (result)
{ {
settings = config_lookup(config, "authentication.settings"); settings = config_setting_lookup(authenticator, "settings");
if (NULL == settings) if (NULL == settings)
{ {
WFD_ERROR("missing authentication settings"); WFD_ERROR("missing authentication settings");
@ -190,6 +188,26 @@ wfd_config_read_authentication(
result = wfd_config_builder_add_auth_provider(builder, provider_name, &auth_settings); result = wfd_config_builder_add_auth_provider(builder, provider_name, &auth_settings);
wfd_settings_cleanup(&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);
}
} }
return result; return result;

View File

@ -268,10 +268,12 @@ TEST(config, authentication)
char const config_text[] = char const config_text[] =
"version = { major = 1, minor = 0 }\n" "version = { major = 1, minor = 0 }\n"
"authentication:\n" "authentication:\n"
"(\n"
" {\n" " {\n"
" provider = \"test\"\n" " provider = \"test\"\n"
" settings: { }\n" " settings: { }\n"
" }\n" " }\n"
")\n"
; ;
bool result = wfd_config_load_string(builder.getBuilder(), config_text); bool result = wfd_config_load_string(builder.getBuilder(), config_text);
ASSERT_TRUE(result); ASSERT_TRUE(result);
@ -289,10 +291,12 @@ TEST(config, failed_create_authenticator)
char const config_text[] = char const config_text[] =
"version = { major = 1, minor = 0 }\n" "version = { major = 1, minor = 0 }\n"
"authentication:\n" "authentication:\n"
"(\n"
" {\n" " {\n"
" provider = \"test\"\n" " provider = \"test\"\n"
" settings: { }\n" " settings: { }\n"
" }\n" " }\n"
")\n"
; ;
bool result = wfd_config_load_string(builder.getBuilder(), config_text); bool result = wfd_config_load_string(builder.getBuilder(), config_text);
ASSERT_FALSE(result); ASSERT_FALSE(result);
@ -309,9 +313,11 @@ TEST(config, failed_missing_auth_provider)
char const config_text[] = char const config_text[] =
"version = { major = 1, minor = 0 }\n" "version = { major = 1, minor = 0 }\n"
"authentication:\n" "authentication:\n"
"(\n"
" {\n" " {\n"
" settings: { }\n" " settings: { }\n"
" }\n" " }\n"
")\n"
; ;
bool result = wfd_config_load_string(builder.getBuilder(), config_text); bool result = wfd_config_load_string(builder.getBuilder(), config_text);
ASSERT_FALSE(result); ASSERT_FALSE(result);
@ -328,9 +334,11 @@ TEST(config, failed_missing_auth_settings)
char const config_text[] = char const config_text[] =
"version = { major = 1, minor = 0 }\n" "version = { major = 1, minor = 0 }\n"
"authentication:\n" "authentication:\n"
"(\n"
" {\n" " {\n"
" provider = \"test\"\n" " provider = \"test\"\n"
" }\n" " }\n"
")\n"
; ;
bool result = wfd_config_load_string(builder.getBuilder(), config_text); bool result = wfd_config_load_string(builder.getBuilder(), config_text);
ASSERT_FALSE(result); ASSERT_FALSE(result);