diff options
| -rw-r--r-- | lasso/Attic/protocols/logout_request.c | 154 | ||||
| -rw-r--r-- | lasso/Attic/protocols/logout_request.h | 10 | ||||
| -rw-r--r-- | lasso/Attic/protocols/logout_response.c | 216 | ||||
| -rw-r--r-- | lasso/Attic/protocols/logout_response.h | 21 |
4 files changed, 313 insertions, 88 deletions
diff --git a/lasso/Attic/protocols/logout_request.c b/lasso/Attic/protocols/logout_request.c index d570a83c..4053fb90 100644 --- a/lasso/Attic/protocols/logout_request.c +++ b/lasso/Attic/protocols/logout_request.c @@ -26,10 +26,17 @@ #include <lasso/protocols/logout_request.h> #include <lasso/xml/saml_name_identifier.h> + +/*****************************************************************************/ +/* private methods */ +/*****************************************************************************/ + + /*****************************************************************************/ /* public methods */ /*****************************************************************************/ + /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ @@ -67,46 +74,125 @@ GType lasso_logout_request_get_type() { return this_type; } -LassoNode* +LassoNode * lasso_logout_request_new(const xmlChar *providerID, const xmlChar *nameIdentifier, const xmlChar *nameQualifier, const xmlChar *format) { - LassoNode *request, *identifier; + LassoNode *request, *identifier; + + request = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_REQUEST, NULL)); + + /* RequestID */ + lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), + (const xmlChar *)lasso_build_unique_id(32)); + /* MajorVersion */ + lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), + lassoLibMajorVersion); + /* MinorVersion */ + lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), + lassoLibMinorVersion); + /* IssueInstant */ + lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request), + lasso_get_current_time()); + /* ProviderID */ + lasso_lib_logout_request_set_providerID(LASSO_LIB_LOGOUT_REQUEST(request), + providerID); + + identifier = lasso_saml_name_identifier_new(nameIdentifier); + lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(identifier), nameQualifier); + lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(identifier), format); + + lasso_lib_logout_request_set_nameIdentifier(LASSO_LIB_LOGOUT_REQUEST(request), + LASSO_SAML_NAME_IDENTIFIER(identifier)); + + return(request); +} + +LassoNode * +lasso_logout_request_new_from_soap(const xmlChar *soap_buffer) +{ + LassoNode *request; + + LassoNode *envelope, *lassoNode_request; + xmlNodePtr xmlNode_request; + + LassoNodeClass *class; + + request = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_REQUEST, NULL)); + + envelope = lasso_node_new(NULL); + lasso_node_parse_memory(envelope, soap_buffer); + lassoNode_request = lasso_node_get_child(envelope, "LogoutRequest"); + + class = LASSO_NODE_GET_CLASS(lassoNode_request); + xmlNode_request = xmlCopyNode(class->get_xmlNode(LASSO_NODE(lassoNode_request)), 1); + + class = LASSO_NODE_GET_CLASS(request); + class->set_xmlNode(LASSO_NODE(request), xmlNode_request); + g_object_unref(lassoNode_request); + + return(request); +} + +LassoNode * +lasso_logout_request_new_from_query(const xmlChar *query) +{ + LassoNode *request, *identifier; + + xmlChar *relayState, *sessionIndex, *consent; + + GData *gd; + + request = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_REQUEST, NULL)); + + gd = lasso_query_to_dict(query); - g_return_val_if_fail(providerID != NULL, NULL); - g_return_val_if_fail(nameIdentifier != NULL, NULL); - g_return_val_if_fail(nameQualifier != NULL, NULL); - g_return_val_if_fail(format != NULL, NULL); + /* RequestID */ + lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0)); - request = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_REQUEST, NULL)); + /* MajorVersion */ + lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MajorVersion"), 0)); + + /* MinorVersion */ + lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MinorVersion"), 0)); + + /* IssueInstant */ + lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IssueInstance"), 0)); + + /* ProviderID */ + lasso_lib_logout_request_set_providerID(LASSO_LIB_LOGOUT_REQUEST(request), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProviderID"), 0)); - /* Set ONLY required elements/attributs */ - /* RequestID */ - lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), - (const xmlChar *)lasso_build_unique_id(32)); - /* MajorVersion */ - lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), - lassoLibMajorVersion); - /* MinorVersion */ - lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), - lassoLibMinorVersion); - /* IssueInstant */ - lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request), - lasso_get_current_time()); - /* ProviderID */ - lasso_lib_logout_request_set_providerID(LASSO_LIB_LOGOUT_REQUEST(request), - providerID); - - identifier = lasso_saml_name_identifier_new(nameIdentifier); - lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(identifier), - nameQualifier); - lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(identifier), - format); - - lasso_lib_logout_request_set_nameIdentifier(LASSO_LIB_LOGOUT_REQUEST(request), - LASSO_SAML_NAME_IDENTIFIER(identifier)); - - return (request); + /* NameIdentifier */ + identifier = lasso_saml_name_identifier_new(lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "NameIdentifier"), 0)); + lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(identifier), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "NameQualifier"), 0)); + + lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(identifier), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "Format"), 0)); + + lasso_lib_logout_request_set_nameIdentifier(LASSO_LIB_LOGOUT_REQUEST(request), identifier); + + /* RelayState */ + relayState = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0); + if(relayState!=NULL) + lasso_lib_logout_request_set_relayState(LASSO_LIB_LOGOUT_REQUEST(request), relayState); + + /* SessionIndex */ + sessionIndex = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "SessionIndex"), 0); + if(sessionIndex!=NULL) + lasso_lib_logout_request_set_sessionIndex(LASSO_SAML_NAME_IDENTIFIER(identifier), sessionIndex); + + /* consent */ + consent = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "consent"), 0); + if(consent!=NULL) + lasso_lib_logout_request_set_consent(LASSO_LIB_LOGOUT_REQUEST(request), consent); + + return(request); } diff --git a/lasso/Attic/protocols/logout_request.h b/lasso/Attic/protocols/logout_request.h index bf45fbbb..60b762f1 100644 --- a/lasso/Attic/protocols/logout_request.h +++ b/lasso/Attic/protocols/logout_request.h @@ -52,11 +52,11 @@ struct _LassoLogoutRequestClass { LassoLibLogoutRequestClass parent; }; -LASSO_EXPORT GType lasso_logout_request_get_type (void); -LASSO_EXPORT LassoNode* lasso_logout_request_new (const xmlChar *providerID, - const xmlChar *nameIdentifier, - const xmlChar *nameQualifier, - const xmlChar *format); +LASSO_EXPORT GType lasso_logout_request_get_type (void); +LASSO_EXPORT LassoNode* lasso_logout_request_new (const xmlChar *providerID, + const xmlChar *nameIdentifier, + const xmlChar *nameQualifier, + const xmlChar *format); #ifdef __cplusplus } diff --git a/lasso/Attic/protocols/logout_response.c b/lasso/Attic/protocols/logout_response.c index d1d81850..199d5a85 100644 --- a/lasso/Attic/protocols/logout_response.c +++ b/lasso/Attic/protocols/logout_response.c @@ -29,6 +29,12 @@ /* public methods */ /*****************************************************************************/ + +/*****************************************************************************/ +/* private methods */ +/*****************************************************************************/ + + /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ @@ -71,51 +77,171 @@ lasso_logout_response_new(const xmlChar *providerID, const xmlChar *statusCodeValue, LassoNode *request) { - /* FIXME : change request type */ - LassoNode *response, *ss, *ssc; - xmlChar *inResponseTo, *recipient, *relayState; + LassoNode *response, *ss, *ssc; + xmlChar *inResponseTo, *recipient, *relayState; + + response = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_RESPONSE, NULL)); + + /* Set ONLY required elements/attributs */ + /* ResponseID */ + lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + (const xmlChar *)lasso_build_unique_id(32)); + /* MajorVersion */ + lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + lassoLibMajorVersion); + /* MinorVersion */ + lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + lassoLibMinorVersion); + /* IssueInstant */ + lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + lasso_get_current_time()); + /* ProviderID */ + lasso_lib_status_response_set_providerID(LASSO_LIB_STATUS_RESPONSE(response), + providerID); + + inResponseTo = xmlNodeGetContent((xmlNodePtr)lasso_node_get_attr(request, "RequestID")); + lasso_samlp_response_abstract_set_inResponseTo(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + inResponseTo); + + + recipient = lasso_node_get_content(lasso_node_get_child(request, "ProviderID")); + lasso_samlp_response_abstract_set_recipient(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + recipient); + + relayState = lasso_node_get_content(lasso_node_get_child(request, "RelayState")); + if(relayState!=NULL) + lasso_lib_status_response_set_relayState(LASSO_LIB_STATUS_RESPONSE(response), + relayState); + + ss = lasso_samlp_status_new(); + ssc = lasso_samlp_status_code_new(); + lasso_samlp_status_code_set_value(LASSO_SAMLP_STATUS_CODE(ssc), + statusCodeValue); + lasso_samlp_status_set_statusCode(LASSO_SAMLP_STATUS(ss), + LASSO_SAMLP_STATUS_CODE(ssc)); + lasso_lib_status_response_set_status(LASSO_LIB_STATUS_RESPONSE(response), + LASSO_SAMLP_STATUS(ss)); + + return(response); +} + +// build a LogoutRespose from a soap form LogoutRequest +LassoNode * +lasso_logout_response_new_from_request_soap(const xmlChar *soap_buffer, + const xmlChar *providerID, + const xmlChar *statusCodeValue) +{ + LassoNode *request, *response; + + request = lasso_logout_request_new_from_soap(soap_buffer); + + response = lasso_logout_response_new(providerID, + statusCodeValue, + request); + + return(response); +} + +// build a LogoutResponse from a query form LogoutRequest +LassoNode * +lasso_logout_response_new_from_request_query(const xmlChar *query, + const xmlChar *providerID, + const xmlChar *statusCodeValue) +{ + LassoNode *request, *response; + + request = lasso_logout_request_new_from_query(query); + + response = lasso_logout_response_new(providerID, + statusCodeValue, + request); + + return(response); +} + + +LassoNode * +lasso_logout_response_new_from_soap(const xmlChar *soap_buffer) +{ + LassoNode *response; + + LassoNode *envelope, *lassoNode_response; + xmlNodePtr xmlNode_response; + + LassoNodeClass *class; + + response = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_RESPONSE, NULL)); + + envelope = lasso_node_new(NULL); + lasso_node_parse_memory(envelope, soap_buffer); + lassoNode_response = lasso_node_get_child(envelope, "LogoutResponse"); + + class = LASSO_NODE_GET_CLASS(lassoNode_response); + xmlNode_response = xmlCopyNode(class->get_xmlNode(LASSO_NODE(lassoNode_response)), 1); + + class = LASSO_NODE_GET_CLASS(response); + class->set_xmlNode(LASSO_NODE(response), xmlNode_response); + g_object_unref(lassoNode_response); + + return(response); +} + +// build a LogoutResponse from a query form LogoutResponse +LassoNode * +lasso_logout_response_new_from_query(const xmlChar *query) +{ + LassoNode *response; + + xmlChar *relayState, *consent; + GData *gd; - response = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_RESPONSE, NULL)); + response = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_RESPONSE, NULL)); + + gd = lasso_query_to_dict(query); + + /* ResponseID */ + lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ResponseID"), 0)); + + /* MajorVersion */ + lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MajorVersion"), 0)); + + /* MinorVersion */ + lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MinorVersion"), 0)); + + /* IssueInstant */ + lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IssueInstance"), 0)); + + /* InResponseTo */ + lasso_samlp_response_abstract_set_inResponseTo(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "InResponseTo"), 0)); + + /* Recipient */ + lasso_samlp_response_abstract_set_recipient(LASSO_SAMLP_RESPONSE_ABSTRACT(response), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "Recipient"), 0)); + + /* ProviderID */ + lasso_lib_status_response_set_providerID(LASSO_LIB_STATUS_RESPONSE(response), + lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProviderID"), 0)); - /* Set ONLY required elements/attributs */ - /* ResponseID */ - lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - (const xmlChar *)lasso_build_unique_id(32)); - /* MajorVersion */ - lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - lassoLibMajorVersion); - /* MinorVersion */ - lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - lassoLibMinorVersion); - /* IssueInstant */ - lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - lasso_get_current_time()); - /* ProviderID */ - lasso_lib_status_response_set_providerID(LASSO_LIB_STATUS_RESPONSE(response), - providerID); - - inResponseTo = xmlNodeGetContent((xmlNodePtr)lasso_node_get_attr(request, "RequestID")); - recipient = lasso_node_get_content(lasso_node_get_child(request, "ProviderID")); - - lasso_samlp_response_abstract_set_inResponseTo(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - inResponseTo); - - lasso_samlp_response_abstract_set_recipient(LASSO_SAMLP_RESPONSE_ABSTRACT(response), - recipient); - - relayState = lasso_node_get_content(lasso_node_get_child(request, "RelayState")); - if(relayState!=NULL) - lasso_lib_status_response_set_relayState(LASSO_LIB_STATUS_RESPONSE(response), - relayState); - - ss = lasso_samlp_status_new(); - ssc = lasso_samlp_status_code_new(); - lasso_samlp_status_code_set_value(LASSO_SAMLP_STATUS_CODE(ssc), - statusCodeValue); - lasso_samlp_status_set_statusCode(LASSO_SAMLP_STATUS(ss), - LASSO_SAMLP_STATUS_CODE(ssc)); - lasso_lib_status_response_set_status(LASSO_LIB_STATUS_RESPONSE(response), - LASSO_SAMLP_STATUS(ss)); - - return (response); + /* RelayState */ + relayState = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0); + if(relayState!=NULL) + lasso_lib_status_response_set_relayState(LASSO_LIB_STATUS_RESPONSE(response), relayState); + + return(response); +} + +LassoNode * +lasso_logout_response_new_from_memory(const xmlChar *buffer) +{ + LassoNode *response; + + response = LASSO_NODE(g_object_new(LASSO_TYPE_LOGOUT_RESPONSE, NULL)); + lasso_node_parse_memory(response, buffer); + + return(response); } diff --git a/lasso/Attic/protocols/logout_response.h b/lasso/Attic/protocols/logout_response.h index 06e542be..3f9a81dc 100644 --- a/lasso/Attic/protocols/logout_response.h +++ b/lasso/Attic/protocols/logout_response.h @@ -52,10 +52,23 @@ struct _LassoLogoutResponseClass { LassoLibLogoutResponseClass parent; }; -LASSO_EXPORT GType lasso_logout_response_get_type (void); -LASSO_EXPORT LassoNode* lasso_logout_response_new (const xmlChar *providerID, - const xmlChar *statusCodeValue, - LassoNode *request); +LASSO_EXPORT GType lasso_logout_response_get_type (void); +LASSO_EXPORT LassoNode* lasso_logout_response_new (const xmlChar *providerID, + const xmlChar *statusCodeValue, + LassoNode *request); + +LASSO_EXPORT LassoNode* lasso_logout_response_new_from_request_soap (const xmlChar *soap_buffer, + const xmlChar *providerID, + const xmlChar *statusCodeValue); + +LASSO_EXPORT LassoNode* lasso_logout_response_new_from_request_query (const xmlChar *query, + const xmlChar *providerID, + const xmlChar *statusCodeValue); + +LASSO_EXPORT LassoNode* lasso_logout_response_new_from_soap (const xmlChar *soap_buffer); + + + #ifdef __cplusplus } |
