summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValery Febvre <vfebvre at easter-eggs.com>2004-07-20 17:20:21 +0000
committerValery Febvre <vfebvre at easter-eggs.com>2004-07-20 17:20:21 +0000
commit4a37000286d12a58aeca6280a41c5aa2bd5b6b26 (patch)
treead733cd15c0520e8cfa26e184d7b0e4af1328839
parentd0a420890594745e24f8e41bd261c9615cd44c49 (diff)
Added method lasso_user_remove_identity
-rw-r--r--lasso/id-ff/user.c43
-rw-r--r--lasso/id-ff/user.h4
2 files changed, 45 insertions, 2 deletions
diff --git a/lasso/id-ff/user.c b/lasso/id-ff/user.c
index bfa982b7..87a015d9 100644
--- a/lasso/id-ff/user.c
+++ b/lasso/id-ff/user.c
@@ -78,6 +78,14 @@ lasso_user_add_identity(LassoUser *user,
g_return_val_if_fail(remote_providerID!=NULL, -2);
g_return_val_if_fail(identity!=NULL, -3);
+ LassoIdentity *old_identity;
+
+ 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);
@@ -195,7 +203,14 @@ lasso_user_get_identity(LassoUser *user,
g_return_val_if_fail(user!=NULL, NULL);
g_return_val_if_fail(remote_providerID!=NULL, NULL);
- return(g_hash_table_lookup(user->identities, remote_providerID));
+ LassoIdentity *id;
+
+ 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);
+ }
+
+ return(id);
}
gint
@@ -210,7 +225,10 @@ lasso_user_remove_assertion(LassoUser *user,
/* remove the assertion */
assertion = lasso_user_get_assertion(user, remote_providerID);
- g_hash_table_steal(user->assertions, remote_providerID);
+ if (assertion != NULL) {
+ g_hash_table_steal(user->assertions, remote_providerID);
+ lasso_node_destroy(assertion);
+ }
/* remove the remote provider id */
for(i = 0; i<user->assertion_providerIDs->len; i++){
@@ -224,6 +242,27 @@ lasso_user_remove_assertion(LassoUser *user,
return(0);
}
+gint
+lasso_user_remove_identity(LassoUser *user,
+ gchar *remote_providerID)
+{
+ LassoIdentity *identity;
+
+ g_return_val_if_fail(user!=NULL, -1);
+ g_return_val_if_fail(remote_providerID!=NULL, -2);
+
+ /* remove the identity */
+ identity = lasso_user_get_identity(user, remote_providerID);
+ if (identity != NULL) {
+ g_hash_table_steal(user->identities, remote_providerID);
+ }
+ else {
+ debug(DEBUG, "Failed to remove identity for remote Provider %s\n", remote_providerID);
+ }
+
+ return(0);
+}
+
/*****************************************************************************/
/* overrided parent class methods */
/*****************************************************************************/
diff --git a/lasso/id-ff/user.h b/lasso/id-ff/user.h
index 9cc2964f..22a6128e 100644
--- a/lasso/id-ff/user.h
+++ b/lasso/id-ff/user.h
@@ -86,6 +86,10 @@ LASSO_EXPORT gchar *lasso_user_get_next_providerID (LassoUser *user);
LASSO_EXPORT gint lasso_user_remove_assertion (LassoUser *user,
gchar *remote_providerID);
+
+LASSO_EXPORT gint lasso_user_remove_identity (LassoUser *user,
+ gchar *remote_providerID);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */