summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lasso/id-ff/user.c55
-rw-r--r--lasso/id-ff/user.h14
-rw-r--r--python/environs/py_user.c8
-rw-r--r--python/environs/py_user.h2
-rw-r--r--python/examples/logout-from-idp.py4
-rw-r--r--python/examples/logout.py4
-rw-r--r--python/examples/user.py4
-rw-r--r--python/lasso.py4
-rw-r--r--python/lassomod.c16
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 */
};