summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lasso/Attic/protocols/authn_response.c307
-rw-r--r--lasso/Attic/protocols/authn_response.h19
-rw-r--r--lasso/xml/xml.h7
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;