diff options
author | Nicolas Clapies <nclapies@entrouvert.com> | 2004-07-06 19:11:01 +0000 |
---|---|---|
committer | Nicolas Clapies <nclapies@entrouvert.com> | 2004-07-06 19:11:01 +0000 |
commit | c122a7727a1b873eee2293496d9b4db238ce2fd4 (patch) | |
tree | a7242a857e4d5e56f2d36217b40cd660907ae8d5 /lasso/id-ff/user.c | |
parent | b455c8fd195c27ff488cbde7abece94a580d1807 (diff) | |
download | lasso-c122a7727a1b873eee2293496d9b4db238ce2fd4.tar.gz lasso-c122a7727a1b873eee2293496d9b4db238ce2fd4.tar.xz lasso-c122a7727a1b873eee2293496d9b4db238ce2fd4.zip |
*** empty log message ***
Diffstat (limited to 'lasso/id-ff/user.c')
-rw-r--r-- | lasso/id-ff/user.c | 145 |
1 files changed, 76 insertions, 69 deletions
diff --git a/lasso/id-ff/user.c b/lasso/id-ff/user.c index 971f4d4c..e48a20a5 100644 --- a/lasso/id-ff/user.c +++ b/lasso/id-ff/user.c @@ -29,52 +29,53 @@ /*****************************************************************************/ static void -lasso_user_node_identity_add(xmlChar *key, LassoIdentity *identity, LassoNode *userNode) +lasso_user_dump_assertion(gpointer key, + gpointer value, + LassoNode *assertions) { - LassoNode *node, *child; - LassoNodeClass *class; - - /* set the Identity node */ -/* node = lasso_node_new(); */ -/* class = LASSO_NODE_GET_CLASS(LASSO_NODE(node)); */ -/* class->set_name(LASSO_NODE(node), "Identity"); */ - - /* add the remote provider id */ -/* class->new_child(node, "RemoteProviderID", key, FALSE); */ - - /* add the local name identifier */ -/* child = lasso_node_new(); */ -/* class = LASSO_NODE_GET_CLASS(LASSO_NODE(node)); */ -/* class->set_name(LASSO_NODE(node), "LocalNameIdentifier"); */ -/* class->lasso_node_add_child(child, identity->local_nameIdentifier); */ -/* class->lasso_node_add_child(node, child); */ - - /* add the remote provider id */ -/* child = lasso_node_new(); */ -/* class = LASSO_NODE_GET_CLASS(LASSO_NODE(node)); */ -/* class->set_name(LASSO_NODE(node), "RemoteNameIdentifier"); */ -/* lasso_node_add_child(child, identity->remote_nameIdentifier); */ -/* lasso_node_add_child(node, child); */ - - /* add the identity node to the user node */ -/* lasso_node_add_child(userNode, identity); */ + +} + +static void +lasso_user_dump_identity(gpointer key, + gpointer value, + LassoNode *identities) +{ + LassoNode *identity_node; + LassoNodeClass *identity_class; + xmlChar *dump; + + dump = lasso_identity_dump(value); + identity_node = lasso_node_new_from_dump(dump); + identity_class = LASSO_NODE_GET_CLASS(identity_node); + identity_class->add_child(identities, identity_node, TRUE); } xmlChar * -lasso_user_export(LassoUser *user) +lasso_user_dump(LassoUser *user) { - LassoNode *user_node, *identities, *assertions, *assertion_artifacts; - LassoNodeClass *class; + LassoNode *user_node, *assertions_node, *identities_node; + LassoNodeClass *user_class, *assertions_class, *identities_class; - /* set the user node */ user_node = lasso_node_new(); - class = LASSO_NODE_GET_CLASS(LASSO_NODE(user_node)); - class->set_name(LASSO_NODE(user_node), "User"); - - /* insert all of the identity of the user */ - g_hash_table_foreach(user->identities, lasso_user_node_identity_add, user); - - return(lasso_node_export(user)); + user_class = LASSO_NODE_GET_CLASS(user_node); + user_class->set_name(user_node, "User"); + + /* dump the assertions */ + assertions_node = lasso_node_new(); + assertions_class = LASSO_NODE_GET_CLASS(assertions_node); + assertions_class->set_name(assertions_node, "Assertions"); + g_hash_table_foreach(user->assertions, lasso_user_dump_assertion, assertions_node); + user_class->add_child(user_node, assertions_node, FALSE); + + /* dump the identities */ + identities_node = lasso_node_new(); + identities_class = LASSO_NODE_GET_CLASS(identities_node); + identities_class->set_name(identities_node, "Identities"); + g_hash_table_foreach(user->identities, lasso_user_dump_identity, identities_node); + user_class->add_child(user_node, identities_node, FALSE); + + return(lasso_node_export(user_node)); } void @@ -82,45 +83,23 @@ lasso_user_add_assertion(LassoUser *user, xmlChar *remote_providerID, LassoNode *assertion) { - g_hash_table_insert(user->assertions, remote_providerID, assertion); + g_hash_table_insert(user->assertions, g_strdup(remote_providerID), assertion); } LassoNode * lasso_user_get_assertion(LassoUser *user, - xmlChar *nameIdentifier) -{ - return(g_hash_table_lookup(user->assertions, nameIdentifier)); -} - -void -lasso_user_store_response(LassoUser *user, - xmlChar *assertionArtifact, - LassoResponse *response) + xmlChar *remote_providerID) { - g_hash_table_insert(user->assertion_artifacts, - g_strdup(assertionArtifact), - lasso_node_copy(LASSO_NODE(response))); + return(g_hash_table_lookup(user->assertions, remote_providerID)); } -LassoNode *lasso_user_get_assertionArtifact(LassoUser *user, - xmlChar *artifact) -{ - LassoNode *assertion; - - assertion = g_hash_table_lookup(user->assertion_artifacts, artifact); - if(assertion){ - g_hash_table_steal(user->assertion_artifacts, artifact); - } - - return(assertion); -} void lasso_user_add_identity(LassoUser *user, xmlChar *remote_providerID, LassoIdentity *identity) { - g_hash_table_insert(user->identities, remote_providerID, identity); + g_hash_table_insert(user->identities, g_strdup(remote_providerID), identity); } LassoIdentity* @@ -130,6 +109,7 @@ lasso_user_get_identity(LassoUser *user, return(g_hash_table_lookup(user->identities, remote_providerID)); } + /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ @@ -139,7 +119,6 @@ lasso_user_instance_init(LassoUser *user) { user->identities = g_hash_table_new(g_str_hash, g_str_equal); user->assertions = g_hash_table_new(g_str_hash, g_str_equal); - user->assertion_artifacts = g_hash_table_new(g_str_hash, g_str_equal); } static void @@ -172,15 +151,43 @@ GType lasso_user_get_type() { } LassoUser* -lasso_user_new(xmlChar *user_str) +lasso_user_new() +{ + LassoUser *user; + + user = LASSO_USER(g_object_new(LASSO_TYPE_USER, NULL)); + + return(user); +} + +LassoUser* +lasso_user_new_from_dump(xmlChar *dump) { + LassoNode *user_node, *identities_node; + LassoNodeClass *identities_class; + LassoIdentity *identity; + xmlNodePtr xmlNode; LassoUser *user; + xmlChar *remote_providerID; user = LASSO_USER(g_object_new(LASSO_TYPE_USER, NULL)); - if(user_str){ - /* parse the user str */ + user_node = lasso_node_new_from_dump(dump); + + /* set the assertions */ + + /* set the identities */ + identities_node = lasso_node_get_child(user, "Identities", NULL); + identities_class = LASSO_NODE_GET_CLASS(user_node); + xmlNode = identities_class->get_xmlNode(identities_node); + xmlNode = xmlNode->children; + while(xmlNode){ + if(xmlNode->type==XML_ELEMENT_NODE && xmlStrEqual(xmlNode->name, "Identity")){ + identity = lasso_identity_new(xmlGetProp(xmlNode, "RemoteProviderID")); + lasso_identity_set_localNameIdentifier(user); + } } + return(user); } |