diff options
| author | Valery Febvre <vfebvre at easter-eggs.com> | 2004-07-08 01:33:39 +0000 |
|---|---|---|
| committer | Valery Febvre <vfebvre at easter-eggs.com> | 2004-07-08 01:33:39 +0000 |
| commit | fccf8947cb654e9180a3ea27c60a4339ed4c3465 (patch) | |
| tree | 40a7e01b2344f5090fb875426171fad5ce279b61 | |
| parent | 6e23ae12ee3514890af320b9977e5f2c4366c465 (diff) | |
*** empty log message ***
| -rw-r--r-- | lasso/id-ff/login.c | 153 | ||||
| -rw-r--r-- | lasso/id-ff/login.h | 20 | ||||
| -rw-r--r-- | lasso/id-ff/profile_context.c | 39 | ||||
| -rw-r--r-- | lasso/id-ff/profile_context.h | 6 |
4 files changed, 146 insertions, 72 deletions
diff --git a/lasso/id-ff/login.c b/lasso/id-ff/login.c index 09b4ba7c..10354025 100644 --- a/lasso/id-ff/login.c +++ b/lasso/id-ff/login.c @@ -107,52 +107,6 @@ lasso_login_add_response_assertion(LassoLogin *login, /*****************************************************************************/ gint -lasso_login_build_authn_request_msg(LassoLogin *login) -{ - LassoProvider *provider, *remote_provider; - xmlChar *request_protocolProfile, *url, *query, *lareq; - gboolean must_sign; - - provider = LASSO_PROVIDER(LASSO_PROFILE_CONTEXT(login)->server); - remote_provider = lasso_server_get_provider(LASSO_PROFILE_CONTEXT(login)->server, - LASSO_PROFILE_CONTEXT(login)->remote_providerID); - must_sign = xmlStrEqual(lasso_node_get_child_content(provider->metadata, "AuthnRequestsSigned", NULL), "true"); - /* export request depending on the request ProtocolProfile */ - request_protocolProfile = lasso_provider_get_singleSignOnProtocolProfile(remote_provider); - /* get SingleSignOnServiceURL metadata */ - url = lasso_provider_get_singleSignOnServiceURL(remote_provider); - if (url == NULL) return (-1); - - if (xmlStrEqual(request_protocolProfile, lassoLibProtocolProfileSSOGet)) { - /* GET -> query */ - if (must_sign) { - query = lasso_node_export_to_query(LASSO_PROFILE_CONTEXT(login)->request, - LASSO_PROFILE_CONTEXT(login)->server->signature_method, - LASSO_PROFILE_CONTEXT(login)->server->private_key); - } - else { - query = lasso_node_export_to_query(LASSO_PROFILE_CONTEXT(login)->request, 0, NULL); - } - if (query == NULL) return (-2); - /* alloc msg_url (+2 for the ? and \0) */ - LASSO_PROFILE_CONTEXT(login)->msg_url = (gchar *) g_new(gchar, strlen(url) + strlen(query) + 2); - g_sprintf(LASSO_PROFILE_CONTEXT(login)->msg_url, "%s?%s", url, query); - LASSO_PROFILE_CONTEXT(login)->msg_body = NULL; - g_free(query); - } - else if (xmlStrEqual(request_protocolProfile, lassoLibProtocolProfileSSOPost)) { - /* POST -> formular */ - lareq = lasso_node_export_to_base64(LASSO_PROFILE_CONTEXT(login)->request); - if (lareq == NULL) return (-2); - LASSO_PROFILE_CONTEXT(login)->msg_url = g_strdup(url); - LASSO_PROFILE_CONTEXT(login)->msg_body = lareq; - } - g_free(url); - - return (0); -} - -gint lasso_login_build_artifact_msg(LassoLogin *login, gint authentication_result, const gchar *authenticationMethod, @@ -239,6 +193,52 @@ lasso_login_build_artifact_msg(LassoLogin *login, } gint +lasso_login_build_authn_request_msg(LassoLogin *login) +{ + LassoProvider *provider, *remote_provider; + xmlChar *request_protocolProfile, *url, *query, *lareq; + gboolean must_sign; + + provider = LASSO_PROVIDER(LASSO_PROFILE_CONTEXT(login)->server); + remote_provider = lasso_server_get_provider(LASSO_PROFILE_CONTEXT(login)->server, + LASSO_PROFILE_CONTEXT(login)->remote_providerID); + must_sign = xmlStrEqual(lasso_node_get_child_content(provider->metadata, "AuthnRequestsSigned", NULL), "true"); + /* export request depending on the request ProtocolProfile */ + request_protocolProfile = lasso_provider_get_singleSignOnProtocolProfile(remote_provider); + /* get SingleSignOnServiceURL metadata */ + url = lasso_provider_get_singleSignOnServiceURL(remote_provider); + if (url == NULL) return (-1); + + if (xmlStrEqual(request_protocolProfile, lassoLibProtocolProfileSSOGet)) { + /* GET -> query */ + if (must_sign) { + query = lasso_node_export_to_query(LASSO_PROFILE_CONTEXT(login)->request, + LASSO_PROFILE_CONTEXT(login)->server->signature_method, + LASSO_PROFILE_CONTEXT(login)->server->private_key); + } + else { + query = lasso_node_export_to_query(LASSO_PROFILE_CONTEXT(login)->request, 0, NULL); + } + if (query == NULL) return (-2); + /* alloc msg_url (+2 for the ? and \0) */ + LASSO_PROFILE_CONTEXT(login)->msg_url = (gchar *) g_new(gchar, strlen(url) + strlen(query) + 2); + g_sprintf(LASSO_PROFILE_CONTEXT(login)->msg_url, "%s?%s", url, query); + LASSO_PROFILE_CONTEXT(login)->msg_body = NULL; + g_free(query); + } + else if (xmlStrEqual(request_protocolProfile, lassoLibProtocolProfileSSOPost)) { + /* POST -> formular */ + lareq = lasso_node_export_to_base64(LASSO_PROFILE_CONTEXT(login)->request); + if (lareq == NULL) return (-2); + LASSO_PROFILE_CONTEXT(login)->msg_url = g_strdup(url); + LASSO_PROFILE_CONTEXT(login)->msg_body = lareq; + } + g_free(url); + + return (0); +} + +gint lasso_login_build_authn_response_msg(LassoLogin *login, gint authentication_result, const gchar *authenticationMethod, @@ -295,6 +295,39 @@ lasso_login_build_request_msg(LassoLogin *login) return (0); } +gchar* +lasso_login_dump(LassoLogin *login) +{ + LassoNode *node; + gchar *parent_dump, *dump, *str; + + parent_dump = lasso_profile_context_dump(LASSO_PROFILE_CONTEXT(login), "LassoLogin"); + node = lasso_node_new_from_dump(parent_dump); + g_free(parent_dump); + + if (login->protocolProfile > 0) { + str = g_new0(gchar, 6); + sprintf(str, "%d", login->protocolProfile); + LASSO_NODE_GET_CLASS(node)->new_child(node, "protocolProfile", str, FALSE); + g_free(str); + } + + if (login->assertionArtifact != NULL) { + LASSO_NODE_GET_CLASS(node)->new_child(node, "assertionArtifact", login->assertionArtifact, FALSE); + } + if (login->response_dump != NULL) { + LASSO_NODE_GET_CLASS(node)->new_child(node, "response_dump", login->response_dump, FALSE); + } + if (login->msg_relayState != NULL) { + LASSO_NODE_GET_CLASS(node)->new_child(node, "msg_relayState", login->msg_relayState, FALSE); + } + + dump = lasso_node_export(node); + lasso_node_destroy(node); + + return (dump); +} + gint lasso_login_init_authn_request(LassoLogin *login, const gchar *remote_providerID) @@ -437,20 +470,6 @@ lasso_login_init_request(LassoLogin *login, } gint -lasso_login_handle_request_msg(LassoLogin *login, - gchar *request_msg) -{ - LassoNode *node; - - node = lasso_node_new_from_dump(request_msg); - - login->assertionArtifact = lasso_node_get_child_content(node, "AssertionArtifact", lassoSamlProtocolHRef); - lasso_node_destroy(node); - - return (0); -} - -gint lasso_login_handle_authn_response_msg(LassoLogin *login, gchar *authn_response_msg) { @@ -494,6 +513,20 @@ lasso_login_handle_authn_response_msg(LassoLogin *login, return (0); } +gint +lasso_login_handle_request_msg(LassoLogin *login, + gchar *request_msg) +{ + LassoNode *node; + + node = lasso_node_new_from_dump(request_msg); + + login->assertionArtifact = lasso_node_get_child_content(node, "AssertionArtifact", lassoSamlProtocolHRef); + lasso_node_destroy(node); + + return (0); +} + gboolean lasso_login_must_authenticate(LassoLogin *login) { diff --git a/lasso/id-ff/login.h b/lasso/id-ff/login.h index ec776d78..156488a8 100644 --- a/lasso/id-ff/login.h +++ b/lasso/id-ff/login.h @@ -55,12 +55,12 @@ typedef enum { struct _LassoLogin { LassoProfileContext parent; /*< public >*/ - gint protocolProfile; - xmlChar *assertionArtifact; + gint protocolProfile; + gchar *assertionArtifact; - xmlChar *response_dump; + gchar *response_dump; - gchar *msg_relayState; + gchar *msg_relayState; /*< private >*/ }; @@ -73,14 +73,14 @@ LASSO_EXPORT GType lasso_login_get_type (void) LASSO_EXPORT LassoProfileContext* lasso_login_new (LassoServer *server, LassoUser *user); -LASSO_EXPORT gint lasso_login_build_authn_request_msg (LassoLogin *login); - LASSO_EXPORT gint lasso_login_build_artifact_msg (LassoLogin *login, gint authentication_result, const gchar *authenticationMethod, const gchar *reauthenticateOnOrAfter, lassoHttpMethods method); +LASSO_EXPORT gint lasso_login_build_authn_request_msg (LassoLogin *login); + LASSO_EXPORT gint lasso_login_build_authn_response_msg (LassoLogin *login, gint authentication_result, const gchar *authenticationMethod, @@ -88,6 +88,8 @@ LASSO_EXPORT gint lasso_login_build_authn_response_msg (Lasso LASSO_EXPORT gint lasso_login_build_request_msg (LassoLogin *login); +LASSO_EXPORT gchar* lasso_login_dump (LassoLogin *login); + LASSO_EXPORT gint lasso_login_init_authn_request (LassoLogin *login, const gchar *remote_providerID); @@ -100,12 +102,12 @@ LASSO_EXPORT gint lasso_login_init_request (Lasso lassoHttpMethods response_method, const gchar *remote_providerID); -LASSO_EXPORT gint lasso_login_handle_request_msg (LassoLogin *login, - gchar *request_msg); - LASSO_EXPORT gint lasso_login_handle_authn_response_msg (LassoLogin *login, gchar *authn_response_msg); +LASSO_EXPORT gint lasso_login_handle_request_msg (LassoLogin *login, + gchar *request_msg); + LASSO_EXPORT gboolean lasso_login_must_authenticate (LassoLogin *login); #ifdef __cplusplus diff --git a/lasso/id-ff/profile_context.c b/lasso/id-ff/profile_context.c index 7cdd6eb4..5bc8faf0 100644 --- a/lasso/id-ff/profile_context.c +++ b/lasso/id-ff/profile_context.c @@ -36,6 +36,45 @@ /* public methods */ /*****************************************************************************/ +gchar* +lasso_profile_context_dump(LassoProfileContext *ctx, + const gchar *name) +{ + LassoNode *node; + gchar *child_dump, *dump = NULL; + + node = lasso_node_new(); + if (name != NULL) { + LASSO_NODE_GET_CLASS(node)->set_name(node, name); + } + else { + LASSO_NODE_GET_CLASS(node)->set_name(node, "LassoProfileContext"); + } + + if (ctx->request != NULL) { + LASSO_NODE_GET_CLASS(node)->add_child(node, ctx->request, FALSE); + } + if (ctx->response != NULL) { + LASSO_NODE_GET_CLASS(node)->add_child(node, ctx->response, FALSE); + } + + if (ctx->remote_providerID != NULL) { + LASSO_NODE_GET_CLASS(node)->new_child(node, "remote_providerID", ctx->remote_providerID, FALSE); + } + + if (ctx->msg_url != NULL) { + LASSO_NODE_GET_CLASS(node)->new_child(node, "msg_url", lasso_str_escape(ctx->msg_url), FALSE); + } + if (ctx->msg_body != NULL) { + LASSO_NODE_GET_CLASS(node)->new_child(node, "msg_body", lasso_str_escape(ctx->msg_body), FALSE); + } + + dump = lasso_node_export(node); + lasso_node_destroy(node); + + return (dump); +} + gint lasso_profile_context_set_remote_providerID(LassoProfileContext *ctx, gchar *providerID) diff --git a/lasso/id-ff/profile_context.h b/lasso/id-ff/profile_context.h index efc70f53..5ab01cf6 100644 --- a/lasso/id-ff/profile_context.h +++ b/lasso/id-ff/profile_context.h @@ -66,9 +66,6 @@ struct _LassoProfileContext { LassoNode *request; LassoNode *response; - gint request_method; - gint response_method; - gchar *remote_providerID; gchar *msg_url; @@ -86,6 +83,9 @@ LASSO_EXPORT GType lasso_profile_context_get_type (vo LASSO_EXPORT LassoProfileContext* lasso_profile_context_new (LassoServer *server, LassoUser *user); +LASSO_EXPORT gchar* lasso_profile_context_dump (LassoProfileContext *ctx, + const gchar *name); + LASSO_EXPORT gint lasso_profile_context_set_remote_providerID(LassoProfileContext *ctx, gchar *providerID); |
