diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2005-04-20 13:35:52 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2005-04-20 13:35:52 +0000 |
| commit | 871bf490c4370bc7ceb678afdce09a4ab40ee1d5 (patch) | |
| tree | b700992c16a33167349c5c297322d9f070e8aada | |
| parent | 8b8a3f3023fa66790c1f48e1bbc289d8a58c5276 (diff) | |
API addition; lasso_provider_get_organization
| -rw-r--r-- | docs/reference/lasso-sections.txt | 1 | ||||
| -rw-r--r-- | lasso/id-ff/provider.c | 35 | ||||
| -rw-r--r-- | lasso/id-ff/provider.h | 2 |
3 files changed, 38 insertions, 0 deletions
diff --git a/docs/reference/lasso-sections.txt b/docs/reference/lasso-sections.txt index 83234774..87d70c01 100644 --- a/docs/reference/lasso-sections.txt +++ b/docs/reference/lasso-sections.txt @@ -16,6 +16,7 @@ lasso_provider_get_first_http_method lasso_provider_get_metadata_list lasso_provider_get_metadata_one lasso_provider_has_protocol_profile +lasso_provider_get_organization <SUBSECTION Standard> LASSO_PROVIDER LASSO_IS_PROVIDER diff --git a/lasso/id-ff/provider.c b/lasso/id-ff/provider.c index b576f3f6..4fb2b908 100644 --- a/lasso/id-ff/provider.c +++ b/lasso/id-ff/provider.c @@ -39,6 +39,7 @@ struct _LassoProviderPrivate GHashTable *SPDescriptor; char *default_assertion_consumer; GHashTable *IDPDescriptor; + xmlNode *organization; }; static char *protocol_uris[] = { @@ -306,6 +307,26 @@ lasso_provider_get_base64_succinct_id(LassoProvider *provider) } +/** + * lasso_provider_get_organization + * @provider: a #LassoProvider + * + * Returns the provider metadata <Organization> XML node. + * + * Return value: the <Organization/> node (libxml2 xmlNode*); or NULL if it is + * not found. This xmlnode must be freed by the caller. + **/ +xmlNode* +lasso_provider_get_organization(LassoProvider *provider) +{ + if (provider->private_data->organization) { + return xmlCopyNode(provider->private_data->organization, 1); + } else { + return NULL; + } +} + + /*****************************************************************************/ /* private methods */ /*****************************************************************************/ @@ -436,6 +457,11 @@ dispose(GObject *object) } provider->private_data->SPDescriptor = NULL; + if (provider->private_data->organization) { + xmlFreeNode(provider->private_data->organization); + provider->private_data->organization = NULL; + } + if (provider->private_data->default_assertion_consumer) g_free(provider->private_data->default_assertion_consumer); @@ -473,6 +499,7 @@ instance_init(LassoProvider *provider) provider->private_data = g_new(LassoProviderPrivate, 1); provider->private_data->dispose_has_run = FALSE; provider->private_data->default_assertion_consumer = NULL; + provider->private_data->organization = NULL; /* no value_destroy_func since it shouldn't destroy the GList on insert */ provider->private_data->IDPDescriptor = g_hash_table_new_full( @@ -537,6 +564,7 @@ lasso_provider_load_metadata(LassoProvider *provider, const gchar *metadata) xmlNode *node; const char *xpath_idp = "/md:EntityDescriptor/md:IDPDescriptor"; const char *xpath_sp = "/md:EntityDescriptor/md:SPDescriptor"; + const char *xpath_organization = "/md:EntityDescriptor/md:Organization"; doc = xmlParseFile(metadata); if (doc == NULL) @@ -604,6 +632,13 @@ lasso_provider_load_metadata(LassoProvider *provider, const gchar *metadata) } xmlXPathFreeObject(xpathObj); + xpathObj = xmlXPathEvalExpression(xpath_organization, xpathCtx); + if (xpathObj && xpathObj->nodesetval && xpathObj->nodesetval->nodeNr == 1) { + provider->private_data->organization = xmlCopyNode( + xpathObj->nodesetval->nodeTab[0], 1); + } + xmlXPathFreeObject(xpathObj); + xmlFreeDoc(doc); xmlXPathFreeContext(xpathCtx); diff --git a/lasso/id-ff/provider.h b/lasso/id-ff/provider.h index af62d991..6ac80405 100644 --- a/lasso/id-ff/provider.h +++ b/lasso/id-ff/provider.h @@ -144,6 +144,8 @@ LASSO_EXPORT gboolean lasso_provider_has_protocol_profile(LassoProvider *provide LASSO_EXPORT gchar* lasso_provider_get_base64_succinct_id(LassoProvider *provider); +LASSO_EXPORT xmlNode* lasso_provider_get_organization(LassoProvider *provider); + #ifdef __cplusplus } #endif /* __cplusplus */ |
