diff options
| -rw-r--r-- | lasso/id-ff/user.c | 55 | ||||
| -rw-r--r-- | lasso/id-ff/user.h | 14 | ||||
| -rw-r--r-- | python/environs/py_user.c | 8 | ||||
| -rw-r--r-- | python/environs/py_user.h | 2 | ||||
| -rw-r--r-- | python/examples/logout-from-idp.py | 4 | ||||
| -rw-r--r-- | python/examples/logout.py | 4 | ||||
| -rw-r--r-- | python/examples/user.py | 4 | ||||
| -rw-r--r-- | python/lasso.py | 4 | ||||
| -rw-r--r-- | python/lassomod.c | 16 |
9 files changed, 79 insertions, 32 deletions
diff --git a/lasso/id-ff/user.c b/lasso/id-ff/user.c index 87a015d9..421b4783 100644 --- a/lasso/id-ff/user.c +++ b/lasso/id-ff/user.c @@ -74,18 +74,30 @@ lasso_user_add_identity(LassoUser *user, gchar *remote_providerID, LassoIdentity *identity) { + LassoIdentity *old_identity; + gboolean found; + int i; + g_return_val_if_fail(user!=NULL, -1); g_return_val_if_fail(remote_providerID!=NULL, -2); g_return_val_if_fail(identity!=NULL, -3); - LassoIdentity *old_identity; + /* add the remote provider id if not already saved */ + found = FALSE; + for(i = 0; i<user->identity_providerIDs->len; i++){ + if(xmlStrEqual(remote_providerID, g_ptr_array_index(user->identity_providerIDs, i))) + found = TRUE; + } + if(found==FALSE){ + g_ptr_array_add(user->identity_providerIDs, g_strdup(remote_providerID)); + } + /* add the identity, replace if one already exists */ old_identity = lasso_user_get_identity(user, remote_providerID); if (old_identity != NULL) { lasso_user_remove_identity(user, remote_providerID); lasso_identity_destroy(old_identity); } - g_hash_table_insert(user->identities, g_strdup(remote_providerID), identity); return(0); @@ -182,7 +194,7 @@ lasso_user_get_assertion(LassoUser *user, } gchar* -lasso_user_get_next_providerID(LassoUser *user) +lasso_user_get_next_assertion_remote_providerID(LassoUser *user) { gchar *remote_providerID; @@ -196,6 +208,21 @@ lasso_user_get_next_providerID(LassoUser *user) return(remote_providerID); } +gchar* +lasso_user_get_next_identity_remote_providerID(LassoUser *user) +{ + gchar *remote_providerID; + + g_return_val_if_fail(user!=NULL, NULL); + + if(user->identity_providerIDs->len==0) + return(NULL); + + remote_providerID = g_strdup(g_ptr_array_index(user->identity_providerIDs, 0)); + + return(remote_providerID); +} + LassoIdentity* lasso_user_get_identity(LassoUser *user, gchar *remote_providerID) @@ -207,7 +234,7 @@ lasso_user_get_identity(LassoUser *user, id = (LassoIdentity*)g_hash_table_lookup(user->identities, remote_providerID); if (id == NULL) { - debug(DEBUG, "No Identity found with remote ProviderID = %s\n", remote_providerID); + debug(WARNING, "No Identity found with remote ProviderID = %s\n", remote_providerID); } return(id); @@ -247,6 +274,7 @@ lasso_user_remove_identity(LassoUser *user, gchar *remote_providerID) { LassoIdentity *identity; + int i; g_return_val_if_fail(user!=NULL, -1); g_return_val_if_fail(remote_providerID!=NULL, -2); @@ -260,6 +288,15 @@ lasso_user_remove_identity(LassoUser *user, debug(DEBUG, "Failed to remove identity for remote Provider %s\n", remote_providerID); } + /* remove the identity remote provider id */ + for(i = 0; i<user->identity_providerIDs->len; i++){ + if(xmlStrEqual(remote_providerID, g_ptr_array_index(user->identity_providerIDs, i))){ + debug(DEBUG, "Remove assertion of %s\n", remote_providerID); + g_ptr_array_remove_index(user->identity_providerIDs, i); + break; + } + } + return(0); } @@ -283,8 +320,10 @@ static void lasso_user_instance_init(LassoUser *user) { user->assertion_providerIDs = 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->identity_providerIDs = g_ptr_array_new(); + user->identities = g_hash_table_new(g_str_hash, g_str_equal); } static void @@ -373,6 +412,10 @@ lasso_user_new_from_dump(gchar *dump) /* assertion node */ assertion_node = lasso_node_new_from_xmlNode(assertion_xmlNode); remote_providerID = lasso_node_get_attr_value(assertion_node, LASSO_USER_REMOTE_PROVIDERID_NODE); + if(remote_providerID==NULL){ + debug(ERROR, "No remote provider id for assertion\n"); + continue; + } lasso_user_add_assertion(user, remote_providerID, lasso_node_copy(assertion_node)); g_free(remote_providerID); lasso_node_destroy(assertion_node); @@ -415,7 +458,7 @@ lasso_user_new_from_dump(gchar *dump) lasso_node_destroy(nameIdentifier_node); lasso_node_destroy(remote_nameIdentifier_node); } - + printf("avant add identity\n"); lasso_user_add_identity(user, remote_providerID, identity); g_free(remote_providerID); diff --git a/lasso/id-ff/user.h b/lasso/id-ff/user.h index 22a6128e..c039dff5 100644 --- a/lasso/id-ff/user.h +++ b/lasso/id-ff/user.h @@ -49,6 +49,8 @@ struct _LassoUser { /*< public >*/ GPtrArray *assertion_providerIDs; /* list of the remote provider ids for assertions hash table */ GHashTable *assertions; /* hash for assertions with remote providerID as key */ + + GPtrArray *identity_providerIDs; /* list of the remote provider ids for identities hash table */ GHashTable *identities; /* hash for identities with remote ProviderID as key */ /*< private >*/ @@ -64,10 +66,6 @@ LASSO_EXPORT LassoUser *lasso_user_new (void); LASSO_EXPORT LassoUser *lasso_user_new_from_dump (gchar *dump); -LASSO_EXPORT void lasso_user_destroy (LassoUser *user); - -LASSO_EXPORT gchar *lasso_user_dump (LassoUser *user); - LASSO_EXPORT gint lasso_user_add_assertion (LassoUser *user, gchar *remote_providerID, LassoNode *assertion); @@ -76,13 +74,19 @@ LASSO_EXPORT gint lasso_user_add_identity (LassoUser *use gchar *remote_providerID, LassoIdentity *identity); +LASSO_EXPORT void lasso_user_destroy (LassoUser *user); + +LASSO_EXPORT gchar *lasso_user_dump (LassoUser *user); + LASSO_EXPORT LassoNode *lasso_user_get_assertion (LassoUser *user, gchar *remote_providerID); LASSO_EXPORT LassoIdentity *lasso_user_get_identity (LassoUser *user, gchar *remote_providerID); -LASSO_EXPORT gchar *lasso_user_get_next_providerID (LassoUser *user); +LASSO_EXPORT gchar *lasso_user_get_next_assertion_remote_providerID (LassoUser *user); + +LASSO_EXPORT gchar *lasso_user_get_next_identity_remote_providerID (LassoUser *user); LASSO_EXPORT gint lasso_user_remove_assertion (LassoUser *user, gchar *remote_providerID); diff --git a/python/environs/py_user.c b/python/environs/py_user.c index e182f643..92f66b7e 100644 --- a/python/environs/py_user.c +++ b/python/environs/py_user.c @@ -126,17 +126,17 @@ PyObject *user_get_assertion(PyObject *self, PyObject *args) { return (LassoNode_wrap(assertion_node)); } -PyObject *user_get_next_providerID(PyObject *self, PyObject *args) { +PyObject *user_get_next_assertion_remote_providerID(PyObject *self, PyObject *args) { PyObject *user_obj; gchar *remote_providerID; - if (CheckArgs(args, "O:user_get_next_providerID")) { - if(!PyArg_ParseTuple(args, (char *) "O:user_get_next_providerID", &user_obj, &remote_providerID)) + if (CheckArgs(args, "O:user_get_next_assertion_remote_providerID")) { + if(!PyArg_ParseTuple(args, (char *) "O:user_get_next_assertion_remote_providerID", &user_obj, &remote_providerID)) return NULL; } else return NULL; - remote_providerID = lasso_user_get_next_providerID(LassoUser_get(user_obj)); + remote_providerID = lasso_user_get_next_assertion_remote_providerID(LassoUser_get(user_obj)); if(remote_providerID==NULL){ Py_INCREF(Py_None); return (Py_None); diff --git a/python/environs/py_user.h b/python/environs/py_user.h index fa752e06..b3d253c5 100644 --- a/python/environs/py_user.h +++ b/python/environs/py_user.h @@ -43,7 +43,7 @@ PyObject *user_add_assertion(PyObject *self, PyObject *args); PyObject *user_destroy(PyObject *self, PyObject *args); PyObject *user_dump(PyObject *self, PyObject *args); PyObject *user_get_assertion(PyObject *self, PyObject *args); -PyObject *user_get_next_providerID(PyObject *self, PyObject *args); +PyObject *user_get_next_assertion_remote_providerID(PyObject *self, PyObject *args); PyObject *user_remove_assertion(PyObject *self, PyObject *args); #endif /* __PYLASSO_PY_USER_H__ */ diff --git a/python/examples/logout-from-idp.py b/python/examples/logout-from-idp.py index 3732cc0e..38266d44 100644 --- a/python/examples/logout-from-idp.py +++ b/python/examples/logout-from-idp.py @@ -32,7 +32,7 @@ print user.dump() # requests : logout = lasso.Logout.new(server, user, lasso.providerTypeIdp); -next_provider_id = user.get_next_providerID(); +next_provider_id = user.get_next_assertion_remote_providerID(); while(next_provider_id): assertion = user.get_assertion(next_provider_id) @@ -44,7 +44,7 @@ while(next_provider_id): print 'body : ', logout.msg_body user.remove_assertion(next_provider_id) - next_provider_id = user.get_next_providerID() + next_provider_id = user.get_next_assertion_remote_providerID() print "End of logout ..." print "Dump of user environ :" diff --git a/python/examples/logout.py b/python/examples/logout.py index faa31e4b..6dcbecce 100644 --- a/python/examples/logout.py +++ b/python/examples/logout.py @@ -13,13 +13,13 @@ spserver = lasso.Server.new("../../examples/sp.xml", spserver.add_provider("../../examples/idp.xml", None, None) spserver.add_provider("../../examples/idp2.xml", None, None) -spuser_dump = "<LassoUser><LassoIdentities><LassoIdentity RemoteProviderID=\"https://identity-provider:2003/liberty-alliance/metadata\"><LassoLocalNameIdentifier><NameIdentifier NameQualifier=\"qualifier.com\" Format=\"federated\">11111111111111111111111111</NameIdentifier></LassoLocalNameIdentifier></LassoIdentity><LassoIdentity RemoteProviderID=\"https://identity-provider2:2003/liberty-alliance/metadata\"><LassoLocalNameIdentifier><NameIdentifier NameQualifier=\"qualifier.com\" Format=\"federated\">22222222222222222222222222</NameIdentifier></LassoLocalNameIdentifier></LassoIdentity></LassoIdentities></LassoUser>" +spuser_dump = "<LassoUser><LassoAssertions><LassoAssertion RemoteProviderID=\"https://identity-provider:2003/liberty-alliance/metadata\"><Assertion AssertionID=\"CD8SCD7SC6SDCD5CDSDCD88SDCDSD\"></Assertion></LassoAssertion></LassoAssertions><LassoIdentities><LassoIdentity RemoteProviderID=\"https://identity-provider:2003/liberty-alliance/metadata\"><LassoLocalNameIdentifier><NameIdentifier NameQualifier=\"qualifier.com\" Format=\"federated\">11111111111111111111111111</NameIdentifier></LassoLocalNameIdentifier></LassoIdentity><LassoIdentity RemoteProviderID=\"https://identity-provider2:2003/liberty-alliance/metadata\"><LassoLocalNameIdentifier><NameIdentifier NameQualifier=\"qualifier.com\" Format=\"federated\">22222222222222222222222222</NameIdentifier></LassoLocalNameIdentifier></LassoIdentity></LassoIdentities></LassoUser>" spuser = lasso.User.new_from_dump(spuser_dump) # LogoutRequest : splogout = lasso.Logout.new(spserver, spuser, lasso.providerTypeSp) -splogout.init_request("https://identity-provider:2003/liberty-alliance/metadata") +splogout.init_request() splogout.build_request_msg() request_msg = splogout.msg_body diff --git a/python/examples/user.py b/python/examples/user.py index ee9f8cfe..6fd5de1a 100644 --- a/python/examples/user.py +++ b/python/examples/user.py @@ -18,7 +18,7 @@ user = lasso.User.new_from_dump(user_dump); print "Dump of user environ : %s\n" % user.dump() -next_provider_id = user.get_next_providerID() +next_provider_id = user.get_next_assertion_remote_providerID() while(next_provider_id): print "Next provider id : ", next_provider_id assertion = user.get_assertion(next_provider_id) @@ -26,7 +26,7 @@ while(next_provider_id): print "Remove his assertion from user ..." user.remove_assertion(next_provider_id) - next_provider_id = user.get_next_providerID() + next_provider_id = user.get_next_assertion_remote_providerID() print "All assertions deleted\n" diff --git a/python/lasso.py b/python/lasso.py index dd8690c9..71e170f8 100644 --- a/python/lasso.py +++ b/python/lasso.py @@ -861,8 +861,8 @@ class User: def get_assertion(self, providerID): return Node(lassomod.user_get_assertion(self, providerID)) - def get_next_providerID(self): - return lassomod.user_get_next_providerID(self) + def get_next_assertion_remote_providerID(self): + return lassomod.user_get_next_assertion_remote_providerID(self) def remove_assertion(self, providerID): lassomod.user_remove_assertion(self, providerID) diff --git a/python/lassomod.c b/python/lassomod.c index 81c9c92c..ac6439fe 100644 --- a/python/lassomod.c +++ b/python/lassomod.c @@ -258,14 +258,14 @@ static PyMethodDef lasso_methods[] = { {"server_dump", server_dump, METH_VARARGS}, /* py_user.h */ - {"user_new", user_new, METH_VARARGS}, - {"user_new_from_dump", user_new_from_dump, METH_VARARGS}, - {"user_add_assertion", user_add_assertion, METH_VARARGS}, - {"user_destroy", user_destroy, METH_VARARGS}, - {"user_dump", user_dump, METH_VARARGS}, - {"user_get_assertion", user_get_assertion, METH_VARARGS}, - {"user_get_next_providerID", user_get_next_providerID, METH_VARARGS}, - {"user_remove_assertion", user_remove_assertion, METH_VARARGS}, + {"user_new", user_new, METH_VARARGS}, + {"user_new_from_dump", user_new_from_dump, METH_VARARGS}, + {"user_add_assertion", user_add_assertion, METH_VARARGS}, + {"user_destroy", user_destroy, METH_VARARGS}, + {"user_dump", user_dump, METH_VARARGS}, + {"user_get_assertion", user_get_assertion, METH_VARARGS}, + {"user_get_next_assertion_remote_providerID", user_get_next_assertion_remote_providerID, METH_VARARGS}, + {"user_remove_assertion", user_remove_assertion, METH_VARARGS}, {NULL, NULL} /* End of Methods Sentinel */ }; |
