summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValery Febvre <vfebvre at easter-eggs.com>2004-07-08 01:33:39 +0000
committerValery Febvre <vfebvre at easter-eggs.com>2004-07-08 01:33:39 +0000
commitfccf8947cb654e9180a3ea27c60a4339ed4c3465 (patch)
tree40a7e01b2344f5090fb875426171fad5ce279b61
parent6e23ae12ee3514890af320b9977e5f2c4366c465 (diff)
*** empty log message ***
-rw-r--r--lasso/id-ff/login.c153
-rw-r--r--lasso/id-ff/login.h20
-rw-r--r--lasso/id-ff/profile_context.c39
-rw-r--r--lasso/id-ff/profile_context.h6
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);