diff options
| -rw-r--r-- | lasso/id-ff/user.c | 120 | ||||
| -rw-r--r-- | lasso/id-ff/user.h | 32 |
2 files changed, 122 insertions, 30 deletions
diff --git a/lasso/id-ff/user.c b/lasso/id-ff/user.c index 83d49a0f..e41c1029 100644 --- a/lasso/id-ff/user.c +++ b/lasso/id-ff/user.c @@ -28,38 +28,104 @@ /* public methods */ /*****************************************************************************/ -LassoIdentity* -lasso_user_find_identity(LassoUser *user, - gchar *remote_providerID) +static void +lasso_user_node_identity_add(xmlChar *key, LassoIdentity *identity, LassoNode *userNode) { - LassoIdentity *identity; - int index; + 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); */ - printf("nb identity %d\n", user->identities->len); - for(index = 0; index<user->identities->len; index++){ - identity = g_ptr_array_index(user->identities, index); - printf("provider id : %s\n", identity->remote_providerID); - if(!strcmp(identity->remote_providerID, remote_providerID)){ - return(identity); - } - } - - return(NULL); + /* 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); */ +} + +xmlChar * +lasso_user_export(LassoUser *user) +{ + LassoNode *user_node, identities, *assertions, *assertion_artifacts; + LassoNodeClass *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)); +} + +void +lasso_user_add_assertion(LassoUser *user, + xmlChar *remote_providerID, + LassoNode *assertion) +{ + g_hash_table_insert(user->assertions, remote_providerID, assertion); } -gint -lasso_user_add_assertion() +LassoNode * +lasso_user_get_assertion(LassoUser *user, + xmlChar *nameIdentifier) { + return(g_hash_table_lookup(user->assertions, nameIdentifier)); +} + +void +lasso_user_add_assertionArtifact(LassoUser *user, + xmlChar *assertionArtifact, + LassoAssertion *assertion) +{ + g_hash_table_insert(user->assertion_artifacts, assertionArtifact, assertion); +} + +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); } -gint +void lasso_user_add_identity(LassoUser *user, + xmlChar *remote_providerID, LassoIdentity *identity) { - g_ptr_array_add(user->identities, identity); - - return(1); + g_hash_table_insert(user->identities, remote_providerID, identity); +} + +LassoIdentity* +lasso_user_get_identity(LassoUser *user, + xmlChar *remote_providerID) +{ + return(g_hash_table_lookup(user->identities, remote_providerID)); } /*****************************************************************************/ @@ -69,13 +135,15 @@ lasso_user_add_identity(LassoUser *user, static void lasso_user_instance_init(LassoUser *user) { - user->identities = g_ptr_array_new(); - user->assertions = g_ptr_array_new(); + 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 lasso_user_class_init(LassoUserClass *klass) { + } GType lasso_user_get_type() { @@ -102,11 +170,15 @@ GType lasso_user_get_type() { } LassoUser* -lasso_user_new() +lasso_user_new(xmlChar *user_str) { LassoUser *user; user = LASSO_USER(g_object_new(LASSO_TYPE_USER, NULL)); + if(user_str){ + /* parse the user str */ + } + return(user); } diff --git a/lasso/id-ff/user.h b/lasso/id-ff/user.h index a7670526..29b80c3d 100644 --- a/lasso/id-ff/user.h +++ b/lasso/id-ff/user.h @@ -32,6 +32,7 @@ extern "C" { #include <lasso/xml/xml.h> #include <lasso/protocols/identity.h> +#include <lasso/protocols/elements/assertion.h> #define LASSO_TYPE_USER (lasso_user_get_type()) #define LASSO_USER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_USER, LassoUser)) @@ -47,8 +48,9 @@ struct _LassoUser { GObject parent; /*< public >*/ - GPtrArray *assertions; - GPtrArray *identities; + GHashTable *assertions; /* hash for assertions with nameIdentifier as key */ + GHashTable *identities; /* hash for identities with remote ProviderID as key */ + GHashTable *assertion_artifacts; /* has for temporary assertions with AssertionArtifact as key */ /*< private >*/ }; @@ -57,11 +59,29 @@ struct _LassoUserClass { GObjectClass parent; }; -LASSO_EXPORT GType lasso_user_get_type (void); -LASSO_EXPORT LassoUser* lasso_user_new (void); +LASSO_EXPORT GType lasso_user_get_type (void); +LASSO_EXPORT LassoUser* lasso_user_new (xmlChar *user_str); -LASSO_EXPORT LassoIdentity* lasso_user_find_identity (LassoUser *user, - gchar *remote_providerID); +LASSO_EXPORT void lasso_user_add_assertion (LassoUser *user, + xmlChar *remote_providerID, + LassoNode *assertion); + +LASSO_EXPORT LassoNode *lasso_user_get_assertion (LassoUser *user, + xmlChar *nameIdentifier); + +LASSO_EXPORT void lasso_user_add_assertionArtifact (LassoUser *user, + xmlChar *assertionArtifact, + LassoAssertion *assertion); + +LASSO_EXPORT LassoNode *lasso_user_get_assertionArtifact (LassoUser *user, + xmlChar *artifact); + +LASSO_EXPORT void lasso_user_add_identity (LassoUser *user, + xmlChar *remote_providerID, + LassoIdentity *identity); + +LASSO_EXPORT LassoIdentity *lasso_user_get_identity (LassoUser *user, + xmlChar *remote_providerID); #ifdef __cplusplus } |
