From 237b7424bd596d3ffc9f5b53ea069eee5709cd93 Mon Sep 17 00:00:00 2001 From: John Dennis Date: Thu, 28 May 2015 09:26:35 -0400 Subject: [PATCH] Add server utility lasso_server_get_endpoint_url_by_id() Locate the provider in the server's list of providers, then select an endpoint given the @endpoint_description and return that endpoint's URL. If the provider cannot be found or if the provider does not have a matching endpoint NULL will be returned. Signed-off-by: John Dennis License: MIT --- docs/reference/lasso/lasso-sections.txt | 1 + lasso/id-ff/server.c | 28 +++++++++++++++++++++++++ lasso/id-ff/server.h | 3 +++ 3 files changed, 32 insertions(+) diff --git a/docs/reference/lasso/lasso-sections.txt b/docs/reference/lasso/lasso-sections.txt index a0e70e1b..87d69e86 100644 --- a/docs/reference/lasso/lasso-sections.txt +++ b/docs/reference/lasso/lasso-sections.txt @@ -20,6 +20,7 @@ lasso_server_get_provider lasso_server_set_encryption_private_key lasso_server_set_encryption_private_key_with_password lasso_server_load_affiliation +lasso_server_get_endpoint_url_by_id lasso_server_saml2_assertion_setup_signature LASSO_SERVER diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c index d56fc715..ab728609 100644 --- a/lasso/id-ff/server.c +++ b/lasso/id-ff/server.c @@ -254,6 +254,34 @@ cleanup: return rc; } +/** + * lasso_server_get_endpoint_url_by_id: + * @server: a #LassoServer + * @provider_id: the EntityID whose endpoints will be examined. + * @endpoint_description: string describing criteria used to select endpoint. + * + * Locate the provider in the server's list of providers, then select an + * endpoint given the @endpoint_description and return than endpoint's URL. + * If the provider cannot be found or if the provider does not have a + * matching endpoint NULL will be returned. + * + * Returns: url (must be freed by caller) + */ +gchar * +lasso_server_get_endpoint_url_by_id(const LassoServer *server, const gchar *provider_id, + const gchar *endpoint_description) +{ + LassoProvider *provider; + gchar *url = NULL; + + provider = lasso_server_get_provider(server, provider_id); + if (!provider) return NULL; + + url = lasso_provider_get_metadata_one(provider, endpoint_description); + + return url; +} + /*****************************************************************************/ /* private methods */ /*****************************************************************************/ diff --git a/lasso/id-ff/server.h b/lasso/id-ff/server.h index 75c7aa83..087898af 100644 --- a/lasso/id-ff/server.h +++ b/lasso/id-ff/server.h @@ -127,6 +127,9 @@ LASSO_EXPORT lasso_error_t lasso_server_load_metadata(LassoServer *server, Lasso LASSO_EXPORT lasso_error_t lasso_server_add_provider2(LassoServer *server, LassoProvider *provider); +LASSO_EXPORT gchar *lasso_server_get_endpoint_url_by_id(const LassoServer *server, + const gchar *provider_id, const gchar *endpoint_description); + #ifdef __cplusplus } #endif /* __cplusplus */