summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Clapies <nclapies@entrouvert.com>2004-08-27 16:28:11 +0000
committerNicolas Clapies <nclapies@entrouvert.com>2004-08-27 16:28:11 +0000
commitecbb17fb4ce52b378ee92563691f3e3d63b08020 (patch)
tree1af81997d5dbca7f2dc59c980e8498bb35cf2fb5
parent8a333c67215c8d6eab42534e97df3f4945c290c9 (diff)
downloadlasso-ecbb17fb4ce52b378ee92563691f3e3d63b08020.tar.gz
lasso-ecbb17fb4ce52b378ee92563691f3e3d63b08020.tar.xz
lasso-ecbb17fb4ce52b378ee92563691f3e3d63b08020.zip
*** empty log message ***
-rw-r--r--lasso/id-ff/logout.c139
1 files changed, 129 insertions, 10 deletions
diff --git a/lasso/id-ff/logout.c b/lasso/id-ff/logout.c
index 38e7e9c0..cbbdb4b8 100644
--- a/lasso/id-ff/logout.c
+++ b/lasso/id-ff/logout.c
@@ -52,15 +52,43 @@ struct _LassoLogoutPrivate
gchar *
lasso_logout_dump(LassoLogout *logout)
{
- gchar *dump = NULL;
- LassoNode *logout_node = NULL;
- LassoNodeClass *logout_class = NULL;
+ LassoNode *initial_node = NULL, *child_node = NULL;
+ gchar *dump = NULL, *parent_dump = NULL;
+ LassoNode *node = NULL;
g_return_val_if_fail(LASSO_IS_LOGOUT(logout), NULL);
- logout_node = lasso_node_new();
- logout_class = LASSO_NODE_GET_CLASS(logout_node);
- logout_class->set_name(logout_node, LASSO_LOGOUT_NODE);
+ parent_dump = lasso_profile_dump(LASSO_PROFILE(logout), "Logout");
+ node = lasso_node_new_from_dump(parent_dump);
+ g_free(parent_dump);
+
+ if (logout->initial_request != NULL) {
+ initial_node = lasso_node_new();
+ LASSO_NODE_GET_CLASS(initial_node)->set_name(initial_node, "InitialLogoutResquest");
+ child_node = lasso_node_copy(logout->initial_request);
+ LASSO_NODE_GET_CLASS(initial_node)->add_child(initial_node, child_node, FALSE);
+ lasso_node_destroy(child_node);
+
+ LASSO_NODE_GET_CLASS(node)->add_child(node, initial_node, FALSE);
+ }
+
+ if (logout->initial_response != NULL) {
+ initial_node = lasso_node_new();
+ LASSO_NODE_GET_CLASS(initial_node)->set_name(initial_node, "InitialLogoutResponse");
+ child_node = lasso_node_copy(logout->initial_response);
+ LASSO_NODE_GET_CLASS(initial_node)->add_child(initial_node, child_node, FALSE);
+ lasso_node_destroy(child_node);
+
+ LASSO_NODE_GET_CLASS(node)->add_child(node, initial_node, FALSE);
+ }
+
+ if (logout->initial_remote_providerID != NULL) {
+ LASSO_NODE_GET_CLASS(node)->new_child(node, "InitialRemoteProviderID",
+ logout->initial_remote_providerID, FALSE);
+ }
+
+ dump = lasso_node_export(node);
+ lasso_node_destroy(node);
return(dump);
}
@@ -211,7 +239,6 @@ lasso_logout_build_response_msg(LassoLogout *logout)
LassoProfile *profile;
LassoProvider *provider;
gchar *url, *query;
- const gchar *separator = "?";
GError *err = NULL;
gint ret = 0;
@@ -248,13 +275,25 @@ lasso_logout_build_response_msg(LassoLogout *logout)
break;
case lassoHttpMethodRedirect:
url = lasso_provider_get_singleLogoutServiceReturnURL(provider, profile->provider_type, NULL);
+ if (url == NULL) {
+ message(G_LOG_LEVEL_CRITICAL, "Single logout service return url not found\n");
+ ret = -1;
+ goto done;
+ }
+
query = lasso_node_export_to_query(profile->response,
profile->server->signature_method,
profile->server->private_key);
- profile->msg_url = g_strjoin(separator, url, query);
+
+ profile->msg_url = g_new(gchar, strlen(url)+strlen(query)+1+1);
+ g_sprintf(profile->msg_url, "%s?%s", url, query);
profile->msg_body = NULL;
- xmlFree(url);
- xmlFree(query);
+
+ if (profile->msg_url == NULL) {
+ message(G_LOG_LEVEL_CRITICAL, "Error while setting msg_url\n");
+ ret = -1;
+ goto done;
+ }
break;
default:
message(G_LOG_LEVEL_CRITICAL, "Invalid HTTP method\n");
@@ -1045,3 +1084,83 @@ lasso_logout_new(LassoServer *server,
return(logout);
}
+
+LassoLogout*
+lasso_logout_new_from_dump(LassoServer *server,
+ gchar *dump)
+{
+ LassoLogout *logout;
+
+ g_return_val_if_fail(LASSO_IS_SERVER(server), NULL);
+ g_return_val_if_fail(dump != NULL, NULL);
+
+/* logout = LASSO_LOGOUT(g_object_new(LASSO_TYPE_LOGOUT, */
+/* "server", lasso_server_copy(server), */
+/* NULL)); */
+
+/* node_dump = lasso_node_new_from_dump(dump); */
+
+ /* profile attributes */
+/* LASSO_PROFILE(logout)->nameIdentifier = lasso_node_get_child_content(node_dump, "NameIdentifier", */
+/* lassoLassoHRef, NULL); */
+/* LASSO_PROFILE(logout)->remote_providerID = lasso_node_get_child_content(node_dump, "RemoteProviderID", */
+/* lassoLassoHRef, NULL); */
+/* LASSO_PROFILE(logout)->msg_url = lasso_node_get_child_content(node_dump, "MsgUrl", */
+/* lassoLassoHRef, NULL); */
+/* LASSO_PROFILE(logout)->msg_body = lasso_node_get_child_content(node_dump, "MsgBody", */
+/* lassoLassoHRef, NULL); */
+/* LASSO_PROFILE(logout)->msg_relayState = lasso_node_get_child_content(node_dump, "MsgRelayState", */
+/* lassoLassoHRef, NULL); */
+
+
+ /* rebuild request */
+/* type = lasso_node_get_child_content(node_dump, "RequestType", lassoLassoHRef, NULL); */
+/* LASSO_PROFILE(logout)->request_type = atoi(type); */
+/* xmlFree(type); */
+
+/* if (LASSO_PROFILE(logout)->request_type == lassoMessageTypeLogoutRequest) { */
+/* request_node = lasso_node_get_child(node_dump, "LogoutRequest", lassoLibHRef, NULL); */
+/* } */
+/* if (request_node != NULL) { */
+/* export = lasso_node_export(request_node); */
+/* if (LASSO_PROFILE(logout)->request_type == lassoMessageTypeLogoutRequest) { */
+/* LASSO_PROFILE(logout)->request = lasso_logout_request_new_from_export(export, */
+/* lassoNodeExportTypeXml); */
+/* g_free(export); */
+/* lasso_node_destroy(request_node); */
+/* } */
+
+ /* /\* rebuild response *\/ */
+/* type = lasso_node_get_child_content(node_dump, "ResponseType", lassoLassoHRef, NULL); */
+/* LASSO_PROFILE(login)->response_type = atoi(type); */
+/* xmlFree(type); */
+
+/* if (LASSO_PROFILE(logout)->response_type == lassoMessageTypeAuthnResponse) { */
+/* response_node = lasso_node_get_child(node_dump, "AuthnResponse", lassoLibHRef, NULL); */
+/* } */
+/* else if (LASSO_PROFILE(logout)->response_type == lassoMessageTypeResponse) { */
+/* response_node = lasso_node_get_child(node_dump, "Response", lassoSamlProtocolHRef, NULL); */
+/* } */
+/* if (response_node != NULL) { */
+/* export = lasso_node_export(response_node); */
+/* if (LASSO_PROFILE(logout)->response_type == lassoMessageTypeAuthnResponse) { */
+/* LASSO_PROFILE(logout)->response = lasso_authn_response_new_from_export(export, */
+/* lassoNodeExportTypeXml); */
+/* } */
+/* else if (LASSO_PROFILE(logout)->response_type == lassoMessageTypeResponse) { */
+/* LASSO_PROFILE(logout)->response = lasso_response_new_from_export(export, */
+/* lassoNodeExportTypeXml); */
+/* } */
+/* g_free(export); */
+/* lasso_node_destroy(response_node); */
+/* } */
+
+/* type = lasso_node_get_child_content(node_dump, "ProviderType", lassoLassoHRef, NULL); */
+/* LASSO_PROFILE(logout)->provider_type = atoi(type); */
+/* xmlFree(type); */
+
+ /* logout attributes */
+
+
+ return(logout);
+}