summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2005-04-20 13:35:52 +0000
committerFrederic Peters <fpeters@entrouvert.com>2005-04-20 13:35:52 +0000
commit871bf490c4370bc7ceb678afdce09a4ab40ee1d5 (patch)
treeb700992c16a33167349c5c297322d9f070e8aada
parent8b8a3f3023fa66790c1f48e1bbc289d8a58c5276 (diff)
API addition; lasso_provider_get_organization
-rw-r--r--docs/reference/lasso-sections.txt1
-rw-r--r--lasso/id-ff/provider.c35
-rw-r--r--lasso/id-ff/provider.h2
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 */