diff options
| -rw-r--r-- | lasso/id-ff/logout.c | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/lasso/id-ff/logout.c b/lasso/id-ff/logout.c index c3e633fe..f7fd91c3 100644 --- a/lasso/id-ff/logout.c +++ b/lasso/id-ff/logout.c @@ -34,6 +34,8 @@ lasso_logout_dump(LassoLogout *logout) LassoProfileContext *profileContext; gchar *dump; + g_return_val_if_fail(LASSO_IS_LOGOUT(logout), NULL); + return(dump); } @@ -43,24 +45,37 @@ lasso_logout_build_request_msg(LassoLogout *logout) LassoProfileContext *profileContext; LassoProvider *provider; xmlChar *protocolProfile; + + g_return_val_if_fail(LASSO_IS_LOGOUT(logout), NULL); profileContext = LASSO_PROFILE_CONTEXT(logout); /* get the prototocol profile of the logout */ provider = lasso_server_get_provider(profileContext->server, profileContext->remote_providerID); if(provider==NULL){ + debug(ERROR, "Provider %s not found\n", profileContext->remote_providerID); return(-1); } protocolProfile = lasso_provider_get_singleLogoutProtocolProfile(provider); if(protocolProfile==NULL){ + debug(ERROR, "Single Logout Protocol profile not found\n"); return(-2); } + debug(DEBUG, "protocol profile : %s\n", protocolProfile); if(xmlStrEqual(protocolProfile, lassoLibProtocolProfileSloSpSoap) || xmlStrEqual(protocolProfile, lassoLibProtocolProfileSloIdpSoap)){ + debug(DEBUG, "building a soap request message\n"); + profileContext->request_type = lassoHttpMethodSoap; profileContext->msg_url = lasso_provider_get_singleLogoutServiceURL(provider); profileContext->msg_body = lasso_node_export_to_soap(profileContext->request); } + else if(xmlStrEqual(protocolProfile,lassoLibProtocolProfileSloSpHttp)||xmlStrEqual(protocolProfile,lassoLibProtocolProfileSloIdpHttp)){ + debug(DEBUG, "building a http get request message\n"); + profileContext->request_type = lassoHttpMethodRedirect; + profileContext->msg_url = lasso_node_export_to_query(profileContext->request); + profileContext->msg_body = NULL; + } return(0); } @@ -72,22 +87,33 @@ lasso_logout_build_response_msg(LassoLogout *logout) LassoProvider *provider; xmlChar *protocolProfile; + g_return_val_if_fail(LASSO_IS_LOGOUT(logout), -1); + profileContext = LASSO_PROFILE_CONTEXT(logout); provider = lasso_server_get_provider(profileContext->server, profileContext->remote_providerID); if(provider==NULL){ - return(-1); + debug(ERROR, "Provider %s not found\n", profileContext->remote_providerID); + return(-2); } protocolProfile = lasso_provider_get_singleLogoutProtocolProfile(provider); if(protocolProfile==NULL){ - return(-2); + debug(ERROR, "Single Logout Protocol profile not found\n"); + return(-3); } if(xmlStrEqual(protocolProfile, lassoLibProtocolProfileSloSpSoap) || xmlStrEqual(protocolProfile, lassoLibProtocolProfileSloIdpSoap)){ + debug(DEBUG, "building a http get response message\n"); profileContext->msg_url = lasso_provider_get_singleLogoutServiceURL(provider); profileContext->msg_body = lasso_node_export_to_soap(profileContext->response); } + else if(xmlStrEqual(protocolProfile,lassoLibProtocolProfileSloSpHttp)||xmlStrEqual(protocolProfile,lassoLibProtocolProfileSloIdpHttp)){ + debug(DEBUG, "building a http get response message\n"); + profileContext->response_type = lassoHttpMethodRedirect; + profileContext->msg_url = lasso_node_export_to_query(profileContext->response); + profileContext->msg_body = NULL; + } return(0); } @@ -103,12 +129,19 @@ lasso_logout_init_request(LassoLogout *logout, xmlChar *content, *nameQualifier, *format; + g_return_val_if_fail(LASSO_IS_LOGOUT(logout), -1); + profileContext = LASSO_PROFILE_CONTEXT(logout); + profileContext->remote_providerID = remote_providerID; + /* get identity */ + printf("%s\n", profileContext->remote_providerID); identity = lasso_user_get_identity(profileContext->user, profileContext->remote_providerID); - if(identity==NULL) - return(-1); + if(identity==NULL){ + debug(ERROR, "error, identity not found\n"); + return(-2); + } /* get the name identifier (!!! depend on the provider type : SP or IDP !!!)*/ switch(logout->provider_type){ @@ -126,8 +159,10 @@ lasso_logout_init_request(LassoLogout *logout, } if(!nameIdentifier){ - return(-2); + debug(ERROR, "error, name identifier not found\n"); + return(-3); } + debug(DEBUG, "name identifier : %s\n", lasso_node_export(nameIdentifier)); /* build the request */ content = lasso_node_get_content(nameIdentifier); @@ -138,6 +173,7 @@ lasso_logout_init_request(LassoLogout *logout, nameQualifier, format); + debug(DEBUG, "Building the request message is ok\n"); return(0); } @@ -268,6 +304,9 @@ lasso_logout_new(LassoServer *server, LassoLogout *logout; LassoProfileContext *profileContext; + g_return_val_if_fail(LASSO_IS_SERVER(server), NULL); + g_return_val_if_fail(LASSO_IS_USER(user), NULL); + /* set the logout object */ logout = g_object_new(LASSO_TYPE_LOGOUT, NULL); logout->provider_type = provider_type; |
