summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lasso/Attic/protocols/authn_request.c145
-rw-r--r--lasso/Attic/protocols/authn_request.h5
2 files changed, 148 insertions, 2 deletions
diff --git a/lasso/Attic/protocols/authn_request.c b/lasso/Attic/protocols/authn_request.c
index 7ba2f311..8660d009 100644
--- a/lasso/Attic/protocols/authn_request.c
+++ b/lasso/Attic/protocols/authn_request.c
@@ -172,3 +172,148 @@ lasso_authn_request_new(const xmlChar *providerID)
return (request);
}
+
+LassoNode*
+lasso_authn_request_new_from_query(xmlChar *query)
+{
+ LassoNode *request, *authn_context = NULL, *scoping;
+ GData *gd;
+ xmlChar *str;
+ GPtrArray *array;
+ gint i;
+
+ request = LASSO_NODE(g_object_new(LASSO_TYPE_AUTHN_REQUEST, NULL));
+
+ gd = lasso_query_to_dict(query);
+
+ /* RequestID */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0);
+ if (str != NULL)
+ lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request),
+ str);
+ else {
+ g_datalist_clear(&gd);
+ g_object_unref(request);
+ return (NULL);
+ }
+
+ /* MajorVersion */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MajorVersion"), 0);
+ if (str != NULL)
+ lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
+ str);
+ else
+ lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
+ lassoLibMajorVersion);
+
+ /* MinorVersion */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MinorVersion"), 0);
+ if (str != NULL)
+ lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
+ str);
+ else
+ lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
+ lassoLibMinorVersion);
+
+ /* IssueInstant */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IssueInstance"), 0);
+ if (str != NULL) {
+ lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request),
+ str);
+ }
+ else {
+ g_datalist_clear(&gd);
+ g_object_unref(request);
+ return (NULL);
+ }
+
+ /* ProviderID */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProviderID"), 0);
+ if (str != NULL)
+ lasso_lib_authn_request_set_providerID(LASSO_LIB_AUTHN_REQUEST(request), str);
+ else {
+ g_datalist_clear(&gd);
+ g_object_unref(request);
+ return (NULL);
+ }
+
+ /* NameIDPolicy */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "NameIDPolicy"), 0);
+ if (str != NULL)
+ lasso_lib_authn_request_set_nameIDPolicy(LASSO_LIB_AUTHN_REQUEST(request), str);
+
+ /* ForceAuthn */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ForceAuthn"), 0);
+ if (str != NULL)
+ lasso_lib_authn_request_set_forceAuthn(LASSO_LIB_AUTHN_REQUEST(request), atoi(str));
+
+ /* IsPassive */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IsPassive"), 0);
+ if (str != NULL)
+ lasso_lib_authn_request_set_isPassive(LASSO_LIB_AUTHN_REQUEST(request), atoi(str));
+
+ /* ProtocolProfile */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProtocolProfile"), 0);
+ if (str != NULL)
+ lasso_lib_authn_request_set_protocolProfile(LASSO_LIB_AUTHN_REQUEST(request), str);
+
+ /* AssertionConsumerServiceID */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "AssertionConsumerServiceID"), 0);
+ if (str != NULL)
+ lasso_lib_authn_request_set_assertionConsumerServiceID(LASSO_LIB_AUTHN_REQUEST(request), str);
+
+ /* AuthnContext */
+ array = (GPtrArray *)g_datalist_get_data(&gd, "AuthnContextClassRef");
+ if (array != NULL) {
+ if (authn_context == NULL)
+ authn_context = lasso_lib_request_authn_context_new();
+ for(i=0; i<array->len; i++)
+ lasso_lib_request_authn_context_add_authnContextClassRef(LASSO_LIB_REQUEST_AUTHN_CONTEXT(authn_context),
+ lasso_g_ptr_array_index(array, i));
+ }
+ array = (GPtrArray *)g_datalist_get_data(&gd, "AuthnContextStatementRef");
+ if (array != NULL) {
+ if (authn_context == NULL)
+ authn_context = lasso_lib_request_authn_context_new();
+ for(i=0; i<array->len; i++)
+ lasso_lib_request_authn_context_add_authnContextStatementRef(LASSO_LIB_REQUEST_AUTHN_CONTEXT(authn_context),
+ lasso_g_ptr_array_index(array, i));
+ }
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "AuthnContextComparison"), 0);
+ if (str != NULL) {
+ if (authn_context == NULL)
+ authn_context = lasso_lib_request_authn_context_new();
+ lasso_lib_request_authn_context_set_authnContextComparison(LASSO_LIB_REQUEST_AUTHN_CONTEXT(authn_context),
+ str);
+ }
+ if (authn_context != NULL)
+ lasso_lib_authn_request_set_requestAuthnContext(LASSO_LIB_AUTHN_REQUEST(request),
+ LASSO_LIB_REQUEST_AUTHN_CONTEXT(authn_context));
+
+ /* RelayState */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0);
+ if (str != NULL) {
+ lasso_lib_authn_request_set_relayState(LASSO_LIB_AUTHN_REQUEST(request), str);
+ }
+
+ /* Scoping
+ FIXME -> IDPList */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProxyCount"), 0);
+ if (str != NULL) {
+ /* create a new Scoping instance */
+ scoping = lasso_lib_scoping_new();
+ /* ProxyCount */
+ lasso_lib_scoping_set_proxyCount(LASSO_LIB_SCOPING(scoping), atoi(str));
+ lasso_lib_authn_request_set_scoping(LASSO_LIB_AUTHN_REQUEST(request),
+ LASSO_LIB_SCOPING(scoping));
+ }
+
+ /* consent */
+ str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "consent"), 0);
+ if (str != NULL) {
+ lasso_lib_authn_request_set_consent(LASSO_LIB_AUTHN_REQUEST(request), str);
+ }
+
+ g_datalist_clear(&gd);
+ return (request);
+}
diff --git a/lasso/Attic/protocols/authn_request.h b/lasso/Attic/protocols/authn_request.h
index c0e57c7e..78bf5f6d 100644
--- a/lasso/Attic/protocols/authn_request.h
+++ b/lasso/Attic/protocols/authn_request.h
@@ -58,14 +58,15 @@ LASSO_EXPORT xmlChar* lasso_authn_request_get_protocolProfile (xmlChar *query);
LASSO_EXPORT GType lasso_authn_request_get_type (void);
LASSO_EXPORT LassoNode* lasso_authn_request_new (const xmlChar *providerID);
+LASSO_EXPORT LassoNode* lasso_authn_request_new_from_query (xmlChar *query);
LASSO_EXPORT void lasso_authn_request_set_requestAuthnContext (LassoAuthnRequest *request,
GPtrArray *authnContextClassRefs,
GPtrArray *authnContextStatementRefs,
const xmlChar *authnContextComparison);
-LASSO_EXPORT void lasso_authn_request_set_scoping (LassoAuthnRequest *request,
- gint proxyCount);
+LASSO_EXPORT void lasso_authn_request_set_scoping (LassoAuthnRequest *request,
+ gint proxyCount);
#ifdef __cplusplus
}