1
0
mirror of https://github.com/falk-werner/webfused synced 2026-03-02 04:09:19 +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

@@ -151,6 +151,47 @@ wfd_config_read_server(
return true;
}
static bool
wfd_config_read_authenticator(
config_setting_t * authenticator,
struct wfd_config_builder builder)
{
bool result = (NULL != authenticator);
char const * provider_name = NULL;
if (result)
{
int rc = config_setting_lookup_string(authenticator, "provider", &provider_name);
if (CONFIG_TRUE != rc)
{
WFD_ERROR("missing authentication provider");
result = false;
}
}
struct config_setting_t * settings = NULL;
if (result)
{
settings = config_setting_lookup(authenticator, "settings");
if (NULL == settings)
{
WFD_ERROR("missing authentication settings");
result = false;
}
}
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);
}
return result;
}
static bool
wfd_config_read_authentication(
config_t * config,
@@ -158,37 +199,14 @@ wfd_config_read_authentication(
{
bool result = true;
bool hasAuthentication = (NULL != config_lookup(config, "authentication"));
if (hasAuthentication)
config_setting_t * authentication = config_lookup(config, "authentication");
if (NULL != authentication)
{
char const * provider_name = NULL;
int length = config_setting_length(authentication);
for (int i = 0; (result) && (i < length); i++)
{
int rc = config_lookup_string(config, "authentication.provider", &provider_name);
if (CONFIG_TRUE != rc)
{
WFD_ERROR("missing authentication provider");
result = false;
}
}
struct config_setting_t * settings = NULL;
if (result)
{
settings = config_lookup(config, "authentication.settings");
if (NULL == settings)
{
WFD_ERROR("missing authentication settings");
result = false;
}
}
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);
config_setting_t * authenticator = config_setting_get_elem(authentication, i);
result = wfd_config_read_authenticator(authenticator, builder);
}
}