summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lasso/id-ff/user.c120
-rw-r--r--lasso/id-ff/user.h32
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
}