diff options
| -rw-r--r-- | lasso/Attic/protocols/authn_response.c | 307 | ||||
| -rw-r--r-- | lasso/Attic/protocols/authn_response.h | 19 | ||||
| -rw-r--r-- | lasso/xml/xml.h | 7 |
3 files changed, 43 insertions, 290 deletions
diff --git a/lasso/Attic/protocols/authn_response.c b/lasso/Attic/protocols/authn_response.c index 3bf8375d..efbbef23 100644 --- a/lasso/Attic/protocols/authn_response.c +++ b/lasso/Attic/protocols/authn_response.c @@ -26,29 +26,6 @@ #include <lasso/protocols/authn_response.h> #include <lasso/protocols/authn_request.h> -//static GObjectClass *parent_class = NULL; - -xmlChar * -lasso_authn_response_get_status(LassoAuthnResponse *response) { - LassoNode *status_code; - xmlChar *res; - - status_code = lasso_node_get_child(response, "StatusCode", NULL); - if (status_code != NULL) - return lasso_node_get_attr_value(status_code, "Value"); - else - return(NULL); -} - -/* - lasso_authn_response_get_nameIdentifier - lasso_authn_response_get_idpProvidedNameIdentifier - - assertion = lasso_node_get_child(response, "Assertion", NULL); - nameIdentifier = lasso_node_get_child(assertion, "NameIdentifier", NULL); - idpProvidedNameIdentifier = lasso_node_get_child(assertion, "IDPProvidedNameIdentifier", NULL); -*/ - static void lasso_authn_response_set_status(LassoAuthnResponse *response, const xmlChar *statusCodeValue) { @@ -73,127 +50,18 @@ lasso_authn_response_set_status(LassoAuthnResponse *response, /* public methods */ /*****************************************************************************/ -/* gboolean */ -/* lasso_authn_response_must_authenticate(LassoAuthnResponse *response, */ -/* LassoAuthnRe *request, */ -/* gboolean is_authenticated) */ -/* { */ -/* GData *gd; */ -/* gboolean must_authenticate = FALSE; */ -/* /\* default values for ForceAuthn and IsPassive *\/ */ -/* gboolean forceAuthn = FALSE; */ -/* gboolean isPassive = TRUE; */ - -/* gd = lasso_query_to_dict(LASSO_AUTHN_RESPONSE(response)->query); */ -/* /\* Get ForceAuthn and IsPassive *\/ */ -/* if (xmlStrEqual(lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ForceAuthn"), 0), "true")) { */ -/* forceAuthn = TRUE; */ -/* } */ -/* if (xmlStrEqual((xmlChar *)lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IsPassive"), 0), "false")) { */ -/* isPassive = FALSE; */ -/* } */ - -/* if ((forceAuthn == TRUE || is_authenticated == FALSE) && isPassive == FALSE) { */ -/* must_authenticate = TRUE; */ -/* } */ -/* else */ -/* if (is_authenticated == FALSE && isPassive == TRUE) { */ -/* lasso_authn_response_set_status(response, lassoLibStatusCodeNoPassive); */ -/* } */ - -/* g_datalist_clear(&gd); */ -/* return (must_authenticate); */ -/* } */ - -/* void */ -/* lasso_authn_response_process_authentication_result(LassoAuthnResponse *response, */ -/* gboolean authentication_result) */ -/* { */ -/* if (authentication_result == FALSE) { */ -/* lasso_authn_response_set_status(response, lassoLibStatusCodeUnknownPrincipal); */ -/* } */ -/* } */ - -/* gboolean */ -/* lasso_authn_response_verify_signature(LassoAuthnResponse *response, */ -/* xmlChar *public_key_file, */ -/* xmlChar *private_key_file) */ -/* { */ -/* g_return_val_if_fail(LASSO_IS_AUTHN_RESPONSE(response), FALSE); */ - -/* gboolean signature_status; */ - -/* signature_status = lasso_query_verify_signature(LASSO_AUTHN_RESPONSE(response)->query, */ -/* public_key_file, */ -/* private_key_file); */ - -/* /\* Status & StatusCode *\/ */ -/* if (signature_status == 0 || signature_status == 2) { */ -/* switch (signature_status) { */ -/* case 0: */ -/* lasso_authn_response_set_status(response, lassoLibStatusCodeInvalidSignature); */ -/* break; */ -/* case 2: */ -/* lasso_authn_response_set_status(response, lassoLibStatusCodeUnsignedAuthnRequest); */ -/* break; */ -/* } */ -/* } */ - -/* if (signature_status == 1) */ -/* return (TRUE); */ -/* else */ -/* return (FALSE); */ -/* } */ - -/*****************************************************************************/ -/* overrided parent classes methods */ -/*****************************************************************************/ - -/* static void */ -/* lasso_authn_response_dispose(LassoAuthnResponse *response) */ -/* { */ -/* parent_class->dispose(G_OBJECT(response)); */ -/* } */ - -/* override lasso_node_dump() method */ -/* static xmlChar * */ -/* lasso_authn_response_dump(LassoAuthnResponse *response, */ -/* const xmlChar *encoding, */ -/* int format) */ -/* { */ -/* LassoNode *response_copy, *request, *response_dump; */ -/* xmlChar *dump; */ - -/* response_dump = lasso_node_new(); */ -/* LASSO_NODE_GET_CLASS(response_dump)->set_name(response_dump, "LassoDumpAuthnResponse"); */ -/* response_copy = lasso_node_copy(LASSO_NODE(response)); */ -/* LASSO_NODE_GET_CLASS(response_dump)->add_child(response_dump, response_copy, FALSE); */ -/* if (response->query != NULL) { */ -/* request = lasso_authn_request_new_from_query(response->query); */ -/* LASSO_NODE_GET_CLASS(response_dump)->add_child(response_dump, request, FALSE); */ -/* } */ -/* else { */ -/* request = lasso_node_copy(response->request); */ -/* LASSO_NODE_GET_CLASS(response_dump)->add_child(response_dump, request, FALSE); */ -/* } */ -/* dump = lasso_node_dump(response_dump, encoding, format); */ - -/* lasso_node_destroy(response_copy); */ -/* lasso_node_destroy(request); */ -/* lasso_node_destroy(response_dump); */ - -/* return (dump); */ -/* } */ +xmlChar * +lasso_authn_response_get_status(LassoAuthnResponse *response) { + LassoNode *status_code; -/* static void */ -/* lasso_authn_response_finalize(LassoAuthnResponse *response) */ -/* { */ -/* if (response->query != NULL) */ -/* g_free(response->query); */ -/* if (response->request != NULL) */ -/* lasso_node_destroy(response->request); */ -/* parent_class->finalize(G_OBJECT(response)); */ -/* } */ + status_code = lasso_node_get_child(response, "StatusCode", NULL); + if (status_code != NULL) { + return lasso_node_get_attr_value(status_code, "Value"); + } + else { + return (NULL); + } +} /*****************************************************************************/ /* instance and class init functions */ @@ -207,14 +75,6 @@ lasso_authn_response_instance_init(LassoAuthnResponse *response) static void lasso_authn_response_class_init(LassoAuthnResponseClass *class) { - GObjectClass *gobject_class = G_OBJECT_CLASS(class); - //LassoNodeClass *lasso_node_class = LASSO_NODE_CLASS(class); - - //parent_class = g_type_class_peek_parent(class); - /* override parent classes methods */ - //gobject_class->dispose = (void *)lasso_authn_response_dispose; - //gobject_class->finalize = (void *)lasso_authn_response_finalize; - //lasso_node_class->dump = lasso_authn_response_dump; } GType lasso_authn_response_get_type() { @@ -240,45 +100,12 @@ GType lasso_authn_response_get_type() { return this_type; } -/* LassoNode* */ -/* lasso_authn_response_new_from_dump(xmlChar *buffer) */ -/* { */ -/* LassoNode *response, *request, *response_dump, *request_dump, *node_dump; */ -/* xmlNodePtr xmlNode_response, xmlNode_request; */ - -/* g_return_val_if_fail(buffer != NULL, NULL); */ - -/* response = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_RESPONSE, NULL)); */ -/* request = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_REQUEST, NULL)); */ - -/* node_dump = lasso_node_new_from_dump(buffer); */ -/* /\* get xmlNodes *\/ */ -/* response_dump = lasso_node_get_child(node_dump, "AuthnResponse", NULL); */ -/* request_dump = lasso_node_get_child(node_dump, "AuthnRequest", NULL); */ -/* /\* xmlNodes are copies because they will be freed when node_dump will be destroy *\/ */ -/* xmlNode_response = xmlCopyNode(LASSO_NODE_GET_CLASS(response)->get_xmlNode(response_dump), 1); */ -/* xmlNode_request = xmlCopyNode(LASSO_NODE_GET_CLASS(response)->get_xmlNode(request_dump), 1); */ - -/* /\* put xmlNodes in LassoNodes *\/ */ -/* LASSO_NODE_GET_CLASS(response)->set_xmlNode(response, xmlNode_response); */ -/* LASSO_NODE_GET_CLASS(request)->set_xmlNode(request, xmlNode_request); */ - -/* LASSO_AUTHN_RESPONSE(response)->request = request; */ -/* LASSO_AUTHN_RESPONSE(response)->query = NULL; */ - -/* lasso_node_destroy(response_dump); */ -/* lasso_node_destroy(request_dump); */ -/* lasso_node_destroy(node_dump); */ - -/* return (response); */ -/* } */ - LassoNode* lasso_authn_response_new(char *providerID, LassoNode *request) { LassoNode *response; - xmlChar *id, *time, content; + xmlChar *id, *time, *content; g_return_val_if_fail(providerID != NULL, NULL); @@ -308,110 +135,42 @@ lasso_authn_response_new(char *providerID, lasso_lib_authn_response_set_providerID(LASSO_LIB_AUTHN_RESPONSE(response), providerID); - /* TODO RelayState */ + /* RelayState */ + content = lasso_node_get_child_content(request, "RelayState", lassoLibHRef); + if (content != NULL) { + lasso_lib_authn_response_set_relayState(LASSO_LIB_AUTHN_RESPONSE(response), + content); + xmlFree(content); + } /* Status Code */ - //lasso_authn_response_set_status(response, lassoSamlStatusCodeSuccess); + lasso_authn_response_set_status(response, lassoSamlStatusCodeSuccess); return(response); } LassoNode* -lasso_authn_response_new_from_export(xmlChar *buffer, - gint type) +lasso_authn_response_new_from_export(xmlChar *buffer, + lassoNodeExportTypes export_type) { xmlChar *buffer_decoded = xmlMalloc(strlen(buffer)); - LassoNode *response, *node; - xmlNodePtr xmlNode_response; + LassoNode *response; g_return_val_if_fail(buffer != NULL, NULL); - xmlSecBase64Decode(buffer, buffer_decoded, strlen(buffer)); - response = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_RESPONSE, NULL)); - node = lasso_node_new_from_dump(buffer_decoded); - xmlNode_response = xmlCopyNode(LASSO_NODE_GET_CLASS(node)->get_xmlNode(node), 1); - LASSO_NODE_GET_CLASS(response)->set_xmlNode(response, xmlNode_response); + switch (export_type) { + case lassoNodeExportTypeBase64: + xmlSecBase64Decode(buffer, buffer_decoded, strlen(buffer)); + break; + case lassoNodeExportTypeQuery: + case lassoNodeExportTypeSoap: + break; + } -/* LASSO_AUTHN_RESPONSE(response)->request = NULL; */ -/* LASSO_AUTHN_RESPONSE(response)->query = NULL; */ - lasso_node_destroy(node); + lasso_node_import(response, buffer_decoded); + xmlFree(buffer_decoded); return (response); } - -/* LassoNode* */ -/* lasso_authn_response_new_from_request_query(gchar *query, */ -/* const xmlChar *providerID) */ -/* { */ -/* GData *gd; */ -/* LassoNode *response; */ -/* xmlChar *id, *time; */ - -/* g_return_val_if_fail(query != NULL, NULL); */ -/* g_return_val_if_fail(providerID != NULL, NULL); */ - -/* response = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_RESPONSE, NULL)); */ - -/* gd = lasso_query_to_dict(query); */ -/* /\* /\\* store query - need to verify signature *\\/ *\/ */ -/* /\* LASSO_AUTHN_RESPONSE(response)->query = g_strdup(query); *\/ */ -/* /\* LASSO_AUTHN_RESPONSE(response)->request = lasso_authn_request_new_from_query(query); *\/ */ - -/* /\* ResponseID *\/ */ -/* id = lasso_build_unique_id(32); */ -/* lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response), */ -/* (const xmlChar *)id); */ -/* xmlFree(id); */ -/* /\* 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); */ -/* /\* IssueInstance *\/ */ -/* time = lasso_get_current_time(); */ -/* lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response), */ -/* (const xmlChar *)time); */ -/* xmlFree(time); */ - -/* /\* ProviderID *\/ */ -/* lasso_lib_authn_response_set_providerID(LASSO_LIB_AUTHN_RESPONSE(response), */ -/* providerID); */ - -/* /\* RelayState *\/ */ -/* if (lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0) != NULL) { */ -/* lasso_lib_authn_response_set_relayState(LASSO_LIB_AUTHN_RESPONSE(response), */ -/* lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0)); */ -/* } */ -/* /\* InResponseTo *\/ */ -/* if (lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0) != NULL) { */ -/* lasso_samlp_response_abstract_set_inResponseTo(LASSO_SAMLP_RESPONSE_ABSTRACT(response), */ -/* lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0)); */ -/* } */ - -/* /\* consent *\/ */ -/* if (lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "consent"), 0) != NULL) { */ -/* lasso_lib_authn_response_set_consent(LASSO_LIB_AUTHN_RESPONSE(response), */ -/* lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "consent"), 0)); */ -/* } */ - -/* /\* Recipient *\/ */ -/* lasso_samlp_response_abstract_set_recipient(LASSO_SAMLP_RESPONSE_ABSTRACT(response), */ -/* lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProviderID"), 0)); */ - -/* /\* Status & StatusCode *\/ */ -/* lasso_authn_response_set_status(response, lassoSamlStatusCodeSuccess); */ - -/* g_datalist_clear(&gd); */ - -/* return (response); */ -/* } */ - -/* LassoNode* */ -/* lasso_authn_response_new_from_lareq(xmlChar *lareq, */ -/* const xmlChar *providerID) */ -/* { */ - -/* } */ diff --git a/lasso/Attic/protocols/authn_response.h b/lasso/Attic/protocols/authn_response.h index 66b95f4f..73d6a9b0 100644 --- a/lasso/Attic/protocols/authn_response.h +++ b/lasso/Attic/protocols/authn_response.h @@ -55,26 +55,13 @@ struct _LassoAuthnResponseClass { LASSO_EXPORT GType lasso_authn_response_get_type (void); -LASSO_EXPORT LassoNode* lasso_authn_response_new_from_dump (xmlChar *buffer); - -LASSO_EXPORT LassoNode* lasso_authn_response_new_from_export (xmlChar *buffer, - gint type); - LASSO_EXPORT LassoNode* lasso_authn_response_new (char *providerID, LassoNode *request); -LASSO_EXPORT LassoNode* lasso_authn_response_new_from_request_query (gchar *query, - const xmlChar *providerID); - -LASSO_EXPORT gboolean lasso_authn_response_must_authenticate (LassoAuthnResponse *response, - gboolean is_authenticated); - -LASSO_EXPORT void lasso_authn_response_process_authentication_result (LassoAuthnResponse *response, - gboolean authentication_result); +LASSO_EXPORT LassoNode* lasso_authn_response_new_from_export (xmlChar *buffer, + lassoNodeExportTypes type); -LASSO_EXPORT gboolean lasso_authn_response_verify_signature (LassoAuthnResponse *response, - xmlChar *public_key_file, - xmlChar *private_key_file); +LASSO_EXPORT xmlChar* lasso_authn_response_get_status (LassoAuthnResponse *response); #ifdef __cplusplus } diff --git a/lasso/xml/xml.h b/lasso/xml/xml.h index b6b8dcc8..2d89cbb3 100644 --- a/lasso/xml/xml.h +++ b/lasso/xml/xml.h @@ -39,6 +39,13 @@ extern "C" { #define LASSO_IS_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_NODE)) #define LASSO_NODE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_NODE, LassoNodeClass)) +typedef enum { + lassoNodeExportTypeXml = 1, + lassoNodeExportTypeBase64, + lassoNodeExportTypeQuery, + lassoNodeExportTypeSoap, +} lassoNodeExportTypes; + typedef struct _xmlAttr LassoAttr; typedef struct _LassoNode LassoNode; |
