summaryrefslogtreecommitdiffstats
path: root/lasso/xml
diff options
context:
space:
mode:
authorValery Febvre <vfebvre at easter-eggs.com>2004-04-05 22:25:48 +0000
committerValery Febvre <vfebvre at easter-eggs.com>2004-04-05 22:25:48 +0000
commitcaa62ddc7a5c39234a6f00132f0138a6b00f9cb0 (patch)
treed4e44a619964dbd13fec670c8bf42a069cb02889 /lasso/xml
parent80960808a8a1a59989f95ad2436d0a332473b816 (diff)
downloadlasso-caa62ddc7a5c39234a6f00132f0138a6b00f9cb0.tar.gz
lasso-caa62ddc7a5c39234a6f00132f0138a6b00f9cb0.tar.xz
lasso-caa62ddc7a5c39234a6f00132f0138a6b00f9cb0.zip
Files moved. Initialy located in lasso/schema/ directory
Diffstat (limited to 'lasso/xml')
-rw-r--r--lasso/xml/.cvsignore7
-rw-r--r--lasso/xml/Makefile.am105
-rw-r--r--lasso/xml/ds_signature.c153
-rw-r--r--lasso/xml/ds_signature.h65
-rw-r--r--lasso/xml/lib.h59
-rw-r--r--lasso/xml/lib_assertion.c111
-rw-r--r--lasso/xml/lib_assertion.h63
-rw-r--r--lasso/xml/lib_authentication_statement.c133
-rw-r--r--lasso/xml/lib_authentication_statement.h72
-rw-r--r--lasso/xml/lib_authn_context.c124
-rw-r--r--lasso/xml/lib_authn_context.h66
-rw-r--r--lasso/xml/lib_authn_request.c266
-rw-r--r--lasso/xml/lib_authn_request.h95
-rw-r--r--lasso/xml/lib_authn_response.c138
-rw-r--r--lasso/xml/lib_authn_response.h69
-rw-r--r--lasso/xml/lib_federation_termination_notification.c140
-rw-r--r--lasso/xml/lib_federation_termination_notification.h70
-rw-r--r--lasso/xml/lib_idp_entries.c115
-rw-r--r--lasso/xml/lib_idp_entries.h64
-rw-r--r--lasso/xml/lib_idp_entry.c160
-rw-r--r--lasso/xml/lib_idp_entry.h69
-rw-r--r--lasso/xml/lib_idp_list.c142
-rw-r--r--lasso/xml/lib_idp_list.h67
-rw-r--r--lasso/xml/lib_idp_provided_name_identifier.c78
-rw-r--r--lasso/xml/lib_idp_provided_name_identifier.h60
-rw-r--r--lasso/xml/lib_logout_request.c158
-rw-r--r--lasso/xml/lib_logout_request.h76
-rw-r--r--lasso/xml/lib_logout_response.c79
-rw-r--r--lasso/xml/lib_logout_response.h60
-rw-r--r--lasso/xml/lib_name_identifier_mapping_request.c136
-rw-r--r--lasso/xml/lib_name_identifier_mapping_request.h70
-rw-r--r--lasso/xml/lib_name_identifier_mapping_response.c129
-rw-r--r--lasso/xml/lib_name_identifier_mapping_response.h71
-rw-r--r--lasso/xml/lib_old_provided_name_identifier.c79
-rw-r--r--lasso/xml/lib_old_provided_name_identifier.h60
-rw-r--r--lasso/xml/lib_register_name_identifier_request.c199
-rw-r--r--lasso/xml/lib_register_name_identifier_request.h81
-rw-r--r--lasso/xml/lib_register_name_identifier_response.c79
-rw-r--r--lasso/xml/lib_register_name_identifier_response.h60
-rw-r--r--lasso/xml/lib_request_authn_context.c127
-rw-r--r--lasso/xml/lib_request_authn_context.h69
-rw-r--r--lasso/xml/lib_scoping.c147
-rw-r--r--lasso/xml/lib_scoping.h67
-rw-r--r--lasso/xml/lib_sp_provided_name_identifier.c79
-rw-r--r--lasso/xml/lib_sp_provided_name_identifier.h60
-rw-r--r--lasso/xml/lib_status_response.c138
-rw-r--r--lasso/xml/lib_status_response.h70
-rw-r--r--lasso/xml/lib_subject.c109
-rw-r--r--lasso/xml/lib_subject.h64
-rw-r--r--lasso/xml/saml.h56
-rw-r--r--lasso/xml/saml_advice.c141
-rw-r--r--lasso/xml/saml_advice.h66
-rw-r--r--lasso/xml/saml_assertion.c309
-rw-r--r--lasso/xml/saml_assertion.h99
-rw-r--r--lasso/xml/saml_audience_restriction_condition.c138
-rw-r--r--lasso/xml/saml_audience_restriction_condition.h64
-rw-r--r--lasso/xml/saml_authentication_statement.c146
-rw-r--r--lasso/xml/saml_authentication_statement.h75
-rw-r--r--lasso/xml/saml_authority_binding.c128
-rw-r--r--lasso/xml/saml_authority_binding.h70
-rw-r--r--lasso/xml/saml_condition_abstract.c95
-rw-r--r--lasso/xml/saml_condition_abstract.h61
-rw-r--r--lasso/xml/saml_conditions.c176
-rw-r--r--lasso/xml/saml_conditions.h74
-rw-r--r--lasso/xml/saml_name_identifier.c126
-rw-r--r--lasso/xml/saml_name_identifier.h67
-rw-r--r--lasso/xml/saml_statement_abstract.c95
-rw-r--r--lasso/xml/saml_statement_abstract.h61
-rw-r--r--lasso/xml/saml_subject.c119
-rw-r--r--lasso/xml/saml_subject.h68
-rw-r--r--lasso/xml/saml_subject_confirmation.c124
-rw-r--r--lasso/xml/saml_subject_confirmation.h67
-rw-r--r--lasso/xml/saml_subject_locality.c115
-rw-r--r--lasso/xml/saml_subject_locality.h67
-rw-r--r--lasso/xml/saml_subject_statement_abstract.c119
-rw-r--r--lasso/xml/saml_subject_statement_abstract.h65
-rw-r--r--lasso/xml/samlp_request_abstract.c158
-rw-r--r--lasso/xml/samlp_request_abstract.h76
-rw-r--r--lasso/xml/samlp_response.c114
-rw-r--r--lasso/xml/samlp_response.h67
-rw-r--r--lasso/xml/samlp_response_abstract.c180
-rw-r--r--lasso/xml/samlp_response_abstract.h79
-rw-r--r--lasso/xml/samlp_status.c120
-rw-r--r--lasso/xml/samlp_status.h72
-rw-r--r--lasso/xml/samlp_status_code.c99
-rw-r--r--lasso/xml/samlp_status_code.h63
-rw-r--r--lasso/xml/strings.c45
-rw-r--r--lasso/xml/strings.h58
-rw-r--r--lasso/xml/tools.c323
-rw-r--r--lasso/xml/tools.h53
-rw-r--r--lasso/xml/xml.c653
-rw-r--r--lasso/xml/xml.h134
92 files changed, 9843 insertions, 0 deletions
diff --git a/lasso/xml/.cvsignore b/lasso/xml/.cvsignore
new file mode 100644
index 00000000..d0107360
--- /dev/null
+++ b/lasso/xml/.cvsignore
@@ -0,0 +1,7 @@
+Makefile
+Makefile.in
+*.lo
+*.loT
+*.la
+.libs
+.deps
diff --git a/lasso/xml/Makefile.am b/lasso/xml/Makefile.am
new file mode 100644
index 00000000..44857d11
--- /dev/null
+++ b/lasso/xml/Makefile.am
@@ -0,0 +1,105 @@
+liblassoincludedir = $(includedir)/lasso/xml
+
+INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lasso \
+ $(LASSO_DEFINES) \
+ $(GLIB_CFLAGS) \
+ $(LIBXSLT_CFLAGS) \
+ $(LIBXML_CFLAGS) \
+ $(XMLSEC1_CFLAGS) \
+ -DG_LOG_DOMAIN=\"lasso\"
+
+noinst_LTLIBRARIES = liblasso-xml.la
+
+liblasso_xml_la_SOURCES = \
+ xml.c \
+ strings.c \
+ tools.c \
+ ds_signature.c \
+ lib_assertion.c \
+ lib_authentication_statement.c \
+ lib_authn_context.c \
+ lib_authn_request.c \
+ lib_authn_response.c \
+ lib_federation_termination_notification.c \
+ lib_idp_entries.c \
+ lib_idp_entry.c \
+ lib_idp_list.c \
+ lib_idp_provided_name_identifier.c \
+ lib_logout_request.c \
+ lib_logout_response.c \
+ lib_name_identifier_mapping_request.c \
+ lib_name_identifier_mapping_response.c \
+ lib_old_provided_name_identifier.c \
+ lib_register_name_identifier_request.c \
+ lib_register_name_identifier_response.c \
+ lib_request_authn_context.c \
+ lib_scoping.c \
+ lib_sp_provided_name_identifier.c \
+ lib_status_response.c \
+ lib_subject.c \
+ saml_advice.c \
+ saml_assertion.c \
+ saml_audience_restriction_condition.c \
+ saml_authentication_statement.c \
+ saml_authority_binding.c \
+ saml_condition_abstract.c \
+ saml_conditions.c \
+ saml_name_identifier.c \
+ saml_statement_abstract.c \
+ saml_subject.c \
+ saml_subject_confirmation.c \
+ saml_subject_locality.c \
+ saml_subject_statement_abstract.c \
+ samlp_request_abstract.c \
+ samlp_response.c \
+ samlp_response_abstract.c \
+ samlp_status.c \
+ samlp_status_code.c
+
+liblassoinclude_HEADERS = \
+ xml.h \
+ strings.h \
+ tools.h \
+ ds_signature.h \
+ lib_assertion.h \
+ lib_authentication_statement.h \
+ lib_authn_context.h \
+ lib_authn_request.h \
+ lib_authn_response.h \
+ lib_federation_termination_notification.h \
+ lib_idp_entries.h \
+ lib_idp_entry.h \
+ lib_idp_list.h \
+ lib_idp_provided_name_identifier.h \
+ lib_logout_request.h \
+ lib_logout_response.h \
+ lib_name_identifier_mapping_request.h \
+ lib_name_identifier_mapping_response.h \
+ lib_old_provided_name_identifier.h \
+ lib_register_name_identifier_request.h \
+ lib_register_name_identifier_response.h \
+ lib_request_authn_context.h \
+ lib_scoping.h \
+ lib_sp_provided_name_identifier.h \
+ lib_status_response.h \
+ lib_subject.h \
+ saml_advice.h \
+ saml_assertion.h \
+ saml_audience_restriction_condition.h \
+ saml_authentication_statement.h \
+ saml_authority_binding.h \
+ saml_condition_abstract.h \
+ saml_conditions.h \
+ saml_name_identifier.h \
+ saml_statement_abstract.h \
+ saml_subject.h \
+ saml_subject_confirmation.h \
+ saml_subject_locality.h \
+ saml_subject_statement_abstract.h \
+ samlp_request_abstract.h \
+ samlp_response.h \
+ samlp_response_abstract.h \
+ samlp_status.h \
+ samlp_status_code.h
diff --git a/lasso/xml/ds_signature.c b/lasso/xml/ds_signature.c
new file mode 100644
index 00000000..3cb59f9c
--- /dev/null
+++ b/lasso/xml/ds_signature.c
@@ -0,0 +1,153 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/ds_signature.h>
+
+/*
+The schema fragment ():
+
+*/
+
+void lasso_ds_signature_sign(LassoDsSignature *node,
+ const xmlChar *key_file,
+ const xmlChar *cert_file)
+{
+ xmlNodePtr signature = LASSO_NODE_GET_CLASS(node)->get_xmlNode(node);
+ xmlSecDSigCtxPtr dsig_ctx = NULL;
+
+ /* create signature context */
+ dsig_ctx = xmlSecDSigCtxCreate(NULL);
+ if(dsig_ctx == NULL) {
+ printf("Error: failed to create signature context\n");
+ }
+
+ /* load private key, assuming that there is not password */
+ dsig_ctx->signKey = xmlSecCryptoAppKeyLoad(key_file, xmlSecKeyDataFormatPem,
+ NULL, NULL, NULL);
+ if(dsig_ctx->signKey == NULL) {
+ printf("Error: failed to load private pem key from \"%s\"\n", key_file);
+ }
+
+ /* load certificate and add to the key */
+ if(xmlSecCryptoAppKeyCertLoad(dsig_ctx->signKey, cert_file, xmlSecKeyDataFormatPem) < 0) {
+ printf("Error: failed to load pem certificate \"%s\"\n", cert_file);
+ }
+
+ /* sign the template */
+ if(xmlSecDSigCtxSign(dsig_ctx, signature) < 0) {
+ printf("Error: signature failed\n");
+ }
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_ds_signature_instance_init(LassoDsSignature *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ //class->new_ns(node, "http: //www.w3.org/2000/09/xmldsig#", "ds");
+ //class->set_name(node, "Signature");
+}
+
+static void
+lasso_ds_signature_class_init(LassoDsSignatureClass *klass)
+{
+}
+
+GType lasso_ds_signature_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoDsSignatureClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_ds_signature_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoDsSignature),
+ 0,
+ (GInstanceInitFunc) lasso_ds_signature_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoDsSignature",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_ds_signature_new:
+ *
+ * Creates a new <ds:Signature> node object.
+ *
+ * Return value: the new @LassoDsDignature
+ **/
+LassoNode* lasso_ds_signature_new(xmlDocPtr doc,
+ xmlSecTransformId signMethodId)
+{
+ LassoNode *node;
+ xmlNodePtr signature = NULL;
+ xmlNodePtr reference = NULL;
+ xmlNodePtr key_info = NULL;
+
+ node = LASSO_NODE(g_object_new(LASSO_TYPE_DS_SIGNATURE, NULL));
+
+ //signature = xmlSecTmplSignatureCreate(NULL, xmlSecTransformExclC14NId,
+ signature = xmlSecTmplSignatureCreate(doc, xmlSecTransformExclC14NId,
+ signMethodId, NULL);
+ if (signature == NULL) {
+ printf("Error: failed to create signature template\n");
+ }
+ reference = xmlSecTmplSignatureAddReference(signature,
+ xmlSecTransformSha1Id,
+ NULL, NULL, NULL);
+ if (reference == NULL) {
+ printf("Error: failed to add reference to signature template\n");
+ }
+
+ // add enveloped transform
+ if (xmlSecTmplReferenceAddTransform(reference, xmlSecTransformEnvelopedId) == NULL) {
+ printf("Error: failed to add enveloped transform to reference\n");
+ }
+
+ /* add <dsig:KeyInfo/> and <dsig:X509Data/> */
+ key_info = xmlSecTmplSignatureEnsureKeyInfo(signature, NULL);
+ if(key_info == NULL) {
+ printf("Error: failed to add key info\n");
+ }
+
+ if(xmlSecTmplKeyInfoAddX509Data(key_info) == NULL) {
+ printf("Error: failed to add X509Data node\n");
+ }
+
+ LASSO_NODE_GET_CLASS(node)->set_node(node, signature);
+
+ return (node);
+}
diff --git a/lasso/xml/ds_signature.h b/lasso/xml/ds_signature.h
new file mode 100644
index 00000000..8f047819
--- /dev/null
+++ b/lasso/xml/ds_signature.h
@@ -0,0 +1,65 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_DS_SIGNATURE_H__
+#define __LASSO_DS_SIGNATURE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_DS_SIGNATURE (lasso_ds_signature_get_type())
+#define LASSO_DS_SIGNATURE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_DS_SIGNATURE, LassoDsSignature))
+#define LASSO_DS_SIGNATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_DS_SIGNATURE, LassoDsSignatureClass))
+#define LASSO_IS_DS_SIGNATURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_DS_SIGNATURE))
+#define LASSO_IS_DS_SIGNATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_DS_SIGNATURE))
+#define LASSO_DS_SIGNATURE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_DS_SIGNATURE, LassoDsSignatureClass))
+
+typedef struct _LassoDsSignature LassoDsSignature;
+typedef struct _LassoDsSignatureClass LassoDsSignatureClass;
+
+struct _LassoDsSignature {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoDsSignatureClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_ds_signature_get_type(void);
+LASSO_EXPORT LassoNode* lasso_ds_signature_new(xmlDocPtr doc,
+ xmlSecTransformId signMethodId);
+
+LASSO_EXPORT void lasso_ds_signature_sign (LassoDsSignature *node,
+ const xmlChar* key_file,
+ const xmlChar* cert_file);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_DS_SIGNATURE_H__ */
diff --git a/lasso/xml/lib.h b/lasso/xml/lib.h
new file mode 100644
index 00000000..817148c6
--- /dev/null
+++ b/lasso/xml/lib.h
@@ -0,0 +1,59 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_H__
+#define __LASSO_LIB_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/lib_assertion.h>
+#include <lasso/xml/lib_authentication_statement.h>
+#include <lasso/xml/lib_authn_context.h>
+#include <lasso/xml/lib_authn_response.h>
+#include <lasso/xml/lib_authn_request.h>
+#include <lasso/xml/lib_federation_termination_notification.h>
+#include <lasso/xml/lib_idp_entries.h>
+#include <lasso/xml/lib_idp_entry.h>
+#include <lasso/xml/lib_idp_list.h>
+#include <lasso/xml/lib_idp_provided_name_identifier.h>
+#include <lasso/xml/lib_logout_request.h>
+#include <lasso/xml/lib_logout_response.h>
+#include <lasso/xml/lib_name_identifier_mapping_request.h>
+#include <lasso/xml/lib_name_identifier_mapping_response.h>
+#include <lasso/xml/lib_old_provided_name_identifier.h>
+#include <lasso/xml/lib_register_name_identifier_request.h>
+#include <lasso/xml/lib_register_name_identifier_response.h>
+#include <lasso/xml/lib_request_authn_context.h>
+#include <lasso/xml/lib_scoping.h>
+#include <lasso/xml/lib_sp_provided_name_identifier.h>
+#include <lasso/xml/lib_status_response.h>
+#include <lasso/xml/lib_subject.h>
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_H__ */
diff --git a/lasso/xml/lib_assertion.c b/lasso/xml/lib_assertion.c
new file mode 100644
index 00000000..1a34f858
--- /dev/null
+++ b/lasso/xml/lib_assertion.c
@@ -0,0 +1,111 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_assertion.h>
+
+/*
+Authentication assertions provided in an <AuthnResponse> element MUST be of
+type AssertionType, which is an extension of saml:AssertionType, so that the
+RequestID attribute from the original <AuthnRequest> MAY be included in the
+InResponseTo attribute in the <Assertion> element. This is done because it is
+not required that the <AuthnResponse> element itself be signed. Instead, the
+individual <Assertion> elements contained MUST each be signed. Note that it is
+optional for the InResponseTo to be present. Its absence indicates that the
+<AuthnResponse> has been unilaterally sent by the identity provider without a
+corresponding <AuthnRequest> message from the service provider. If the
+attribute is present, it MUST be set to the RequestID of the original
+<AuthnRequest>.
+
+The schema fragment is as follows:
+
+<xs:element name="Assertion" type="AssertionType" substitutionGroup="saml:Assertion" />
+<xs:complexType name="AssertionType">
+ <xs:complexContent>
+ <xs:extension base="saml:AssertionType">
+ <xs:attribute name="InResponseTo" type="xs:NCName" use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_lib_assertion_set_inResponseTo(LassoLibAssertion *node,
+ const xmlChar *inResponseTo)
+{
+ g_assert(LASSO_IS_LIB_ASSERTION(node));
+ g_assert(inResponseTo != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "InResponseTo", inResponseTo);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_assertion_instance_init(LassoLibAssertion *instance,
+ LassoLibAssertionClass *klass) {
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "Assertion");
+}
+
+static void
+lasso_lib_assertion_class_init(LassoLibAssertionClass *klass) {
+}
+
+GType lasso_lib_assertion_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibAssertionClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_assertion_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibAssertion),
+ 0,
+ (GInstanceInitFunc) lasso_lib_assertion_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAML_ASSERTION,
+ "LassoLibAssertion",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_lib_assertion_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_ASSERTION, NULL));
+}
diff --git a/lasso/xml/lib_assertion.h b/lasso/xml/lib_assertion.h
new file mode 100644
index 00000000..2156275f
--- /dev/null
+++ b/lasso/xml/lib_assertion.h
@@ -0,0 +1,63 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_ASSERTION_H__
+#define __LASSO_LIB_ASSERTION_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/saml_assertion.h>
+
+#define LASSO_TYPE_LIB_ASSERTION (lasso_lib_assertion_get_type())
+#define LASSO_LIB_ASSERTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_ASSERTION, LassoLibAssertion))
+#define LASSO_LIB_ASSERTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_ASSERTION, LassoLibAssertionClass))
+#define LASSO_IS_LIB_ASSERTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_ASSERTION))
+#define LASSP_IS_LIB_ASSERTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_ASSERTION))
+#define LASSO_LIB_ASSERTION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_ASSERTION, LassoLibAssertionClass))
+
+typedef struct _LassoLibAssertion LassoLibAssertion;
+typedef struct _LassoLibAssertionClass LassoLibAssertionClass;
+
+struct _LassoLibAssertion {
+ LassoSamlAssertion parent;
+ /*< private >*/
+};
+
+struct _LassoLibAssertionClass {
+ LassoSamlAssertionClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_assertion_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_assertion_new(void);
+
+LASSO_EXPORT void lasso_lib_assertion_set_inResponseTo (LassoLibAssertion *,
+ const xmlChar *);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_ASSERTION_H__ */
diff --git a/lasso/xml/lib_authentication_statement.c b/lasso/xml/lib_authentication_statement.c
new file mode 100644
index 00000000..408346c7
--- /dev/null
+++ b/lasso/xml/lib_authentication_statement.c
@@ -0,0 +1,133 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_authentication_statement.h>
+
+/*
+The schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="AuthenticationStatement" type="AuthenticationStatementType" substitutionGroup="saml:Statement"/>
+<xs:complexType name="AuthenticationStatementType">
+ <xs:complexContent>
+ <xs:extension base="saml:AuthenticationStatementType">
+ <xs:sequence>
+ <xs:element ref="AuthnContext" minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute name="ReauthenticateOnOrAfter" type="xs:dateTime" use="optional"/>
+ <xs:attribute name="SessionIndex" type="xs:string" use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_lib_authentication_statement_set_authnContext(LassoLibAuthenticationStatement *node,
+ LassoLibAuthnContext *authnContext)
+{
+ g_assert(LASSO_IS_LIB_AUTHENTICATION_STATEMENT(node));
+ g_assert(LASSO_IS_LIB_AUTHN_CONTEXT(authnContext));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(authnContext), FALSE);
+}
+
+void
+lasso_lib_authentication_statement_set_reauthenticateOnOrAfter(LassoLibAuthenticationStatement *node,
+ const xmlChar *reauthenticateOnOrAfter)
+{
+ g_assert(LASSO_IS_LIB_AUTHENTICATION_STATEMENT(node));
+ g_assert(reauthenticateOnOrAfter != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "ReauthenticateOnOrAfter", reauthenticateOnOrAfter);
+}
+
+void
+lasso_lib_authentication_statement_set_sessionIndex(LassoLibAuthenticationStatement *node,
+ const xmlChar *sessionIndex)
+{
+ g_assert(LASSO_IS_LIB_AUTHENTICATION_STATEMENT(node));
+ g_assert(sessionIndex != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "SessionIndex", sessionIndex);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_authentication_statement_instance_init(LassoLibAuthenticationStatement *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->set_name(node, "AuthenticationStatement");
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+}
+
+static void
+lasso_lib_authentication_statement_class_init(LassoLibAuthenticationStatementClass *klass)
+{
+}
+
+GType lasso_lib_authentication_statement_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibAuthenticationStatementClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_authentication_statement_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibAuthenticationStatement),
+ 0,
+ (GInstanceInitFunc) lasso_lib_authentication_statement_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT,
+ "LassoLibAuthenticationStatement",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_lib_authentication_statement_new:
+ *
+ * Creates a new <lib:AuthenticationStatement> node object.
+ *
+ * Return value: the new @LassoLibAuthenticationStatement
+ **/
+LassoNode* lasso_lib_authentication_statement_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT, NULL));
+}
diff --git a/lasso/xml/lib_authentication_statement.h b/lasso/xml/lib_authentication_statement.h
new file mode 100644
index 00000000..8ccc0df4
--- /dev/null
+++ b/lasso/xml/lib_authentication_statement.h
@@ -0,0 +1,72 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_AUTHENTICATION_STATEMENT_H__
+#define __LASSO_LIB_AUTHENTICATION_STATEMENT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/lasso.h>
+#include <lasso/xml/saml_authentication_statement.h>
+#include <lasso/xml/lib_authn_context.h>
+
+#define LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT (lasso_lib_authentication_statement_get_type())
+#define LASSO_LIB_AUTHENTICATION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT, LassoLibAuthenticationStatement))
+#define LASSO_LIB_AUTHENTICATION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT, LassoLibAuthenticationStatementClass))
+#define LASSO_IS_LIB_AUTHENTICATION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT))
+#define LASSO_IS_LIB_AUTHENTICATION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT))
+#define LASSO_LIB_AUTHENTICATION_STATEMENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_AUTHENTICATION_STATEMENT, LassoLibAuthenticationStatementClass))
+
+typedef struct _LassoLibAuthenticationStatement LassoLibAuthenticationStatement;
+typedef struct _LassoLibAuthenticationStatementClass LassoLibAuthenticationStatementClass;
+
+struct _LassoLibAuthenticationStatement {
+ LassoSamlAuthenticationStatement parent;
+ /*< private >*/
+};
+
+struct _LassoLibAuthenticationStatementClass {
+ LassoSamlAuthenticationStatementClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_lib_authentication_statement_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_authentication_statement_new(void);
+
+LASSO_EXPORT void lasso_lib_authentication_statement_set_authnContext (LassoLibAuthenticationStatement *node,
+ LassoLibAuthnContext *authnContext);
+
+LASSO_EXPORT void lasso_lib_authentication_statement_set_reauthenticateOnOrAfter (LassoLibAuthenticationStatement *node,
+ const xmlChar *reauthenticateOnOrAfter);
+
+LASSO_EXPORT void lasso_lib_authentication_statement_set_sessionIndex (LassoLibAuthenticationStatement *node,
+ const xmlChar *sessionIndex);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_AUTHENTICATION_STATEMENT_H__ */
diff --git a/lasso/xml/lib_authn_context.c b/lasso/xml/lib_authn_context.c
new file mode 100644
index 00000000..ab8fc4a1
--- /dev/null
+++ b/lasso/xml/lib_authn_context.c
@@ -0,0 +1,124 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_authn_context.h>
+
+/*
+The Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="AuthnContext">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="AuthnContextClassRef" type="xs:anyURI" minOccurs="0"/>
+ <xs:choice>
+ <xs:element ref="ac:AuthenticationContextStatement"/>
+ <xs:element name="AuthnContextStatementRef" type="xs:anyURI"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+</xs:element>
+
+From schema liberty-authentication-context-v1.2.xsd:
+<xs:element name="AuthenticationContextStatement" type="AuthenticationContextStatementType">
+ <xs:annotation>
+ <xs:documentation>
+ A particular assertion on an identity
+ provider's part with respect to the authentication
+ context associated with an authentication assertion.
+ </xs:documentation>
+ </xs:annotation>
+</xs:element>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_lib_authn_context_set_authnContextClassRef(LassoLibAuthnContext *node,
+ const xmlChar *authnContextClassRef) {
+ g_assert(LASSO_IS_LIB_AUTHN_CONTEXT(node));
+ g_assert(authnContextClassRef != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "AuthnContextClassRef",
+ authnContextClassRef, FALSE);
+}
+
+void
+lasso_lib_authn_context_set_authnContextStatementRef(LassoLibAuthnContext *node,
+ const xmlChar *authnContextStatementRef) {
+ g_assert(LASSO_IS_LIB_AUTHN_CONTEXT(node));
+ g_assert(authnContextStatementRef != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "AuthnContextStatementRef",
+ authnContextStatementRef, FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_authn_context_instance_init(LassoLibAuthnContext *authnContext)
+{
+ LassoNodeClass *object_class = LASSO_NODE_GET_CLASS(authnContext);
+
+ object_class->new_ns(LASSO_NODE(authnContext), "urn:liberty:iff:2003-08", "lib");
+ object_class->set_name(LASSO_NODE(authnContext), "AuthnContext");
+}
+
+static void
+lasso_lib_authn_context_class_init(LassoLibAuthnContextClass *klass)
+{
+}
+
+GType lasso_lib_authn_context_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibAuthnContextClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_authn_context_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibAuthnContext),
+ 0,
+ (GInstanceInitFunc) lasso_lib_authn_context_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoLibAuthnContext",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_lib_authn_context_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_AUTHN_CONTEXT,
+ NULL));
+}
diff --git a/lasso/xml/lib_authn_context.h b/lasso/xml/lib_authn_context.h
new file mode 100644
index 00000000..6f340e14
--- /dev/null
+++ b/lasso/xml/lib_authn_context.h
@@ -0,0 +1,66 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_AUTHN_CONTEXT_H__
+#define __LASSO_LIB_AUTHN_CONTEXT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_LIB_AUTHN_CONTEXT (lasso_lib_authn_context_get_type())
+#define LASSO_LIB_AUTHN_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_AUTHN_CONTEXT, LassoLibAuthnContext))
+#define LASSO_LIB_AUTHN_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_AUTHN_CONTEXT, LassoLibAuthnContextClass))
+#define LASSO_IS_LIB_AUTHN_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_AUTHN_CONTEXT))
+#define LASSO_IS_LIB_AUTHN_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_AUTHN_CONTEXT))
+#define LASSO_LIB_AUTHN_CONTEXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_AUTHN_CONTEXT, LassoLibAuthnContextClass))
+
+typedef struct _LassoLibAuthnContext LassoLibAuthnContext;
+typedef struct _LassoLibAuthnContextClass LassoLibAuthnContextClass;
+
+struct _LassoLibAuthnContext {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoLibAuthnContextClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_authn_context_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_authn_context_new(void);
+
+LASSO_EXPORT void lasso_lib_authn_context_set_authnContextClassRef (LassoLibAuthnContext *node,
+ const xmlChar *authnContextClassRef);
+
+LASSO_EXPORT void lasso_lib_authn_context_set_authnContextStatementRef (LassoLibAuthnContext *node,
+ const xmlChar *authnContextStatementRef);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_AUTHN_CONTEXT_H__ */
diff --git a/lasso/xml/lib_authn_request.c b/lasso/xml/lib_authn_request.c
new file mode 100644
index 00000000..f5b8e8d7
--- /dev/null
+++ b/lasso/xml/lib_authn_request.c
@@ -0,0 +1,266 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_authn_request.h>
+
+/*
+The <AuthnRequest> is defined as an extension of samlp:RequestAbstractType.
+The RequestID attribute in samlp:RequestAbstractType has uniqueness
+requirements placed on it by [SAMLCore11], which require it to have the
+properties of a nonce.
+
+Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="AuthnRequest" type="AuthnRequestType" />
+<xs:complexType name="AuthnRequestType">
+ <xs:complexContent>
+ <xs:extension base="samlp:RequestAbstractType">
+ <xs:sequence>
+ <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="ProviderID"/>
+ <xs:element ref="AffiliationID" minOccurs="0"/>
+ <xs:element ref="NameIDPolicy" minOccurs="0"/>
+ <xs:element name="ForceAuthn" type="xs:boolean" minOccurs="0"/>
+ <xs:element name="IsPassive" type="xs:boolean "minOccurs="0"/>
+ <xs:element ref="ProtocolProfile" minOccurs="0"/>
+ <xs:element name="AssertionConsumerServiceID" type="xs:string" minOccurs="0"/>
+ <xs:element ref="RequestAuthnContext" minOccurs="0"/>
+ <xs:element ref="RelayState" minOccurs="0"/>
+ <xs:element ref="Scoping" minOccurs="0 "/>
+ </xs:sequence>
+ <xs:attribute ref="consent" use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+
+<xs:element name="ProviderID" type="md:entityIDType"/>
+<xs:element name="AffiliationID" type="md:entityIDType"/>
+
+From liberty-metadata-v1.0.xsd:
+<xs:simpleType name="entityIDType">
+ <xs:restriction base="xs:anyURI">
+ <xs:maxLength value="1024" id="maxlengthid"/>
+ </xs:restriction>
+</xs:simpleType>
+
+<xs:element name="NameIDPolicy" type="NameIDPolicyType"/>
+<xs:simpleType name="NameIDPolicyType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="none"/>
+ <xs:enumeration value="onetime"/>
+ <xs:enumeration value="federated"/>
+ <xs:enumeration value="any"/ >
+ </xs:restriction>
+</xs:simpleType>
+
+<xs:element name="ProtocolProfile" type="xs:anyURI"/>
+<xs:element name="RelayState" type="xs:string"/>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_lib_authn_request_set_affiliationID(LassoLibAuthnRequest *node,
+ const xmlChar *affiliationID) {
+ g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
+ g_assert(affiliationID != NULL);
+ // FIXME : affiliationID lenght SHOULD be <= 1024
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "AffiliationID", affiliationID, FALSE);
+}
+
+void
+lasso_lib_authn_request_set_assertionConsumerServiceID(LassoLibAuthnRequest *node,
+ const xmlChar *assertionConsumerServiceID) {
+ g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
+ g_assert(assertionConsumerServiceID != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "AssertionConsumerServiceID",
+ assertionConsumerServiceID, FALSE);
+}
+
+void
+lasso_lib_authn_request_set_consent(LassoLibAuthnRequest *node,
+ const xmlChar *consent)
+{
+ g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
+ g_assert(consent != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "consent", consent);
+}
+
+void
+lasso_lib_authn_request_set_forceAuthn(LassoLibAuthnRequest *node,
+ const xmlChar *forceAuthn) {
+ g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
+ g_assert(forceAuthn != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ForceAuthn", forceAuthn, FALSE);
+}
+
+void
+lasso_lib_authn_request_set_isPassive(LassoLibAuthnRequest *node,
+ const xmlChar *isPassive) {
+ g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
+ g_assert(isPassive != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "IsPassive", isPassive, FALSE);
+}
+
+/**
+ * lasso_lib_authn_request_set_nameIDPolicy:
+ * @node: the pointer to <lib:AuthnRequest> node
+ * @nameIDPolicy: the value of "NameIDPolicy" attribut.
+ *
+ * Sets the "NameIDPolicy" attribut. It's an enumeration permitting requester
+ * influence over name identifier policy at the identity provider.
+ **/
+void
+lasso_lib_authn_request_set_nameIDPolicy(LassoLibAuthnRequest *node,
+ const xmlChar *nameIDPolicy)
+{
+ g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
+ g_assert(nameIDPolicy != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "NameIDPolicy", nameIDPolicy, FALSE);
+}
+
+void
+lasso_lib_authn_request_set_protocolProfile(LassoLibAuthnRequest *node,
+ const xmlChar *protocolProfile)
+{
+ g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
+ g_assert(protocolProfile != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProtocolProfile", protocolProfile, FALSE);
+}
+
+void
+lasso_lib_authn_request_set_providerID(LassoLibAuthnRequest *node,
+ const xmlChar *providerID)
+{
+ g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
+ g_assert(providerID != NULL);
+ // FIXME : providerID lenght SHOULD be <= 1024
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProviderID", providerID, FALSE);
+}
+
+void
+lasso_lib_authn_request_set_relayState(LassoLibAuthnRequest *node,
+ const xmlChar *relayState) {
+ g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
+ g_assert(relayState != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "RelayState", relayState, FALSE);
+}
+
+void
+lasso_lib_authn_request_set_requestAuthnContext(LassoLibAuthnRequest *node,
+ LassoLibRequestAuthnContext *requestAuthnContext) {
+ g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
+ g_assert(LASSO_IS_LIB_REQUEST_AUTHN_CONTEXT(requestAuthnContext));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node),
+ LASSO_NODE (requestAuthnContext),
+ FALSE);
+}
+
+/**
+ * lasso_lib_authn_request_set_scoping:
+ * @node: the pointer to <lib:AuthnRequest/> node object
+ * @scoping: the pointer to <lib:Scoping/> node object
+ *
+ * Sets the "Scoping" element.
+ **/
+void
+lasso_lib_authn_request_set_scoping(LassoLibAuthnRequest *node,
+ LassoLibScoping *scoping)
+{
+ g_assert(LASSO_IS_LIB_AUTHN_REQUEST(node));
+ g_assert(LASSO_IS_LIB_SCOPING(scoping));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node),
+ LASSO_NODE (scoping),
+ FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_authn_request_instance_init(LassoLibAuthnRequest *authnRequest)
+{
+ LassoNodeClass *object_class = LASSO_NODE_GET_CLASS(authnRequest);
+
+ object_class->new_ns(LASSO_NODE(authnRequest), "urn:liberty:iff:2003-08", "lib");
+ object_class->set_name(LASSO_NODE(authnRequest), "AuthnRequest");
+}
+
+static void
+lasso_lib_authn_request_class_init(LassoLibAuthnRequestClass *klass)
+{
+}
+
+GType lasso_lib_authn_request_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibAuthnRequestClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_authn_request_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibAuthnRequest),
+ 0,
+ (GInstanceInitFunc) lasso_lib_authn_request_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT,
+ "LassoLibAuthnRequest",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_lib_authn_request_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_AUTHN_REQUEST,
+ NULL));
+}
diff --git a/lasso/xml/lib_authn_request.h b/lasso/xml/lib_authn_request.h
new file mode 100644
index 00000000..4c7be627
--- /dev/null
+++ b/lasso/xml/lib_authn_request.h
@@ -0,0 +1,95 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_AUTHN_REQUEST_H__
+#define __LASSO_LIB_AUTHN_REQUEST_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/samlp_request_abstract.h>
+#include <lasso/xml/lib_request_authn_context.h>
+#include <lasso/xml/lib_scoping.h>
+
+#define LASSO_TYPE_LIB_AUTHN_REQUEST (lasso_lib_authn_request_get_type())
+#define LASSO_LIB_AUTHN_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_AUTHN_REQUEST, LassoLibAuthnRequest))
+#define LASSO_LIB_AUTHN_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_AUTHN_REQUEST, LassoLibAuthnRequestClass))
+#define LASSO_IS_LIB_AUTHN_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_AUTHN_REQUEST))
+#define LASSO_IS_LIB_AUTHN_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_AUTHN_REQUEST))
+#define LASSO_LIB_AUTHN_REQUEST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_AUTHN_REQUEST, LassoLibAuthnRequestClass))
+
+typedef struct _LassoLibAuthnRequest LassoLibAuthnRequest;
+typedef struct _LassoLibAuthnRequestClass LassoLibAuthnRequestClass;
+
+struct _LassoLibAuthnRequest {
+ LassoSamlpRequestAbstract parent;
+ /*< private >*/
+};
+
+struct _LassoLibAuthnRequestClass {
+ LassoSamlpRequestAbstractClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_authn_request_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_authn_request_new(void);
+
+LASSO_EXPORT void lasso_lib_authn_request_set_affiliationID (LassoLibAuthnRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_authn_request_set_assertionConsumerServiceID (LassoLibAuthnRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_authn_request_set_consent (LassoLibAuthnRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_authn_request_set_forceAuthn (LassoLibAuthnRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_authn_request_set_isPassive (LassoLibAuthnRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_authn_request_set_nameIDPolicy (LassoLibAuthnRequest *node,
+ const xmlChar *nameIDPolicy);
+
+LASSO_EXPORT void lasso_lib_authn_request_set_protocolProfile (LassoLibAuthnRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_authn_request_set_providerID (LassoLibAuthnRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_authn_request_set_relayState (LassoLibAuthnRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_authn_request_set_requestAuthnContext (LassoLibAuthnRequest *,
+ LassoLibRequestAuthnContext *);
+
+LASSO_EXPORT void lasso_lib_authn_request_set_scoping (LassoLibAuthnRequest *node,
+ LassoLibScoping *scoping);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_AUTHN_REQUEST_H__ */
diff --git a/lasso/xml/lib_authn_response.c b/lasso/xml/lib_authn_response.c
new file mode 100644
index 00000000..7eb5d1d2
--- /dev/null
+++ b/lasso/xml/lib_authn_response.c
@@ -0,0 +1,138 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_authn_response.h>
+
+/*
+Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="AuthnResponse" type="AuthnResponseType"/>
+<xs:complexType name="AuthnResponseType">
+ <xs:complexContent>
+ <xs:extension base="samlp:ResponseType">
+ <xs:sequence>
+ <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="ProviderID"/>
+ <xs:element ref="RelayState" minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute ref="consent" use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+
+<xs:element name="ProviderID" type="md:entityIDType"/>
+From liberty-metadata-v1.0.xsd:
+<xs:simpleType name="entityIDType">
+ <xs:restriction base="xs:anyURI">
+ <xs:maxLength value="1024" id="maxlengthid"/>
+ </xs:restriction>
+</xs:simpleType>
+<xs:element name="RelayState" type="xs:string"/>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_lib_authn_response_set_consent(LassoLibAuthnResponse *node,
+ const xmlChar *consent)
+{
+ g_assert(LASSO_IS_LIB_AUTHN_RESPONSE(node));
+ g_assert(consent != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "consent", consent);
+}
+
+void
+lasso_lib_authn_response_set_providerID(LassoLibAuthnResponse *node,
+ const xmlChar *providerID)
+{
+ g_assert(LASSO_IS_LIB_AUTHN_RESPONSE(node));
+ g_assert(providerID != NULL);
+ // FIXME : providerID lenght SHOULD be <= 1024
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProviderID", providerID, FALSE);
+}
+
+void
+lasso_lib_authn_response_set_relayState(LassoLibAuthnResponse *node,
+ const xmlChar *relayState)
+{
+ g_assert(LASSO_IS_LIB_AUTHN_RESPONSE(node));
+ g_assert(relayState != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "RelayState", relayState, FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_authn_response_instance_init(LassoLibAuthnResponse *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "AuthnResponse");
+}
+
+static void
+lasso_lib_authn_response_class_init(LassoLibAuthnResponseClass *klass)
+{
+}
+
+GType lasso_lib_authn_response_get_type() {
+ static GType authn_response_type = 0;
+
+ if (!authn_response_type) {
+ static const GTypeInfo authn_response_info = {
+ sizeof (LassoLibAuthnResponseClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_authn_response_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibAuthnResponse),
+ 0,
+ (GInstanceInitFunc) lasso_lib_authn_response_instance_init,
+ };
+
+ authn_response_type = g_type_register_static(LASSO_TYPE_SAMLP_RESPONSE,
+ "LassoLibAuthnResponse",
+ &authn_response_info, 0);
+ }
+ return authn_response_type;
+}
+
+LassoNode* lasso_lib_authn_response_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_AUTHN_RESPONSE, NULL));
+}
diff --git a/lasso/xml/lib_authn_response.h b/lasso/xml/lib_authn_response.h
new file mode 100644
index 00000000..139d3bb4
--- /dev/null
+++ b/lasso/xml/lib_authn_response.h
@@ -0,0 +1,69 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_AUTHN_RESPONSE_H__
+#define __LASSO_LIB_AUTHN_RESPONSE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/samlp_response.h>
+
+#define LASSO_TYPE_LIB_AUTHN_RESPONSE (lasso_lib_authn_response_get_type())
+#define LASSO_LIB_AUTHN_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_AUTHN_RESPONSE, LassoLibAuthnResponse))
+#define LASSO_LIB_AUTHN_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_AUTHN_RESPONSE, LassoLibAuthnResponseClass))
+#define LASSO_IS_LIB_AUTHN_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_AUTHN_RESPONSE))
+#define LASSO_IS_LIB_AUTHN_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_AUTHN_RESPONSE))
+#define LASSO_LIB_AUTHN_RESPONSE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_AUTHN_RESPONSE, LassoLibAuthnResponseClass))
+
+typedef struct _LassoLibAuthnResponse LassoLibAuthnResponse;
+typedef struct _LassoLibAuthnResponseClass LassoLibAuthnResponseClass;
+
+struct _LassoLibAuthnResponse {
+ LassoSamlpResponse parent;
+ /*< private >*/
+};
+
+struct _LassoLibAuthnResponseClass {
+ LassoSamlpResponseClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_authn_response_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_authn_response_new(void);
+
+LASSO_EXPORT void lasso_lib_authn_response_set_consent (LassoLibAuthnResponse *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_authn_response_set_providerID (LassoLibAuthnResponse *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_authn_response_set_relayState (LassoLibAuthnResponse *,
+ const xmlChar *);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_AUTHN_RESPONSE_H__ */
diff --git a/lasso/xml/lib_federation_termination_notification.c b/lasso/xml/lib_federation_termination_notification.c
new file mode 100644
index 00000000..65c670fb
--- /dev/null
+++ b/lasso/xml/lib_federation_termination_notification.c
@@ -0,0 +1,140 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Authors: Valery Febvre <vfebvre@easter-eggs.com>
+ * Nicolas Clapies <nclapies@entrouvert.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_federation_termination_notification.h>
+
+/*
+Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="FederationTerminationNotification" type="FederationTerminationNotificationType"/>
+ <xs:complexType name="FederationTerminationNotificationType">
+ <xs:complexContent>
+ <xs:extension base="samlp:RequestAbstractType">
+ <xs:sequence>
+ <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="ProviderID"/>
+ <xs:element ref="saml:NameIdentifier"/>
+ </xs:sequence>
+ <xs:attribute ref="consent" use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+
+<xs:element name="ProviderID" type="md:entityIDType"/>
+
+From liberty-metadata-v1.0.xsd:
+<xs:simpleType name="entityIDType">
+ <xs:restriction base="xs:anyURI">
+ <xs:maxLength value="1024" id="maxlengthid"/>
+ </xs:restriction>
+</xs:simpleType>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_lib_federation_termination_notification_set_consent(LassoLibFederationTerminationNotification *node,
+ const xmlChar *consent)
+{
+ g_assert(LASSO_IS_LIB_FEDERATION_TERMINATION_NOTIFICATION(node));
+ g_assert(consent != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "consent", consent);
+}
+
+void
+lasso_lib_federation_termination_notification_set_providerID(LassoLibFederationTerminationNotification *node,
+ const xmlChar *providerID)
+{
+ g_assert(LASSO_IS_LIB_FEDERATION_TERMINATION_NOTIFICATION(node));
+ g_assert(providerID != NULL);
+ // FIXME : providerId lenght SHOULD be <= 1024
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProviderID", providerID, FALSE);
+}
+
+void
+lasso_lib_federation_termination_notification_set_nameIdentifier(LassoLibFederationTerminationNotification *node,
+ LassoSamlNameIdentifier *nameIdentifier)
+{
+ g_assert(LASSO_IS_LIB_FEDERATION_TERMINATION_NOTIFICATION(node));
+ g_assert(LASSO_IS_SAML_NAME_IDENTIFIER(nameIdentifier));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE (nameIdentifier), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_federation_termination_notification_instance_init(LassoLibFederationTerminationNotification *federationTerminationNotification)
+{
+ LassoNodeClass *object_class = LASSO_NODE_GET_CLASS(federationTerminationNotification);
+
+ object_class->new_ns(LASSO_NODE(federationTerminationNotification),
+ "urn:liberty:iff:2003-08", "lib");
+ object_class->set_name(LASSO_NODE(federationTerminationNotification),
+ "FederationTerminationNotification");
+}
+
+static void
+lasso_lib_federation_termination_notification_class_init(LassoLibFederationTerminationNotificationClass *klass)
+{
+}
+
+GType lasso_lib_federation_termination_notification_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibFederationTerminationNotificationClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_federation_termination_notification_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibFederationTerminationNotification),
+ 0,
+ (GInstanceInitFunc) lasso_lib_federation_termination_notification_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT,
+ "LassoLibFederationTerminationNotification",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_lib_federation_termination_notification_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION,
+ NULL));
+}
diff --git a/lasso/xml/lib_federation_termination_notification.h b/lasso/xml/lib_federation_termination_notification.h
new file mode 100644
index 00000000..9b1176ac
--- /dev/null
+++ b/lasso/xml/lib_federation_termination_notification.h
@@ -0,0 +1,70 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_H__
+#define __LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/saml_name_identifier.h>
+#include <lasso/xml/samlp_request_abstract.h>
+
+#define LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION (lasso_lib_federation_termination_notification_get_type())
+#define LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION, LassoLibFederationTerminationNotification))
+#define LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION, LassoLibFederationTerminationNotificationClass))
+#define LASSO_IS_LIB_FEDERATION_TERMINATION_NOTIFICATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION))
+#define LASSO_IS_LIB_FEDERATION_TERMINATION_NOTIFICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION))
+#define LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_FEDERATION_TERMINATION_NOTIFICATION, LassoLibFederationTerminationNotificationClass))
+
+typedef struct _LassoLibFederationTerminationNotification LassoLibFederationTerminationNotification;
+typedef struct _LassoLibFederationTerminationNotificationClass LassoLibFederationTerminationNotificationClass;
+
+struct _LassoLibFederationTerminationNotification {
+ LassoSamlpRequestAbstract parent;
+ /*< private >*/
+};
+
+struct _LassoLibFederationTerminationNotificationClass {
+ LassoSamlpRequestAbstractClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_federation_termination_notification_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_federation_termination_notification_new(void);
+
+LASSO_EXPORT void lasso_lib_federation_termination_notification_set_consent (LassoLibFederationTerminationNotification *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_federation_termination_notification_set_providerID (LassoLibFederationTerminationNotification *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_federation_termination_notification_set_nameIdentifier (LassoLibFederationTerminationNotification *,
+ LassoSamlNameIdentifier *);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_FEDERATION_TERMINATION_NOTIFICATION_H__ */
diff --git a/lasso/xml/lib_idp_entries.c b/lasso/xml/lib_idp_entries.c
new file mode 100644
index 00000000..d4f22eef
--- /dev/null
+++ b/lasso/xml/lib_idp_entries.c
@@ -0,0 +1,115 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_idp_entries.h>
+
+/*
+Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="IDPEntries">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="IDPEntry" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+</xs:element>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+/**
+ * lasso_lib_idp_entries_add_idpEntry:
+ * @node: the pointer to <lib:IDPEntries/> node object
+ * @idpEntry: the pointer to <lib:IDPEntry/> node object
+ *
+ * Adds an "IDPEntry" element [required].
+ *
+ * It describes an identity provider that the service provider supports.
+ **/
+void
+lasso_lib_idp_entries_add_idpEntry(LassoLibIDPEntries *node,
+ LassoLibIDPEntry *idpEntry)
+{
+ g_assert(LASSO_IS_LIB_IDP_ENTRIES(node));
+ g_assert(LASSO_IS_LIB_IDP_ENTRY(idpEntry));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(idpEntry), TRUE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_idp_entries_instance_init(LassoLibIDPEntries *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "IDPEntries");
+}
+
+static void
+lasso_lib_idp_entries_class_init(LassoLibIDPEntriesClass *klass)
+{
+}
+
+GType lasso_lib_idp_entries_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibIDPEntriesClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_idp_entries_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibIDPEntries),
+ 0,
+ (GInstanceInitFunc) lasso_lib_idp_entries_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoLibIDPEntries",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_lib_idp_entries_new:
+ *
+ * Creates a new "<lib:IDPEntries/>" node object.
+ *
+ * Return value: the new @LassoLibIDPEntries
+ **/
+LassoNode* lasso_lib_idp_entries_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_IDP_ENTRIES, NULL));
+}
diff --git a/lasso/xml/lib_idp_entries.h b/lasso/xml/lib_idp_entries.h
new file mode 100644
index 00000000..1f5046a4
--- /dev/null
+++ b/lasso/xml/lib_idp_entries.h
@@ -0,0 +1,64 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_IDP_ENTRIES_H__
+#define __LASSO_LIB_IDP_ENTRIES_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+#include <lasso/xml/lib_idp_entry.h>
+
+#define LASSO_TYPE_LIB_IDP_ENTRIES (lasso_lib_idp_entries_get_type())
+#define LASSO_LIB_IDP_ENTRIES(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_IDP_ENTRIES, LassoLibIDPEntries))
+#define LASSO_LIB_IDP_ENTRIES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_IDP_ENTRIES, LassoLibIDPEntriesClass))
+#define LASSO_IS_LIB_IDP_ENTRIES(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_IDP_ENTRIES))
+#define LASSO_IS_LIB_IDP_ENTRIES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_IDP_ENTRIES))
+#define LASSO_LIB_IDP_ENTRIES_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_IDP_ENTRIES, LassoLibIDPEntriesClass))
+
+typedef struct _LassoLibIDPEntries LassoLibIDPEntries;
+typedef struct _LassoLibIDPEntriesClass LassoLibIDPEntriesClass;
+
+struct _LassoLibIDPEntries{
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoLibIDPEntriesClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_idp_entries_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_idp_entries_new(void);
+
+LASSO_EXPORT void lasso_lib_idp_entries_add_idpEntry (LassoLibIDPEntries *node,
+ LassoLibIDPEntry *idpEntry);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_IDP_ENTRIES_H__ */
diff --git a/lasso/xml/lib_idp_entry.c b/lasso/xml/lib_idp_entry.c
new file mode 100644
index 00000000..11c9108d
--- /dev/null
+++ b/lasso/xml/lib_idp_entry.c
@@ -0,0 +1,160 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_idp_entry.h>
+
+/*
+Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="IDPEntry">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="ProviderID"/>
+ <xs:element name="ProviderName" type="xs:string" minOccurs="0"/>
+ <xs:element name="Loc" type="xs:anyURI"/>
+ </xs:sequence>
+ </xs:complexType>
+</xs:element>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+/**
+ * lasso_lib_idp_entry_set_providerID:
+ * @node: the pointer to <lib:IDPEntry/> node object
+ * @providerID: the value of "ProviderID" element
+ *
+ * Sets the "ProviderID" element [required].
+ *
+ * It's the identity provider's unique identifier.
+ **/
+void
+lasso_lib_idp_entry_set_providerID(LassoLibIDPEntry *node,
+ const xmlChar *providerID)
+{
+ g_assert(LASSO_IS_LIB_IDP_ENTRY(node));
+ g_assert(providerID != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProviderID", providerID, FALSE);
+}
+
+/**
+ * lasso_lib_idp_entry_set_providerName:
+ * @node: the pointer to <lib:IDPEntry/> node object
+ * @providerName: the value of "ProviderName" element
+ *
+ * Sets the "ProviderName" element [optional].
+ *
+ * It's the identity provider's human-readable name.
+ **/
+void
+lasso_lib_idp_entry_set_providerName(LassoLibIDPEntry *node,
+ const xmlChar *providerName)
+{
+ g_assert(LASSO_IS_LIB_IDP_ENTRY(node));
+ g_assert(providerName != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProviderName", providerName, FALSE);
+}
+
+/**
+ * lasso_lib_idp_entry_set_loc:
+ * @node: the pointer to <lib:IDPEntry/> node object
+ * @loc: the value of "Loc" element
+ *
+ * Sets the "Loc" element [optional].
+ *
+ * It's the identity provider's URI, to which authentication requests may be
+ * sent. If present, this MUST be set to the value of the identity provider's
+ * <SingleSignOnService> element, obtained from their metadata
+ * ([LibertyMetadata]).
+ **/
+void
+lasso_lib_idp_entry_set_loc(LassoLibIDPEntry *node,
+ const xmlChar *loc)
+{
+ g_assert(LASSO_IS_LIB_IDP_ENTRY(node));
+ g_assert(loc != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "Loc", loc, FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_idp_entry_instance_init(LassoLibIDPEntry *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "IDPEntry");
+}
+
+static void
+lasso_lib_idp_entry_class_init(LassoLibIDPEntryClass *klass)
+{
+}
+
+GType lasso_lib_idp_entry_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibIDPEntryClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_idp_entry_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibIDPEntry),
+ 0,
+ (GInstanceInitFunc) lasso_lib_idp_entry_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoLibIDPEntry",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_lib_idp_entry_new:
+ *
+ * Creates a new <lib:IDPEntry/> node object.
+ *
+ * Return value: the new @LassoLibIDPEntry
+ **/
+LassoNode* lasso_lib_idp_entry_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_IDP_ENTRY, NULL));
+}
diff --git a/lasso/xml/lib_idp_entry.h b/lasso/xml/lib_idp_entry.h
new file mode 100644
index 00000000..8b190206
--- /dev/null
+++ b/lasso/xml/lib_idp_entry.h
@@ -0,0 +1,69 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_IDP_ENTRY_H__
+#define __LASSO_LIB_IDP_ENTRY_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_LIB_IDP_ENTRY (lasso_lib_idp_entry_get_type())
+#define LASSO_LIB_IDP_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_IDP_ENTRY, LassoLibIDPEntry))
+#define LASSO_LIB_IDP_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_IDP_ENTRY, LassoLibIDPEntryClass))
+#define LASSO_IS_LIB_IDP_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_IDP_ENTRY))
+#define LASSO_IS_LIB_IDP_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_IDP_ENTRY))
+#define LASSO_LIB_IDP_ENTRY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_IDP_ENTRY, LassoLibIDPEntryClass))
+
+typedef struct _LassoLibIDPEntry LassoLibIDPEntry;
+typedef struct _LassoLibIDPEntryClass LassoLibIDPEntryClass;
+
+struct _LassoLibIDPEntry{
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoLibIDPEntryClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_idp_entry_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_idp_entry_new(void);
+
+LASSO_EXPORT void lasso_lib_idp_entry_set_providerID (LassoLibIDPEntry *node,
+ const xmlChar *providerID);
+
+LASSO_EXPORT void lasso_lib_idp_entry_set_providerName (LassoLibIDPEntry *node,
+ const xmlChar *providerName);
+
+LASSO_EXPORT void lasso_lib_idp_entry_set_loc (LassoLibIDPEntry *node,
+ const xmlChar *loc);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_IDP_ENTRY_H__ */
diff --git a/lasso/xml/lib_idp_list.c b/lasso/xml/lib_idp_list.c
new file mode 100644
index 00000000..2a37fd5f
--- /dev/null
+++ b/lasso/xml/lib_idp_list.c
@@ -0,0 +1,142 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_idp_list.h>
+
+/*
+Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="IDPList" type="IDPListType"/>
+<xs:complexType name="IDPListType">
+ <xs:sequence>
+ <xs:element ref="IDPEntries"/>
+ <xs:element ref="GetComplete" minOccurs="0"/>
+ </xs:sequence>
+</xs:complexType>
+
+<xs:element name="GetComplete" type="xs:anyURI"/>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+/**
+ * lasso_lib_idp_list_set_getComplete:
+ * @node: the pointer to <lib:IDPList/> node object
+ * @getComplete: the value of "GetComplete" element.
+ *
+ * Sets the "GetComplete" element [optional].
+ *
+ * If the identity provider list is not complete, this element may be included
+ * with a URI that points to where the complete list can be retrieved.
+ **/
+void
+lasso_lib_idp_list_set_getComplete(LassoLibIDPList *node,
+ const xmlChar *getComplete)
+{
+ g_assert(LASSO_IS_LIB_IDP_LIST(node));
+ g_assert(getComplete != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "GetComplete", getComplete, FALSE);
+}
+
+/**
+ * lasso_lib_idp_list_set_idpEntries:
+ * @node: the pointer to <lib:IDPList/> node object
+ * @idpEntries: the pointer to <lib:IDPEntries/> node object
+ *
+ * Set the "IDPEntries" element [required].
+ *
+ * It contains a list of identity provider entries.
+ **/
+void
+lasso_lib_idp_list_set_idpEntries(LassoLibIDPList *node,
+ LassoLibIDPEntries *idpEntries)
+{
+ g_assert(LASSO_IS_LIB_IDP_LIST(node));
+ g_assert(LASSO_IS_LIB_IDP_ENTRIES(idpEntries));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(idpEntries), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_idp_list_instance_init(LassoLibIDPList *instance)
+{
+ LassoNode *node = (LassoNode *)instance;
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "IDPList");
+}
+
+static void
+lasso_lib_idp_list_class_init(LassoLibIDPListClass *klass)
+{
+}
+
+GType lasso_lib_idp_list_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibIDPListClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_idp_list_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibIDPList),
+ 0,
+ (GInstanceInitFunc) lasso_lib_idp_list_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoLibIDPList",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_lib_idp_list_new:
+ *
+ * Creates a new <lib:IDPList/> node object.
+ *
+ * In the request envelope, some profiles may wish to allow the service
+ * provider to transport a list of identity providers to the user agent. This
+ * specification provides a schema that profiles SHOULD use for this purpose.
+ *
+ * Return value: the new @LassoLibIDPList
+ **/
+LassoNode* lasso_lib_idp_list_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_IDP_LIST, NULL));
+}
diff --git a/lasso/xml/lib_idp_list.h b/lasso/xml/lib_idp_list.h
new file mode 100644
index 00000000..4c13ffa1
--- /dev/null
+++ b/lasso/xml/lib_idp_list.h
@@ -0,0 +1,67 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_IDP_LIST_H__
+#define __LASSO_LIB_IDP_LIST_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+#include <lasso/xml/lib_idp_entries.h>
+
+#define LASSO_TYPE_LIB_IDP_LIST (lasso_lib_idp_list_get_type())
+#define LASSO_LIB_IDP_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_IDP_LIST, LassoLibIDPList))
+#define LASSO_LIB_IDP_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_IDP_LIST, LassoLibIDPListClass))
+#define LASSO_IS_LIB_IDP_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_IDP_LIST))
+#define LASSO_IS_LIB_IDP_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_IDP_LIST))
+#define LASSO_LIB_IDP_LIST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_IDP_LIST, LassoLibIDPListClass))
+
+typedef struct _LassoLibIDPList LassoLibIDPList;
+typedef struct _LassoLibIDPListClass LassoLibIDPListClass;
+
+struct _LassoLibIDPList {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoLibIDPListClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_idp_list_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_idp_list_new(void);
+
+LASSO_EXPORT void lasso_lib_idp_list_set_getComplete (LassoLibIDPList *node,
+ const xmlChar *getComplete);
+
+LASSO_EXPORT void lasso_lib_idp_list_set_idpEntries (LassoLibIDPList *node,
+ LassoLibIDPEntries *idpEntries);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_IDP_LIST_H__ */
diff --git a/lasso/xml/lib_idp_provided_name_identifier.c b/lasso/xml/lib_idp_provided_name_identifier.c
new file mode 100644
index 00000000..224e85f7
--- /dev/null
+++ b/lasso/xml/lib_idp_provided_name_identifier.c
@@ -0,0 +1,78 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_idp_provided_name_identifier.h>
+
+/*
+
+<xs:element name="IDPProvidedNameIdentifier" type="saml:NameIdentifierType"/>
+
+*/
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_idp_provided_name_identifier_instance_init(LassoLibIDPProvidedNameIdentifier *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "IDPProvidedNameIdentifier");
+}
+
+static void
+lasso_lib_idp_provided_name_identifier_class_init(LassoLibIDPProvidedNameIdentifierClass *klass)
+{
+}
+
+GType lasso_lib_idp_provided_name_identifier_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibIDPProvidedNameIdentifierClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_idp_provided_name_identifier_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibIDPProvidedNameIdentifierClass),
+ 0,
+ (GInstanceInitFunc) lasso_lib_idp_provided_name_identifier_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAML_NAME_IDENTIFIER,
+ "LassoLibIDPProvidedNameIdentifier",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_lib_idp_provided_name_identifier_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_IDP_PROVIDED_NAME_IDENTIFIER,
+ NULL));
+}
diff --git a/lasso/xml/lib_idp_provided_name_identifier.h b/lasso/xml/lib_idp_provided_name_identifier.h
new file mode 100644
index 00000000..b91e042c
--- /dev/null
+++ b/lasso/xml/lib_idp_provided_name_identifier.h
@@ -0,0 +1,60 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER_H__
+#define __LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/saml_name_identifier.h>
+
+#define LASSO_TYPE_LIB_IDP_PROVIDED_NAME_IDENTIFIER (lasso_lib_idp_provided_name_identifier_get_type())
+#define LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_IDP_PROVIDED_NAME_IDENTIFIER, LassoLibIDPProvidedNameIdentifier))
+#define LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_IDP_PROVIDED_NAME_IDENTIFIER, LassoLibIDPProvidedNameIdentifierClass))
+#define LASSO_IS_LIB_IDP_PROVIDED_NAME_IDENTIFIER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_IDP_PROVIDED_NAME_IDENTIFIER))
+#define LASSO_IS_LIB_IDP_PROVIDED_NAME_IDENTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_IDP_PROVIDED_NAME_IDENTIFIER))
+#define LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_IDP_PROVIDED_NAME_IDENTIFIER, LassoLibIDPProvidedNameIdentifierClass))
+
+typedef struct _LassoLibIDPProvidedNameIdentifier LassoLibIDPProvidedNameIdentifier;
+typedef struct _LassoLibIDPProvidedNameIdentifierClass LassoLibIDPProvidedNameIdentifierClass;
+
+struct _LassoLibIDPProvidedNameIdentifier {
+ LassoSamlNameIdentifier parent;
+ /*< private >*/
+};
+
+struct _LassoLibIDPProvidedNameIdentifierClass {
+ LassoSamlNameIdentifierClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_idp_provided_name_identifier_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_idp_provided_name_identifier_new(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER_H__ */
diff --git a/lasso/xml/lib_logout_request.c b/lasso/xml/lib_logout_request.c
new file mode 100644
index 00000000..3325960e
--- /dev/null
+++ b/lasso/xml/lib_logout_request.c
@@ -0,0 +1,158 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_logout_request.h>
+
+/*
+The Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="LogoutRequest" type="LogoutRequestType"/>
+<xs:complexType name="LogoutRequestType">
+ <xs:complexContent>
+ <xs:extension base="samlp:RequestAbstractType">
+ <xs:sequence>
+ <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="ProviderID"/>
+ <xs:element ref="saml:NameIdentifier"/>
+ <xs:element name="SessionIndex" type="xs:string" minOccurs="0"/>
+ <xs:element ref="RelayState" minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute ref="consent" use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+
+<xs:element name="ProviderID" type="md:entityIDType"/>
+<xs:element name="RelayState" type="xs:string"/>
+
+From liberty-metadata-v1.0.xsd:
+<xs:simpleType name="entityIDType">
+ <xs:restriction base="xs:anyURI">
+ <xs:maxLength value="1024" id="maxlengthid"/>
+ </xs:restriction>
+</xs:simpleType>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+void
+lasso_lib_logout_request_set_consent(LassoLibLogoutRequest *node,
+ const xmlChar *consent)
+{
+ g_assert(LASSO_IS_LIB_LOGOUT_REQUEST(node));
+ g_assert(consent != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "consent", consent);
+}
+
+void
+lasso_lib_logout_request_set_providerID(LassoLibLogoutRequest *node,
+ const xmlChar *providerID)
+{
+ g_assert(LASSO_IS_LIB_LOGOUT_REQUEST(node));
+ g_assert(providerID != NULL);
+ // FIXME : providerID lenght SHOULD be <= 1024
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProviderID", providerID, FALSE);
+}
+
+void
+lasso_lib_logout_request_set_relayState(LassoLibLogoutRequest *node,
+ const xmlChar *relayState) {
+ g_assert(LASSO_IS_LIB_LOGOUT_REQUEST(node));
+ g_assert(relayState != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "RelayState", relayState, FALSE);
+}
+
+void
+lasso_lib_logout_request_set_sessionIndex(LassoLibLogoutRequest *node,
+ const xmlChar *sessionIndex) {
+ g_assert(LASSO_IS_LIB_LOGOUT_REQUEST(node));
+ g_assert(sessionIndex != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "SessionIndex", sessionIndex, FALSE);
+}
+
+void
+lasso_lib_logout_request_set_nameIdentifier(LassoLibLogoutRequest *node,
+ LassoSamlNameIdentifier *nameIdentifier) {
+ g_assert(LASSO_IS_LIB_LOGOUT_REQUEST(node));
+ g_assert(LASSO_IS_SAML_NAME_IDENTIFIER(nameIdentifier));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE (nameIdentifier), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_logout_request_instance_init(LassoLibLogoutRequest *logoutRequest)
+{
+ LassoNodeClass *object_class = LASSO_NODE_GET_CLASS(logoutRequest);
+
+ object_class->new_ns(LASSO_NODE(logoutRequest), "urn:liberty:iff:2003-08", "lib");
+ object_class->set_name(LASSO_NODE(logoutRequest), "LogoutRequest");
+}
+
+static void
+lasso_lib_logout_request_class_init(LassoLibLogoutRequestClass *klass)
+{
+}
+
+GType lasso_lib_logout_request_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibLogoutRequestClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_logout_request_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibLogoutRequest),
+ 0,
+ (GInstanceInitFunc) lasso_lib_logout_request_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT,
+ "LassoLibLogoutRequest",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_lib_logout_request_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_LOGOUT_REQUEST,
+ NULL));
+}
diff --git a/lasso/xml/lib_logout_request.h b/lasso/xml/lib_logout_request.h
new file mode 100644
index 00000000..f73b55d2
--- /dev/null
+++ b/lasso/xml/lib_logout_request.h
@@ -0,0 +1,76 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_LOGOUT_REQUEST_H__
+#define __LASSO_LIB_LOGOUT_REQUEST_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/saml_name_identifier.h>
+#include <lasso/xml/samlp_request_abstract.h>
+
+#define LASSO_TYPE_LIB_LOGOUT_REQUEST (lasso_lib_logout_request_get_type())
+#define LASSO_LIB_LOGOUT_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_LOGOUT_REQUEST, LassoLibLogoutRequest))
+#define LASSO_LIB_LOGOUT_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_LOGOUT_REQUEST, LassoLibLogoutRequestClass))
+#define LASSO_IS_LIB_LOGOUT_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_LOGOUT_REQUEST))
+#define LASSO_IS_LIB_LOGOUT_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_LOGOUT_REQUEST))
+#define LASSO_LIB_LOGOUT_REQUEST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_LOGOUT_REQUEST, LassoLibLogoutRequestClass))
+
+typedef struct _LassoLibLogoutRequest LassoLibLogoutRequest;
+typedef struct _LassoLibLogoutRequestClass LassoLibLogoutRequestClass;
+
+struct _LassoLibLogoutRequest {
+ LassoSamlpRequestAbstract parent;
+ /*< private >*/
+};
+
+struct _LassoLibLogoutRequestClass {
+ LassoSamlpRequestAbstractClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_logout_request_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_logout_request_new(void);
+
+LASSO_EXPORT void lasso_lib_logout_request_set_consent (LassoLibLogoutRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_logout_request_set_providerId (LassoLibLogoutRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_logout_request_set_relayState (LassoLibLogoutRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_logout_request_set_sessionIndex (LassoLibLogoutRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_logout_request_set_nameIdentifier (LassoLibLogoutRequest *,
+ LassoSamlNameIdentifier *);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_LOGOUT_REQUEST_H__ */
diff --git a/lasso/xml/lib_logout_response.c b/lasso/xml/lib_logout_response.c
new file mode 100644
index 00000000..daa51923
--- /dev/null
+++ b/lasso/xml/lib_logout_response.c
@@ -0,0 +1,79 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_logout_response.h>
+
+/*
+The Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="LogoutResponse" type="StatusResponseType"/>
+
+*/
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_logout_response_instance_init(LassoLibLogoutResponse *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "LogoutResponse");
+}
+
+static void
+lasso_lib_logout_response_class_init(LassoLibLogoutResponseClass *klass)
+{
+}
+
+GType lasso_lib_logout_response_get_type() {
+ static GType logout_response_type = 0;
+
+ if (!logout_response_type) {
+ static const GTypeInfo logout_response_info = {
+ sizeof (LassoLibLogoutResponseClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_logout_response_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibLogoutResponse),
+ 0,
+ (GInstanceInitFunc) lasso_lib_logout_response_instance_init,
+ };
+
+ logout_response_type = g_type_register_static(LASSO_TYPE_LIB_STATUS_RESPONSE,
+ "LassoLibLogoutResponse",
+ &logout_response_info, 0);
+ }
+ return logout_response_type;
+}
+
+LassoNode* lasso_lib_logout_response_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_LOGOUT_RESPONSE, NULL));
+}
diff --git a/lasso/xml/lib_logout_response.h b/lasso/xml/lib_logout_response.h
new file mode 100644
index 00000000..c8c8159e
--- /dev/null
+++ b/lasso/xml/lib_logout_response.h
@@ -0,0 +1,60 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_LOGOUT_RESPONSE_H__
+#define __LASSO_LIB_LOGOUT_RESPONSE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/lib_status_response.h>
+
+#define LASSO_TYPE_LIB_LOGOUT_RESPONSE (lasso_lib_logout_response_get_type())
+#define LASSO_LIB_LOGOUT_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_LOGOUT_RESPONSE, LassoLibLogoutResponse))
+#define LASSO_LIB_LOGOUT_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_LOGOUT_RESPONSE, LassoLibLogoutResponseClass))
+#define LASSO_IS_LIB_LOGOUT_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_LOGOUT_RESPONSE))
+#define LASSO_IS_LIB_LOGOUT_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_LOGOUT_RESPONSE))
+#define LASSO_LIB_LOGOUT_RESPONSE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_LOGOUT_RESPONSE, LassoLibLogoutResponseClass))
+
+typedef struct _LassoLibLogoutResponse LassoLibLogoutResponse;
+typedef struct _LassoLibLogoutResponseClass LassoLibLogoutResponseClass;
+
+struct _LassoLibLogoutResponse {
+ LassoLibStatusResponse parent;
+ /*< private >*/
+};
+
+struct _LassoLibLogoutResponseClass {
+ LassoLibStatusResponseClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_logout_response_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_logout_response_new(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_LOGOUT_RESPONSE_H__ */
diff --git a/lasso/xml/lib_name_identifier_mapping_request.c b/lasso/xml/lib_name_identifier_mapping_request.c
new file mode 100644
index 00000000..39004228
--- /dev/null
+++ b/lasso/xml/lib_name_identifier_mapping_request.c
@@ -0,0 +1,136 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_name_identifier_mapping_request.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-protocol-1.0.xsd):
+
+<xs:element name="NameIdentifierMappingRequest" type="NameIdentifierMappingRequestType"/>
+<xs:complexType name="NameIdentifierMappingRequestType">
+ <xs:complexContent>
+ <xs:extension base="samlp:RequestAbstractType">
+ <xs:sequence>
+ <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="ProviderID"/>
+ <xs:element ref="saml:NameIdentifier"/>
+ <xs:element name="TargetNamespace" type="md:entityIDType"/>
+ </xs:sequence>
+ <xs:attribute ref="consent" use="optional"/>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+
+<xs:element name="ProviderID" type="md:entityIDType"/>
+
+From liberty-metadata-v1.0.xsd:
+<xs:simpleType name="entityIDType">
+ <xs:restriction base="xs:anyURI">
+ <xs:maxLength value="1024" id="maxlengthid"/>
+ </xs:restriction>
+</xs:simpleType>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+void
+lasso_lib_name_identifier_mapping_request_set_consent(LassoLibNameIdentifierMappingRequest *node,
+ const xmlChar *consent)
+{
+ g_assert(LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(node));
+ g_assert(consent != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "consent", consent);
+}
+
+void
+lasso_lib_name_identifier_mapping_request_set_providerID(LassoLibNameIdentifierMappingRequest *node,
+ const xmlChar *providerID)
+{
+ g_assert(LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(node));
+ g_assert(providerID != NULL);
+ // FIXME : providerId lenght SHOULD be <= 1024
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProviderID", providerID, FALSE);
+}
+
+void
+lasso_lib_name_identifier_mapping_request_set_nameIdentifier(LassoLibNameIdentifierMappingRequest *node,
+ LassoSamlNameIdentifier *nameIdentifier) {
+ g_assert(LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(node));
+ g_assert(LASSO_IS_SAML_NAME_IDENTIFIER(nameIdentifier));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE (nameIdentifier), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_name_identifier_mapping_request_instance_init(LassoLibNameIdentifierMappingRequest *nameIdentifierMappingRequest)
+{
+ LassoNodeClass *object_class = LASSO_NODE_GET_CLASS(nameIdentifierMappingRequest);
+
+ object_class->new_ns(LASSO_NODE(nameIdentifierMappingRequest), "urn:liberty:iff:2003-08", "lib");
+ object_class->set_name(LASSO_NODE(nameIdentifierMappingRequest), "NameIdentifierMappingRequest");
+}
+
+static void
+lasso_lib_name_identifier_mapping_request_class_init(LassoLibNameIdentifierMappingRequestClass *klass)
+{
+}
+
+GType lasso_lib_name_identifier_mapping_request_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibNameIdentifierMappingRequestClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_name_identifier_mapping_request_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibNameIdentifierMappingRequest),
+ 0,
+ (GInstanceInitFunc) lasso_lib_name_identifier_mapping_request_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT,
+ "LassoLibNameIdentifierMappingRequest",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_lib_name_identifier_mapping_request_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST,
+ NULL));
+}
diff --git a/lasso/xml/lib_name_identifier_mapping_request.h b/lasso/xml/lib_name_identifier_mapping_request.h
new file mode 100644
index 00000000..43fa2905
--- /dev/null
+++ b/lasso/xml/lib_name_identifier_mapping_request.h
@@ -0,0 +1,70 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_H__
+#define __LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/saml_name_identifier.h>
+#include <lasso/xml/samlp_request_abstract.h>
+
+#define LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST (lasso_lib_name_identifier_mapping_request_get_type())
+#define LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST, LassoLibNameIdentifierMappingRequest))
+#define LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST, LassoLibNameIdentifierMappingRequestClass))
+#define LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST))
+#define LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST))
+#define LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_REQUEST, LassoLibNameIdentifierMappingRequestClass))
+
+typedef struct _LassoLibNameIdentifierMappingRequest LassoLibNameIdentifierMappingRequest;
+typedef struct _LassoLibNameIdentifierMappingRequestClass LassoLibNameIdentifierMappingRequestClass;
+
+struct _LassoLibNameIdentifierMappingRequest {
+ LassoSamlpRequestAbstract parent;
+ /*< private >*/
+};
+
+struct _LassoLibNameIdentifierMappingRequestClass {
+ LassoSamlpRequestAbstractClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_name_identifier_mapping_request_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_name_identifier_mapping_request_new(void);
+
+LASSO_EXPORT void lasso_lib_name_identifier_mapping_request_set_consent (LassoLibNameIdentifierMappingRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_name_identifier_mapping_request_set_providerID (LassoLibNameIdentifierMappingRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_name_identifier_mapping_request_set_nameIdentifier (LassoLibNameIdentifierMappingRequest *,
+ LassoSamlNameIdentifier *);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_NAME_IDENTIFIER_MAPPING_REQUEST_H__ */
diff --git a/lasso/xml/lib_name_identifier_mapping_response.c b/lasso/xml/lib_name_identifier_mapping_response.c
new file mode 100644
index 00000000..990fbecd
--- /dev/null
+++ b/lasso/xml/lib_name_identifier_mapping_response.c
@@ -0,0 +1,129 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_name_identifier_mapping_response.h>
+
+/*
+The Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="NameIdentifierMappingResponse" type="NameIdentifierMappingResponseType"/>
+<xs:complexType name="NameIdentifierMappingResponseType">
+ <xs:complexContent>
+ <xs:extension base="samlp:ResponseAbstractType">
+ <xs:sequence>
+ <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="ProviderID"/>
+ <xs:element ref="samlp:Status"/>
+ <xs:element ref="saml:NameIdentifier" minOccurs="0"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void lasso_lib_name_identifier_mapping_response_set_nameIdentifier(LassoLibNameIdentifierMappingResponse *node,
+ LassoSamlNameIdentifier *nameIdentifier)
+{
+ g_assert(LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE(node));
+ g_assert(LASSO_IS_SAML_NAME_IDENTIFIER(nameIdentifier));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node),
+ LASSO_NODE (nameIdentifier),
+ FALSE);
+}
+
+void
+lasso_lib_name_identifier_mapping_response_set_providerID(LassoLibNameIdentifierMappingResponse *node,
+ const xmlChar *providerID)
+{
+ g_assert(LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE(node));
+ g_assert(providerID != NULL);
+ // FIXME : providerID lenght SHOULD be <= 1024
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProviderID", providerID, FALSE);
+}
+
+void lasso_lib_name_identifier_mapping_response_set_status(LassoLibNameIdentifierMappingResponse *node,
+ LassoSamlpStatus *status)
+{
+ g_assert(LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE(node));
+ g_assert(LASSO_IS_SAMLP_STATUS(status));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(status), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_name_identifier_mapping_response_instance_init(LassoLibNameIdentifierMappingResponse *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "NameIdentifierMappingResponse");
+}
+
+static void
+lasso_lib_name_identifier_mapping_response_class_init(LassoLibNameIdentifierMappingResponseClass *klass)
+{
+}
+
+GType lasso_lib_name_identifier_mapping_response_get_type() {
+ static GType name_identifier_mapping_response_type = 0;
+
+ if (!name_identifier_mapping_response_type) {
+ static const GTypeInfo name_identifier_mapping_response_info = {
+ sizeof (LassoLibNameIdentifierMappingResponseClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_name_identifier_mapping_response_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibNameIdentifierMappingResponse),
+ 0,
+ (GInstanceInitFunc) lasso_lib_name_identifier_mapping_response_instance_init,
+ };
+
+ name_identifier_mapping_response_type = g_type_register_static(LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT,
+ "LassoLibNameIdentifierMappingResponse",
+ &name_identifier_mapping_response_info, 0);
+ }
+ return name_identifier_mapping_response_type;
+}
+
+LassoNode* lasso_lib_name_identifier_mapping_response_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE, NULL));
+}
diff --git a/lasso/xml/lib_name_identifier_mapping_response.h b/lasso/xml/lib_name_identifier_mapping_response.h
new file mode 100644
index 00000000..f366da8c
--- /dev/null
+++ b/lasso/xml/lib_name_identifier_mapping_response.h
@@ -0,0 +1,71 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_H__
+#define __LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/samlp_response_abstract.h>
+#include <lasso/xml/saml_name_identifier.h>
+#include <lasso/xml/samlp_status.h>
+
+#define LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE (lasso_lib_name_identifier_mapping_response_get_type())
+#define LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE, LassoLibNameIdentifierMappingResponse))
+#define LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE, LassoLibNameIdentifierMappingResponseClass))
+#define LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE))
+#define LASSO_IS_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE))
+#define LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE, LassoLibNameIdentifierMappingResponseClass))
+
+typedef struct _LassoLibNameIdentifierMappingResponse LassoLibNameIdentifierMappingResponse;
+typedef struct _LassoLibNameIdentifierMappingResponseClass LassoLibNameIdentifierMappingResponseClass;
+
+struct _LassoLibNameIdentifierMappingResponse {
+ LassoSamlpResponseAbstract parent;
+ /*< private >*/
+};
+
+struct _LassoLibNameIdentifierMappingResponseClass {
+ LassoSamlpResponseAbstractClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_name_identifier_mapping_response_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_name_identifier_mapping_response_new(void);
+
+LASSO_EXPORT void lasso_lib_name_identifier_mapping_response_set_nameIdentifier (LassoLibNameIdentifierMappingResponse *node,
+ LassoSamlNameIdentifier *nameIdentifier);
+
+LASSO_EXPORT void lasso_lib_name_identifier_mapping_response_set_providerID (LassoLibNameIdentifierMappingResponse *node,
+ const xmlChar *providerID);
+
+LASSO_EXPORT void lasso_lib_name_identifier_mapping_response_set_status (LassoLibNameIdentifierMappingResponse *node,
+ LassoSamlpStatus *status);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_NAME_IDENTIFIER_MAPPING_RESPONSE_H__ */
diff --git a/lasso/xml/lib_old_provided_name_identifier.c b/lasso/xml/lib_old_provided_name_identifier.c
new file mode 100644
index 00000000..06b048f4
--- /dev/null
+++ b/lasso/xml/lib_old_provided_name_identifier.c
@@ -0,0 +1,79 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_old_provided_name_identifier.h>
+
+/*
+The Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="OldProvidedNameIdentifier" type="saml:NameIdentifierType"/>
+
+*/
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_old_provided_name_identifier_instance_init(LassoLibOLDProvidedNameIdentifier *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "OldProvidedNameIdentifier");
+}
+
+static void
+lasso_lib_old_provided_name_identifier_class_init(LassoLibOLDProvidedNameIdentifierClass *klass)
+{
+}
+
+GType lasso_lib_old_provided_name_identifier_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibOLDProvidedNameIdentifierClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_old_provided_name_identifier_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibOLDProvidedNameIdentifierClass),
+ 0,
+ (GInstanceInitFunc) lasso_lib_old_provided_name_identifier_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAML_NAME_IDENTIFIER,
+ "LassoLibOLDProvidedNameIdentifier",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_lib_old_provided_name_identifier_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_OLD_PROVIDED_NAME_IDENTIFIER,
+ NULL));
+}
diff --git a/lasso/xml/lib_old_provided_name_identifier.h b/lasso/xml/lib_old_provided_name_identifier.h
new file mode 100644
index 00000000..71a0a6c4
--- /dev/null
+++ b/lasso/xml/lib_old_provided_name_identifier.h
@@ -0,0 +1,60 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_OLD_PROVIDED_NAME_IDENTIFIER_H__
+#define __LASSO_LIB_OLD_PROVIDED_NAME_IDENTIFIER_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/saml_name_identifier.h>
+
+#define LASSO_TYPE_LIB_OLD_PROVIDED_NAME_IDENTIFIER (lasso_lib_old_provided_name_identifier_get_type())
+#define LASSO_LIB_OLD_PROVIDED_NAME_IDENTIFIER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_OLD_PROVIDED_NAME_IDENTIFIER, LassoLibOLDProvidedNameIdentifier))
+#define LASSO_LIB_OLD_PROVIDED_NAME_IDENTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_OLD_PROVIDED_NAME_IDENTIFIER, LassoLibOLDProvidedNameIdentifierClass))
+#define LASSO_IS_LIB_OLD_PROVIDED_NAME_IDENTIFIER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_OLD_PROVIDED_NAME_IDENTIFIER))
+#define LASSO_IS_LIB_OLD_PROVIDED_NAME_IDENTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_OLD_PROVIDED_NAME_IDENTIFIER))
+#define LASSO_LIB_OLD_PROVIDED_NAME_IDENTIFIER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_OLD_PROVIDED_NAME_IDENTIFIER, LassoLibOLDProvidedNameIdentifierClass))
+
+typedef struct _LassoLibOLDProvidedNameIdentifier LassoLibOLDProvidedNameIdentifier;
+typedef struct _LassoLibOLDProvidedNameIdentifierClass LassoLibOLDProvidedNameIdentifierClass;
+
+struct _LassoLibOLDProvidedNameIdentifier {
+ LassoSamlNameIdentifier parent;
+ /*< private >*/
+};
+
+struct _LassoLibOLDProvidedNameIdentifierClass {
+ LassoSamlNameIdentifierClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_old_provided_name_identifier_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_old_provided_name_identifier_new(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_OLD_PROVIDED_NAME_IDENTIFIER_H__ */
diff --git a/lasso/xml/lib_register_name_identifier_request.c b/lasso/xml/lib_register_name_identifier_request.c
new file mode 100644
index 00000000..941c0ba6
--- /dev/null
+++ b/lasso/xml/lib_register_name_identifier_request.c
@@ -0,0 +1,199 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_register_name_identifier_request.h>
+
+/*
+The Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="RegisterNameIdentifierRequest" type="RegisterNameIdentifierRequestType"/>
+<xs:complexType name="RegisterNameIdentifierRequestType">
+ <xs:complexContent>
+ <xs:extension base="samlp:RequestAbstractType">
+ <xs:sequence>
+ <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="ProviderID"/>
+ <xs:element ref="IDPProvidedNameIdentifier"/>
+ <xs:element ref="SPProvidedNameIdentifier"/>
+ <xs:element ref="OldProvidedNameIdentifier"/>
+ <xs:element ref="RelayState" minOccurs="0"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+<xs:element name="IDPProvidedNameIdentifier" type="saml:NameIdentifierType"/>
+<xs:element name="SPProvidedNameIdentifier" type="saml:NameIdentifierType"/>
+<xs:element name="OldProvidedNameIdentifier" type="saml:NameIdentifierType"/>
+
+<xs:element name="ProviderID" type="md:entityIDType"/>
+<xs:element name="RelayState" type="xs:string"/>
+
+From liberty-metadata-v1.0.xsd:
+<xs:simpleType name="entityIDType">
+ <xs:restriction base="xs:anyURI">
+ <xs:maxLength value="1024" id="maxlengthid"/>
+ </xs:restriction>
+</xs:simpleType>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_lib_register_name_identifier_request_set_idp_provided_name_identifier(LassoLibRegisterNameIdentifierRequest *node,
+ LassoLibIDPProvidedNameIdentifier *idpProvidedNameIdentifier) {
+ g_assert(LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(node));
+ g_assert(LASSO_IS_LIB_IDP_PROVIDED_NAME_IDENTIFIER(idpProvidedNameIdentifier));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node),
+ LASSO_NODE (idpProvidedNameIdentifier),
+ FALSE);
+}
+
+void
+lasso_lib_register_name_identifier_request_set_old_provided_name_identifier(LassoLibRegisterNameIdentifierRequest *node,
+ LassoLibOLDProvidedNameIdentifier *oldProvidedNameIdentifier) {
+ g_assert(LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(node));
+ g_assert(LASSO_IS_LIB_OLD_PROVIDED_NAME_IDENTIFIER(oldProvidedNameIdentifier));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node),
+ LASSO_NODE (oldProvidedNameIdentifier),
+ FALSE);
+}
+
+void
+lasso_lib_register_name_identifier_request_update_nameIdentifiers(LassoLibRegisterNameIdentifierRequest *node)
+{
+ xmlNodePtr identifier;
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ // IDPProvidedNameIdentifier
+ lasso_node_rename_prop(class->get_child(node, "IDPProvidedNameIdentifier"), "NameQualifier", "IDPNameQualifier");
+ lasso_node_rename_prop(class->get_child(node, "IDPProvidedNameIdentifier"), "Format", "IDPFormat");
+
+ // SPProvidedNameIdentifier
+ lasso_node_rename_prop(class->get_child(node, "SPProvidedNameIdentifier"), "NameQualifier", "SPNameQualifier");
+ lasso_node_rename_prop(class->get_child(node, "SPProvidedNameIdentifier"), "Format", "SPFormat");
+
+ // OldProvidedNameIdentifier
+ lasso_node_rename_prop(class->get_child(node, "OldProvidedNameIdentifier"), "NameQualifier", "OldNameQualifier");
+ lasso_node_rename_prop(class->get_child(node, "OldProvidedNameIdentifier"), "Format", "OldFormat");
+
+}
+
+void
+lasso_lib_register_name_identifier_request_restore_nameIdentidiers(LassoLibRegisterNameIdentifierRequest *node)
+{
+ xmlNodePtr identifier;
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ // IDPProvidedNameIdentifier
+ identifier = class->get_child(node, "IDPProvidedNameIdentifier");
+ lasso_node_rename_prop(identifier, "NameQualifier", "IDPNameQualifier");
+
+}
+
+void
+lasso_lib_register_name_identifier_request_set_providerID(LassoLibRegisterNameIdentifierRequest *node,
+ const xmlChar *providerID)
+{
+ g_assert(LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(node));
+ g_assert(providerID != NULL);
+ // FIXME : providerID lenght SHOULD be <= 1024
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProviderID", providerID, FALSE);
+}
+
+void
+lasso_lib_register_name_identifier_request_set_relayState(LassoLibRegisterNameIdentifierRequest *node,
+ const xmlChar *relayState) {
+ g_assert(LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(node));
+ g_assert(relayState != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "RelayState", relayState, FALSE);
+}
+
+void
+lasso_lib_register_name_identifier_request_set_sp_provided_name_identifier(LassoLibRegisterNameIdentifierRequest *node,
+ LassoLibSPProvidedNameIdentifier *spProvidedNameIdentifier) {
+ g_assert(LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(node));
+ g_assert(LASSO_IS_LIB_SP_PROVIDED_NAME_IDENTIFIER(spProvidedNameIdentifier));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node),
+ LASSO_NODE (spProvidedNameIdentifier),
+ FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_register_name_identifier_request_instance_init(LassoLibRegisterNameIdentifierRequest *registerNameIdentifierRequest)
+{
+ LassoNodeClass *object_class = LASSO_NODE_GET_CLASS(registerNameIdentifierRequest);
+
+ object_class->new_ns(LASSO_NODE(registerNameIdentifierRequest), "urn:liberty:iff:2003-08", "lib");
+ object_class->set_name(LASSO_NODE(registerNameIdentifierRequest), "RegisterNameIdentifierRequest");
+}
+
+static void
+lasso_lib_register_name_identifier_request_class_init(LassoLibRegisterNameIdentifierRequestClass *klass)
+{
+}
+
+GType lasso_lib_register_name_identifier_request_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibRegisterNameIdentifierRequestClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_register_name_identifier_request_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibRegisterNameIdentifierRequest),
+ 0,
+ (GInstanceInitFunc) lasso_lib_register_name_identifier_request_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT,
+ "LassoLibRegisterNameIdentifierRequest",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_lib_register_name_identifier_request_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST,
+ NULL));
+}
diff --git a/lasso/xml/lib_register_name_identifier_request.h b/lasso/xml/lib_register_name_identifier_request.h
new file mode 100644
index 00000000..1695aeff
--- /dev/null
+++ b/lasso/xml/lib_register_name_identifier_request.h
@@ -0,0 +1,81 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_H__
+#define __LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/samlp_request_abstract.h>
+#include <lasso/xml/lib_idp_provided_name_identifier.h>
+#include <lasso/xml/lib_old_provided_name_identifier.h>
+#include <lasso/xml/lib_sp_provided_name_identifier.h>
+
+#define LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST (lasso_lib_register_name_identifier_request_get_type())
+#define LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST, LassoLibRegisterNameIdentifierRequest))
+#define LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST, LassoLibRegisterNameIdentifierRequestClass))
+#define LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST))
+#define LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST))
+#define LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST, LassoLibRegisterNameIdentifierRequestClass))
+
+typedef struct _LassoLibRegisterNameIdentifierRequest LassoLibRegisterNameIdentifierRequest;
+typedef struct _LassoLibRegisterNameIdentifierRequestClass LassoLibRegisterNameIdentifierRequestClass;
+
+struct _LassoLibRegisterNameIdentifierRequest {
+ LassoSamlpRequestAbstract parent;
+ /*< private >*/
+};
+
+struct _LassoLibRegisterNameIdentifierRequestClass {
+ LassoSamlpRequestAbstractClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_register_name_identifier_request_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_register_name_identifier_request_new(void);
+
+LASSO_EXPORT void lasso_lib_register_name_identifier_request_set_relayState (LassoLibRegisterNameIdentifierRequest *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_lib_register_name_identifier_request_set_providerID (LassoLibRegisterNameIdentifierRequest *,
+ const xmlChar *);
+LASSO_EXPORT void lasso_lib_register_name_identifier_request_update_nameIdentifiers(LassoLibRegisterNameIdentifierRequest *);
+
+LASSO_EXPORT void lasso_lib_register_name_identifier_request_restore_nameIdentifiers(LassoLibRegisterNameIdentifierRequest *);
+
+LASSO_EXPORT void lasso_lib_register_name_identifier_request_set_idpProvidedNameIdentifier (LassoLibRegisterNameIdentifierRequest *,
+ LassoLibIDPProvidedNameIdentifier *);
+
+LASSO_EXPORT void lasso_lib_register_name_identifier_request_set_oldProvidedNameIdentifier (LassoLibRegisterNameIdentifierRequest *,
+ LassoLibOLDProvidedNameIdentifier *);
+
+LASSO_EXPORT void lasso_lib_register_name_identifier_request_set_spProvidedNameIdentifier (LassoLibRegisterNameIdentifierRequest *,
+ LassoLibSPProvidedNameIdentifier *);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST_H__ */
diff --git a/lasso/xml/lib_register_name_identifier_response.c b/lasso/xml/lib_register_name_identifier_response.c
new file mode 100644
index 00000000..7f241dd5
--- /dev/null
+++ b/lasso/xml/lib_register_name_identifier_response.c
@@ -0,0 +1,79 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_register_name_identifier_response.h>
+
+/*
+The Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="RegisterNameIdentifierResponse" type="StatusResponseType"/>
+
+*/
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_register_name_identifier_response_instance_init(LassoLibRegisterNameIdentifierResponse *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "RegisterNameIdentifierResponse");
+}
+
+static void
+lasso_lib_register_name_identifier_response_class_init(LassoLibRegisterNameIdentifierResponseClass *klass)
+{
+}
+
+GType lasso_lib_register_name_identifier_response_get_type() {
+ static GType register_name_identifier_response_type = 0;
+
+ if (!register_name_identifier_response_type) {
+ static const GTypeInfo register_name_identifier_response_info = {
+ sizeof (LassoLibRegisterNameIdentifierResponseClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_register_name_identifier_response_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibRegisterNameIdentifierResponse),
+ 0,
+ (GInstanceInitFunc) lasso_lib_register_name_identifier_response_instance_init,
+ };
+
+ register_name_identifier_response_type = g_type_register_static(LASSO_TYPE_LIB_STATUS_RESPONSE,
+ "LassoLibRegisterNameIdentifierResponse",
+ &register_name_identifier_response_info, 0);
+ }
+ return register_name_identifier_response_type;
+}
+
+LassoNode* lasso_lib_register_name_identifier_response_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE, NULL));
+}
diff --git a/lasso/xml/lib_register_name_identifier_response.h b/lasso/xml/lib_register_name_identifier_response.h
new file mode 100644
index 00000000..1d755b95
--- /dev/null
+++ b/lasso/xml/lib_register_name_identifier_response.h
@@ -0,0 +1,60 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_H__
+#define __LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/lib_status_response.h>
+
+#define LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE (lasso_lib_register_name_identifier_response_get_type())
+#define LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE, LassoLibRegisterNameIdentifierResponse))
+#define LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE, LassoLibRegisterNameIdentifierResponseClass))
+#define LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE))
+#define LASSO_IS_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE))
+#define LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE, LassoLibRegisterNameIdentifierResponseClass))
+
+typedef struct _LassoLibRegisterNameIdentifierResponse LassoLibRegisterNameIdentifierResponse;
+typedef struct _LassoLibRegisterNameIdentifierResponseClass LassoLibRegisterNameIdentifierResponseClass;
+
+struct _LassoLibRegisterNameIdentifierResponse {
+ LassoLibStatusResponse parent;
+ /*< private >*/
+};
+
+struct _LassoLibRegisterNameIdentifierResponseClass {
+ LassoLibStatusResponseClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_register_name_identifier_response_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_register_name_identifier_response_new(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_REGISTER_NAME_IDENTIFIER_RESPONSE_H__ */
diff --git a/lasso/xml/lib_request_authn_context.c b/lasso/xml/lib_request_authn_context.c
new file mode 100644
index 00000000..8f59353a
--- /dev/null
+++ b/lasso/xml/lib_request_authn_context.c
@@ -0,0 +1,127 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_request_authn_context.h>
+
+/*
+Information describing which authentication context the requester desires the
+identity provider to use in authenticating the Principal.
+
+Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="RequestAuthnContext">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:choice>
+ <xs:element name="AuthnContextClassRef" type="xs:anyURI" maxOccurs="unbounded"/>
+ <xs:element name="AuthnContextStatementRef" type="xs:anyURI" maxOccurs="unbounded"/>
+ </xs:choice>
+ <xs:element name="AuthnContextComparison" type="AuthnContextComparisonType" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+</xs:element>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_lib_request_authn_context_add_authnContextClassRef(LassoLibRequestAuthnContext *node,
+ const xmlChar *authnContextClassRef) {
+ g_assert(LASSO_IS_LIB_REQUEST_AUTHN_CONTEXT(node));
+ g_assert(authnContextClassRef != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "AuthnContextClassRef",
+ authnContextClassRef, TRUE);
+}
+
+void
+lasso_lib_request_authn_context_add_authnContextStatementRef(LassoLibRequestAuthnContext *node,
+ const xmlChar *authnContextStatementRef) {
+ g_assert(LASSO_IS_LIB_REQUEST_AUTHN_CONTEXT(node));
+ g_assert(authnContextStatementRef != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "AuthnContextStatementRef",
+ authnContextStatementRef, TRUE);
+}
+
+void
+lasso_lib_request_authn_context_set_authnContextComparison(LassoLibRequestAuthnContext *node,
+ const xmlChar *authnContextComparison) {
+ g_assert(LASSO_IS_LIB_REQUEST_AUTHN_CONTEXT(node));
+ g_assert(authnContextComparison != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "AuthnContextComparison",
+ authnContextComparison, FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_request_authn_context_instance_init(LassoLibRequestAuthnContext *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "RequestAuthnContext");
+}
+
+static void
+lasso_lib_request_authn_context_class_init(LassoLibRequestAuthnContextClass *klass)
+{
+}
+
+GType lasso_lib_request_authn_context_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibRequestAuthnContextClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_request_authn_context_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibRequestAuthnContext),
+ 0,
+ (GInstanceInitFunc) lasso_lib_request_authn_context_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoLibRequestAuthnContext",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_lib_request_authn_context_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT, NULL));
+}
diff --git a/lasso/xml/lib_request_authn_context.h b/lasso/xml/lib_request_authn_context.h
new file mode 100644
index 00000000..37be1ce4
--- /dev/null
+++ b/lasso/xml/lib_request_authn_context.h
@@ -0,0 +1,69 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_REQUEST_AUTHN_CONTEXT_H__
+#define __LASSO_LIB_REQUEST_AUTHN_CONTEXT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT (lasso_lib_request_authn_context_get_type())
+#define LASSO_LIB_REQUEST_AUTHN_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT, LassoLibRequestAuthnContext))
+#define LASSO_LIB_REQUEST_AUTHN_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT, LassoLibRequestAuthnContextClass))
+#define LASSO_IS_LIB_REQUEST_AUTHN_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT))
+#define LASSO_IS_LIB_REQUEST_AUTHN_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT))
+#define LASSO_LIB_REQUEST_AUTHN_CONTEXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_REQUEST_AUTHN_CONTEXT, LassoLibRequestAuthnContextClass))
+
+typedef struct _LassoLibRequestAuthnContext LassoLibRequestAuthnContext;
+typedef struct _LassoLibRequestAuthnContextClass LassoLibRequestAuthnContextClass;
+
+struct _LassoLibRequestAuthnContext {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoLibRequestAuthnContextClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_request_authn_context_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_request_authn_context_new(void);
+
+LASSO_EXPORT void lasso_lib_request_authn_context_add_authnContextClassRef (LassoLibRequestAuthnContext *node,
+ const xmlChar *authnContextClassRef);
+
+LASSO_EXPORT void lasso_lib_request_authn_context_add_authnContextStatementRef (LassoLibRequestAuthnContext *node,
+ const xmlChar *authnContextStatementRef);
+
+LASSO_EXPORT void lasso_lib_request_authn_context_set_authnContextComparison (LassoLibRequestAuthnContext *node,
+ const xmlChar *authnContextComparison);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_REQUEST_AUTHN_CONTEXT_H__ */
diff --git a/lasso/xml/lib_scoping.c b/lasso/xml/lib_scoping.c
new file mode 100644
index 00000000..a55e5db9
--- /dev/null
+++ b/lasso/xml/lib_scoping.c
@@ -0,0 +1,147 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_scoping.h>
+
+/*
+Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:complexType name="ScopingType">
+ <xs:sequence>
+ <xs:element name="ProxyCount" type="xs:nonNegativeInteger" minOccurs="0"/>
+ <xs:element ref="IDPList" minOccurs="0"/>
+ </xs:sequence>
+</xs:complexType>
+<xs:element name="Scoping" type="ScopingType"/>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+/**
+ * lasso_lib_scoping_set_proxyCount:
+ * @node : the pointer to <lib:Scoping/> node object
+ * @proxyCount: the value of "ProxyCount" element (should be superior or equal
+ * to 0).
+ *
+ * Sets the "ProxyCount" element [optional].
+ *
+ * It's the upper limit on the number of proxying steps the requester wishes to
+ * specify for the authentication request.
+ **/
+void
+lasso_lib_scoping_set_proxyCount(LassoLibScoping *node,
+ gint proxyCount)
+{
+ gchar str[6];
+
+ g_assert(LASSO_IS_LIB_SCOPING(node));
+ g_assert(proxyCount >= 0);
+
+ g_sprintf(str, "%d", proxyCount);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProxyCount", str, FALSE);
+}
+
+/**
+ * lasso_lib_scoping_set_idpList:
+ * @node : the pointer to <lib:Scoping/> node object
+ * @idpList: the value of "IDPList" element
+ *
+ * Sets the "IDPList" element [optional].
+ *
+ * It's an ordered list of identity providers which the requester prefers to
+ * use in authenticating the Principal. This list is a suggestion only, and may
+ * be ignored or added to by the recipient of the message.
+ **/
+void
+lasso_lib_scoping_set_idpList(LassoLibScoping *node,
+ LassoLibIDPList *idpList)
+{
+ g_assert(LASSO_IS_LIB_SCOPING(node));
+ g_assert(LASSO_IS_LIB_IDP_LIST(idpList));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(idpList), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_scoping_instance_init(LassoLibScoping *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "Scoping");
+}
+
+static void
+lasso_lib_scoping_class_init(LassoLibScopingClass *klass)
+{
+}
+
+GType lasso_lib_scoping_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibScopingClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_scoping_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibScoping),
+ 0,
+ (GInstanceInitFunc) lasso_lib_scoping_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoLibScoping",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_lib_scoping_new:
+ *
+ * Creates a new <lib:Scoping/> node object.
+ *
+ * Specifies any preferences on the number and specific identifiers of
+ * additional identity providers through which the authentication request may
+ * be proxied. The requester may also choose not to include this element, in
+ * which case, the recipient of the message MAY act as a proxy.
+ *
+ * Return value: a new @LassoLibScoping
+ **/
+LassoNode* lasso_lib_scoping_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_SCOPING, NULL));
+}
diff --git a/lasso/xml/lib_scoping.h b/lasso/xml/lib_scoping.h
new file mode 100644
index 00000000..6c81d4d2
--- /dev/null
+++ b/lasso/xml/lib_scoping.h
@@ -0,0 +1,67 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_SCOPING_H__
+#define __LASSO_LIB_SCOPING_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+#include <lasso/xml/lib_idp_list.h>
+
+#define LASSO_TYPE_LIB_SCOPING (lasso_lib_scoping_get_type())
+#define LASSO_LIB_SCOPING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_SCOPING, LassoLibScoping))
+#define LASSO_LIB_SCOPING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_SCOPING, LassoLibScopingClass))
+#define LASSO_IS_LIB_SCOPING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_SCOPING))
+#define LASSO_IS_LIB_SCOPING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_SCOPING))
+#define LASSO_LIB_SCOPING_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_SCOPING, LassoLibScopingClass))
+
+typedef struct _LassoLibScoping LassoLibScoping;
+typedef struct _LassoLibScopingClass LassoLibScopingClass;
+
+struct _LassoLibScoping {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoLibScopingClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_scoping_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_scoping_new(void);
+
+LASSO_EXPORT void lasso_lib_scoping_set_proxyCount (LassoLibScoping *node,
+ gint proxyCount);
+
+LASSO_EXPORT void lasso_lib_scoping_set_idpList (LassoLibScoping *node,
+ LassoLibIDPList *idpList);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_SCOPING_H__ */
diff --git a/lasso/xml/lib_sp_provided_name_identifier.c b/lasso/xml/lib_sp_provided_name_identifier.c
new file mode 100644
index 00000000..57bac17e
--- /dev/null
+++ b/lasso/xml/lib_sp_provided_name_identifier.c
@@ -0,0 +1,79 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_sp_provided_name_identifier.h>
+
+/*
+The Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:element name="SPProvidedNameIdentifier" type="saml:NameIdentifierType"/>
+
+*/
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_sp_provided_name_identifier_instance_init(LassoLibSPProvidedNameIdentifier *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "SPProvidedNameIdentifier");
+}
+
+static void
+lasso_lib_sp_provided_name_identifier_class_init(LassoLibSPProvidedNameIdentifierClass *klass)
+{
+}
+
+GType lasso_lib_sp_provided_name_identifier_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibSPProvidedNameIdentifierClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_sp_provided_name_identifier_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibSPProvidedNameIdentifierClass),
+ 0,
+ (GInstanceInitFunc) lasso_lib_sp_provided_name_identifier_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAML_NAME_IDENTIFIER,
+ "LassoLibSPProvidedNameIdentifier",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_lib_sp_provided_name_identifier_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_SP_PROVIDED_NAME_IDENTIFIER,
+ NULL));
+}
diff --git a/lasso/xml/lib_sp_provided_name_identifier.h b/lasso/xml/lib_sp_provided_name_identifier.h
new file mode 100644
index 00000000..1d735908
--- /dev/null
+++ b/lasso/xml/lib_sp_provided_name_identifier.h
@@ -0,0 +1,60 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_SP_PROVIDED_NAME_IDENTIFIER_H__
+#define __LASSO_LIB_SP_PROVIDED_NAME_IDENTIFIER_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/saml_name_identifier.h>
+
+#define LASSO_TYPE_LIB_SP_PROVIDED_NAME_IDENTIFIER (lasso_lib_sp_provided_name_identifier_get_type())
+#define LASSO_LIB_SP_PROVIDED_NAME_IDENTIFIER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_SP_PROVIDED_NAME_IDENTIFIER, LassoLibSPProvidedNameIdentifier))
+#define LASSO_LIB_SP_PROVIDED_NAME_IDENTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_SP_PROVIDED_NAME_IDENTIFIER, LassoLibSPProvidedNameIdentifierClass))
+#define LASSO_IS_LIB_SP_PROVIDED_NAME_IDENTIFIER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_SP_PROVIDED_NAME_IDENTIFIER))
+#define LASSO_IS_LIB_SP_PROVIDED_NAME_IDENTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_SP_PROVIDED_NAME_IDENTIFIER))
+#define LASSO_LIB_SP_PROVIDED_NAME_IDENTIFIER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_SP_PROVIDED_NAME_IDENTIFIER, LassoLibSPProvidedNameIdentifierClass))
+
+typedef struct _LassoLibSPProvidedNameIdentifier LassoLibSPProvidedNameIdentifier;
+typedef struct _LassoLibSPProvidedNameIdentifierClass LassoLibSPProvidedNameIdentifierClass;
+
+struct _LassoLibSPProvidedNameIdentifier {
+ LassoSamlNameIdentifier parent;
+ /*< private >*/
+};
+
+struct _LassoLibSPProvidedNameIdentifierClass {
+ LassoSamlNameIdentifierClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_sp_provided_name_identifier_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_sp_provided_name_identifier_new(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_SP_PROVIDED_NAME_IDENTIFIER_H__ */
diff --git a/lasso/xml/lib_status_response.c b/lasso/xml/lib_status_response.c
new file mode 100644
index 00000000..9f50789b
--- /dev/null
+++ b/lasso/xml/lib_status_response.c
@@ -0,0 +1,138 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_status_response.h>
+
+/*
+Schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:complexType name="StatusResponseType">
+ <xs:complexContent>
+ <xs:extension base="samlp:ResponseAbstractType">
+ <xs:sequence>
+ <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="ProviderID"/>
+ <xs:element ref="samlp:Status"/>
+ <xs:element ref="RelayState" minOccurs="0"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+
+<xs:element name="ProviderID" type="md:entityIDType"/>
+<xs:element name="RelayState" type="xs:string"/>
+
+From liberty-metadata-v1.0.xsd:
+<xs:simpleType name="entityIDType">
+ <xs:restriction base="xs:anyURI">
+ <xs:maxLength value="1024" id="maxlengthid"/>
+ </xs:restriction>
+</xs:simpleType>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_lib_status_response_set_providerID(LassoLibStatusResponse *node,
+ const xmlChar *providerID)
+{
+ g_assert(LASSO_IS_LIB_STATUS_RESPONSE(node));
+ g_assert(providerID != NULL);
+ // FIXME : providerID lenght SHOULD be <= 1024
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "ProviderID", providerID, FALSE);
+}
+
+void
+lasso_lib_status_response_set_relayState(LassoLibStatusResponse *node,
+ const xmlChar *relayState)
+{
+ g_assert(LASSO_IS_LIB_STATUS_RESPONSE(node));
+ g_assert(relayState != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "RelayState", relayState, FALSE);
+}
+
+void
+lasso_lib_status_response_set_status(LassoLibStatusResponse *node,
+ LassoSamlpStatus *status)
+{
+ g_assert(LASSO_IS_LIB_STATUS_RESPONSE(node));
+ g_assert(LASSO_IS_SAMLP_STATUS(status));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE (status), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_status_response_instance_init(LassoLibStatusResponse *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "StatusResponse");
+}
+
+static void
+lasso_lib_status_response_class_init(LassoLibStatusResponseClass *klass)
+{
+}
+
+GType lasso_lib_status_response_get_type() {
+ static GType status_response_type = 0;
+
+ if (!status_response_type) {
+ static const GTypeInfo status_response_info = {
+ sizeof (LassoLibStatusResponseClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_status_response_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibStatusResponse),
+ 0,
+ (GInstanceInitFunc) lasso_lib_status_response_instance_init,
+ };
+
+ status_response_type = g_type_register_static(LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT,
+ "LassoLibStatusResponse",
+ &status_response_info, 0);
+ }
+ return status_response_type;
+}
+
+LassoNode* lasso_lib_status_response_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_STATUS_RESPONSE, NULL));
+}
diff --git a/lasso/xml/lib_status_response.h b/lasso/xml/lib_status_response.h
new file mode 100644
index 00000000..309d2e10
--- /dev/null
+++ b/lasso/xml/lib_status_response.h
@@ -0,0 +1,70 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_STATUS_RESPONSE_H__
+#define __LASSO_LIB_STATUS_RESPONSE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/samlp_response_abstract.h>
+#include <lasso/xml/samlp_status.h>
+
+#define LASSO_TYPE_LIB_STATUS_RESPONSE (lasso_lib_status_response_get_type())
+#define LASSO_LIB_STATUS_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_STATUS_RESPONSE, LassoLibStatusResponse))
+#define LASSO_LIB_STATUS_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_STATUS_RESPONSE, LassoLibStatusResponseClass))
+#define LASSO_IS_LIB_STATUS_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_STATUS_RESPONSE))
+#define LASSO_IS_LIB_STATUS_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_STATUS_RESPONSE))
+#define LASSO_LIB_STATUS_RESPONSE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_STATUS_RESPONSE, LassoLibStatusResponseClass))
+
+typedef struct _LassoLibStatusResponse LassoLibStatusResponse;
+typedef struct _LassoLibStatusResponseClass LassoLibStatusResponseClass;
+
+struct _LassoLibStatusResponse {
+ LassoSamlpResponseAbstract parent;
+ /*< private >*/
+};
+
+struct _LassoLibStatusResponseClass {
+ LassoSamlpResponseAbstractClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_status_response_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_status_response_new(void);
+
+LASSO_EXPORT void lasso_lib_status_response_set_providerID (LassoLibStatusResponse *node,
+ const xmlChar *providerID);
+
+LASSO_EXPORT void lasso_lib_status_response_set_relayState (LassoLibStatusResponse *node,
+ const xmlChar *relayState);
+
+LASSO_EXPORT void lasso_lib_status_response_set_status (LassoLibStatusResponse *node,
+ LassoSamlpStatus *status);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_STATUS_RESPONSE_H__ */
diff --git a/lasso/xml/lib_subject.c b/lasso/xml/lib_subject.c
new file mode 100644
index 00000000..1c3a3446
--- /dev/null
+++ b/lasso/xml/lib_subject.c
@@ -0,0 +1,109 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/lib_subject.h>
+
+/*
+The schema fragment (liberty-idff-protocols-schema-v1.2.xsd):
+
+<xs:complexType name="SubjectType">
+ <xs:complexContent>
+ <xs:extension base="saml:SubjectType">
+ <xs:sequence>
+ <xs:element ref="IDPProvidedNameIdentifier"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+<xs:element name="Subject" type="SubjectType" substitutionGroup="saml:Subject"/>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_lib_subject_set_idpProvidedNameIdentifier(LassoLibSubject *node,
+ LassoLibIDPProvidedNameIdentifier *idpProvidedNameIdentifier)
+{
+ g_assert(LASSO_IS_LIB_SUBJECT(node));
+ g_assert(LASSO_IS_LIB_IDP_PROVIDED_NAME_IDENTIFIER(idpProvidedNameIdentifier));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(idpProvidedNameIdentifier), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_lib_subject_instance_init(LassoLibSubject *instance,
+ LassoLibSubjectClass *klass) {
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:liberty:iff:2003-08", "lib");
+ class->set_name(node, "Subject");
+}
+
+static void
+lasso_lib_subject_class_init(LassoLibSubjectClass *klass) {
+}
+
+GType lasso_lib_subject_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoLibSubjectClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_lib_subject_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoLibSubject),
+ 0,
+ (GInstanceInitFunc) lasso_lib_subject_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAML_SUBJECT,
+ "LassoLibSubject",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_lib_subject_new:
+ *
+ * Creates a new <saml:Subject> node object.
+ *
+ * Return value: the new @LassoLibSubject
+ **/
+LassoNode* lasso_lib_subject_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_LIB_SUBJECT, NULL));
+}
diff --git a/lasso/xml/lib_subject.h b/lasso/xml/lib_subject.h
new file mode 100644
index 00000000..053b07c4
--- /dev/null
+++ b/lasso/xml/lib_subject.h
@@ -0,0 +1,64 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_LIB_SUBJECT_H__
+#define __LASSO_LIB_SUBJECT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/lasso.h>
+#include <lasso/xml/saml_subject.h>
+
+#define LASSO_TYPE_LIB_SUBJECT (lasso_lib_subject_get_type())
+#define LASSO_LIB_SUBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_LIB_SUBJECT, LassoLibSubject))
+#define LASSO_LIB_SUBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_LIB_SUBJECT, LassoLibSubjectClass))
+#define LASSO_IS_LIB_SUBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_LIB_SUBJECT))
+#define LASSO_IS_LIB_SUBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_LIB_SUBJECT))
+#define LASSO_LIB_SUBJECT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_LIB_SUBJECT, LassoLibSubjectClass))
+
+typedef struct _LassoLibSubject LassoLibSubject;
+typedef struct _LassoLibSubjectClass LassoLibSubjectClass;
+
+struct _LassoLibSubject {
+ LassoSamlSubject parent;
+ /*< private >*/
+};
+
+struct _LassoLibSubjectClass {
+ LassoSamlSubjectClass parent;
+};
+
+LASSO_EXPORT GType lasso_lib_subject_get_type(void);
+LASSO_EXPORT LassoNode* lasso_lib_subject_new(void);
+
+LASSO_EXPORT void lasso_lib_subject_set_idpProvidedNameIdentifier(LassoLibSubject *node,
+ LassoLibIDPProvidedNameIdentifier *idpProvidedNameIdentifier);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_LIB_SUBJECT_H__ */
diff --git a/lasso/xml/saml.h b/lasso/xml/saml.h
new file mode 100644
index 00000000..e8adf261
--- /dev/null
+++ b/lasso/xml/saml.h
@@ -0,0 +1,56 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_H__
+#define __LASSO_SAML_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/saml_advice.h>
+#include <lasso/xml/saml_assertion.h>
+#include <lasso/xml/saml_audience_restriction_condition.h>
+#include <lasso/xml/saml_authentication_statement.h>
+#include <lasso/xml/saml_authority_binding.h>
+#include <lasso/xml/saml_condition_abstract.h>
+#include <lasso/xml/saml_conditions.h>
+#include <lasso/xml/saml_name_identifier.h>
+#include <lasso/xml/saml_statement_abstract.h>
+#include <lasso/xml/saml_subject.h>
+#include <lasso/xml/saml_subject_confirmation.h>
+#include <lasso/xml/saml_subject_locality.h>
+#include <lasso/xml/saml_subject_statement_abstract.h>
+
+#include <lasso/xml/samlp_response_abstract.h>
+#include <lasso/xml/samlp_response.h>
+#include <lasso/xml/samlp_request_abstract.h>
+#include <lasso/xml/samlp_status.h>
+#include <lasso/xml/samlp_status_code.h>
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_H__ */
diff --git a/lasso/xml/saml_advice.c b/lasso/xml/saml_advice.c
new file mode 100644
index 00000000..888a6fa3
--- /dev/null
+++ b/lasso/xml/saml_advice.c
@@ -0,0 +1,141 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_advice.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="Advice" type="saml:AdviceType"/>
+<complexType name="AdviceType">
+ <choice minOccurs="0" maxOccurs="unbounded">
+ <element ref="saml:AssertionIDReference"/>
+ <element ref="saml:Assertion"/>
+ <any namespace="##other" processContents="lax"/>
+ </choice>
+</complexType>
+
+<element name="AssertionIDReference" type="saml:IDReferenceType"/>
+<simpleType name="IDReferenceType">
+ <restriction base="string"/>
+</simpleType>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_saml_advice_add_assertionIDReference(LassoSamlAdvice *node,
+ const xmlChar *assertionIDReference)
+{
+ g_assert(LASSO_IS_SAML_ADVICE(node));
+ g_assert(assertionIDReference != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node),
+ "AssertionIDReference",
+ assertionIDReference,
+ TRUE);
+}
+
+void
+lasso_saml_advice_add_assertion(LassoSamlAdvice *node,
+ gpointer *assertion)
+{
+ g_assert(LASSO_IS_SAML_ADVICE(node));
+ //g_assert(LASSO_IS_SAML_ASSERTION(assertion));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE (assertion), TRUE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_advice_instance_init(LassoSamlAdvice *instance,
+ LassoSamlAdviceClass *klass) {
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, NULL, "saml");
+ class->set_name(node, "Advice");
+}
+
+static void
+lasso_saml_advice_class_init(LassoSamlAdviceClass *klass) {
+}
+
+GType lasso_saml_advice_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlAdviceClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_advice_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlAdvice),
+ 0,
+ (GInstanceInitFunc) lasso_saml_advice_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlAdvice",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_advice_new:
+ *
+ * Creates a new <saml:Advice> node object.
+ *
+ * The <Advice> element contains any additional information that the issuer
+ * wishes to provide. This information MAY be ignored by applications without
+ * affecting either the semantics or the validity of the assertion.
+ * The <Advice> element contains a mixture of zero or more <Assertion>
+ * elements, <AssertionIDReference> elements and elements in other namespaces,
+ * with lax schema validation in effect for these other elements.
+ * Following are some potential uses of the <Advice> element:
+ *
+ * - Include evidence supporting the assertion claims to be cited, either
+ * directly (through incorporating the claims) or indirectly (by reference to
+ * the supporting assertions).
+ *
+ * - State a proof of the assertion claims.
+ *
+ * - Specify the timing and distribution points for updates to the assertion.
+ *
+ * Return value: the new @LassoSamlAdvice
+ **/
+LassoNode* lasso_saml_advice_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAML_ADVICE, NULL));
+}
diff --git a/lasso/xml/saml_advice.h b/lasso/xml/saml_advice.h
new file mode 100644
index 00000000..d1be7f52
--- /dev/null
+++ b/lasso/xml/saml_advice.h
@@ -0,0 +1,66 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_ADVICE_H__
+#define __LASSO_SAML_ADVICE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_SAML_ADVICE (lasso_saml_advice_get_type())
+#define LASSO_SAML_ADVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_ADVICE, LassoSamlAdvice))
+#define LASSO_SAML_ADVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_ADVICE, LassoSamlAdviceClass))
+#define LASSO_IS_SAML_ADVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_ADVICE))
+#define LASSO_IS_SAML_ADVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_ADVICE))
+#define LASSO_SAML_ADVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_ADVICE, LassoSamlAdviceClass))
+
+typedef struct _LassoSamlAdvice LassoSamlAdvice;
+typedef struct _LassoSamlAdviceClass LassoSamlAdviceClass;
+
+struct _LassoSamlAdvice {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlAdviceClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_saml_advice_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_advice_new(void);
+
+LASSO_EXPORT void lasso_saml_advice_add_assertionIDReference (LassoSamlAdvice *node,
+ const xmlChar *assertionIDReference);
+
+LASSO_EXPORT void lasso_saml_advice_add_assertion (LassoSamlAdvice *node,
+ gpointer *assertion);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_ADVICE_H__ */
diff --git a/lasso/xml/saml_assertion.c b/lasso/xml/saml_assertion.c
new file mode 100644
index 00000000..82aa21f3
--- /dev/null
+++ b/lasso/xml/saml_assertion.c
@@ -0,0 +1,309 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_assertion.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="Assertion" type="saml:AssertionType"/>
+<complexType name="AssertionType">
+ <sequence>
+ <element ref="saml:Conditions" minOccurs="0"/>
+ <element ref="saml:Advice" minOccurs="0"/>
+ <choice maxOccurs="unbounded">
+ <element ref="saml:Statement"/>
+ <element ref="saml:SubjectStatement"/>
+ <element ref="saml:AuthenticationStatement"/>
+ <element ref="saml:AuthorizationDecisionStatement"/>
+ <element ref="saml:AttributeStatement"/>
+ </choice>
+ <element ref="ds:Signature" minOccurs="0"/>
+ </sequence>
+ <attribute name="MajorVersion" type="integer" use="required"/>
+ <attribute name="MinorVersion" type="integer" use="required"/>
+ <attribute name="AssertionID" type="saml:IDType" use="required"/>
+ <attribute name="Issuer" type="string" use="required"/>
+ <attribute name="IssueInstant" type="dateTime" use="required"/>
+</complexType>
+
+From oasis-sstc-saml-schema-assertion-1.0.xsd:
+<simpleType name="IDType">
+ <restriction base="string"/>
+</simpleType>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_saml_assertion_add_authenticationStatement(LassoSamlAssertion *node,
+ LassoSamlAuthenticationStatement *authenticationStatement)
+{
+ g_assert(LASSO_IS_SAML_ASSERTION(node));
+ g_assert(LASSO_IS_SAML_AUTHENTICATION_STATEMENT(authenticationStatement));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(authenticationStatement), TRUE);
+}
+
+void
+lasso_saml_assertion_add_statement(LassoSamlAssertion *node,
+ LassoSamlStatementAbstract *statement)
+{
+ g_assert(LASSO_IS_SAML_ASSERTION(node));
+ g_assert(LASSO_IS_SAML_STATEMENT_ABSTRACT(statement));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(statement), TRUE);
+}
+
+void
+lasso_saml_assertion_add_subjectStatement(LassoSamlAssertion *node,
+ LassoSamlSubjectStatementAbstract *subjectStatement)
+{
+ g_assert(LASSO_IS_SAML_ASSERTION(node));
+ g_assert(LASSO_IS_SAML_SUBJECT_STATEMENT_ABSTRACT(subjectStatement));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(subjectStatement), TRUE);
+}
+
+/**
+ * lasso_saml_assertion_set_advice:
+ * @node: the <saml:Assertion> node object
+ * @advice: the <saml:Advice> node object
+ *
+ * Sets the <Advice> element [optional].
+ *
+ * Additional information related to the assertion that assists processing in
+ * certain situations but which MAY be ignored by applications that do not
+ * support its use.
+ **/
+void
+lasso_saml_assertion_set_advice(LassoSamlAssertion *node,
+ LassoSamlAdvice *advice)
+{
+ g_assert(LASSO_IS_SAML_ASSERTION(node));
+ g_assert(LASSO_IS_SAML_ADVICE(advice));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(advice), FALSE);
+}
+
+/**
+ * lasso_saml_assertion_set_assertionID:
+ * @node: the <saml:Assertion> node object
+ * @assertionID: the value of "AssertionID" attribut
+ *
+ * Sets the "AssertionID" attribut [required].
+ *
+ * The identifier for this assertion. It is of type IDType, and MUST follow the
+ * requirements specified by that type for identifier uniqueness.
+ **/
+void
+lasso_saml_assertion_set_assertionID(LassoSamlAssertion *node,
+ const xmlChar *assertionID)
+{
+ g_assert(LASSO_IS_SAML_ASSERTION(node));
+ g_assert(assertionID != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "AssertionID", assertionID);
+}
+
+/**
+ * lasso_saml_assertion_set_conditions:
+ * @node: the <saml:Assertion> node object
+ * @conditions: the <saml:Conditions> node object
+ *
+ * Sets the <Conditions> element [optional].
+ *
+ * Conditions that MUST be taken into account in assessing the validity of the
+ * assertion.
+ **/
+void
+lasso_saml_assertion_set_conditions(LassoSamlAssertion *node,
+ LassoSamlConditions *conditions)
+{
+ g_assert(LASSO_IS_SAML_ASSERTION(node));
+ g_assert(LASSO_IS_SAML_CONDITIONS(conditions));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(conditions), FALSE);
+}
+
+/**
+ * lasso_saml_assertion_set_issueInstance:
+ * @node: the <saml:Assertion> node object
+ * @issueInstance: the value of "IssueInstance" attribut
+ *
+ * Sets the "IssueInstance" attribut [required].
+ *
+ * The time instant of issue in UTC as described in Section 1.2.2
+ * (oasis-sstc-saml-core-1.0.pdf).
+ **/
+void
+lasso_saml_assertion_set_issueInstance(LassoSamlAssertion *node,
+ const xmlChar *issueInstance)
+{
+ g_assert(LASSO_IS_SAML_ASSERTION(node));
+ g_assert(issueInstance != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "IssueInstance", issueInstance);
+}
+
+/**
+ * lasso_saml_assertion_set_issuer:
+ * @node: the <saml:Assertion> node object
+ * @issuer: the value of "Issuer" attribut
+ *
+ * Sets the "Issuer" attribut [required].
+ *
+ * The issuer of the assertion. The name of the issuer is provided as a string.
+ * The issuer name SHOULD be unambiguous to the intended relying parties. SAML
+ * authorities may use an identifier such as a URI reference that is designed
+ * to be unambiguous regardless of context.
+ **/
+void
+lasso_saml_assertion_set_issuer(LassoSamlAssertion *node,
+ const xmlChar *issuer)
+{
+ g_assert(LASSO_IS_SAML_ASSERTION(node));
+ g_assert(issuer != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "Issuer", issuer);
+}
+
+/**
+ * lasso_saml_assertion_set_majorVersion:
+ * @node: the <saml:Assertion> node object
+ * @majorVersion: the value of "MajorVersion" attribut
+ *
+ * Sets the "MajorVersion" attribut [required].
+ *
+ * The major version of the assertion. The identifier for the version of SAML
+ * defined in this specification is 1. Processing of this attribute is
+ * specified in Section 3.4.4 (oasis-sstc-saml-core-1.0.pdf).
+ **/
+void
+lasso_saml_assertion_set_majorVersion(LassoSamlAssertion *node,
+ const xmlChar *majorVersion)
+{
+ g_assert(LASSO_IS_SAML_ASSERTION(node));
+ g_assert(majorVersion != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "MajorVersion", majorVersion);
+}
+
+/**
+ * lasso_saml_assertion_set_minorVersion:
+ * @node: the <saml:Assertion> node object
+ * @minorVersion: the value of "MinorVersion" attribut
+ *
+ * Sets the "MinorVersion" attribut [required].
+ *
+ * The minor version of the assertion. The identifier for the version of SAML
+ * defined in this specification is 0. Processing of this attribute is
+ * specified in Section 3.4.4 (oasis-sstc-saml-core-1.0.pdf).
+ **/
+void
+lasso_saml_assertion_set_minorVersion(LassoSamlAssertion *node,
+ const xmlChar *minorVersion)
+{
+ g_assert(LASSO_IS_SAML_ASSERTION(node));
+ g_assert(minorVersion != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "MinorVersion", minorVersion);
+}
+
+void
+lasso_saml_assertion_set_signature(LassoSamlAssertion *node,
+ LassoDsSignature *signature)
+{
+ g_assert(LASSO_IS_SAML_ASSERTION(node));
+ g_assert(LASSO_IS_DS_SIGNATURE(signature));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(signature), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_assertion_instance_init(LassoSamlAssertion *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "Assertion");
+}
+
+static void
+lasso_saml_assertion_class_init(LassoSamlAssertionClass *klass)
+{
+}
+
+GType lasso_saml_assertion_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlAssertionClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_assertion_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlAssertion),
+ 0,
+ (GInstanceInitFunc) lasso_saml_assertion_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlAssertion",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_assertion_new:
+ *
+ * Creates a new <saml:Assertion> node object.
+ *
+ * Return value: the new @LassoSamlAssertion
+ **/
+LassoNode* lasso_saml_assertion_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAML_ASSERTION, NULL));
+}
diff --git a/lasso/xml/saml_assertion.h b/lasso/xml/saml_assertion.h
new file mode 100644
index 00000000..131482d3
--- /dev/null
+++ b/lasso/xml/saml_assertion.h
@@ -0,0 +1,99 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_ASSERTION_H__
+#define __LASSO_SAML_ASSERTION_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+#include <lasso/xml/ds_signature.h>
+#include <lasso/xml/saml_advice.h>
+#include <lasso/xml/saml_authentication_statement.h>
+#include <lasso/xml/saml_conditions.h>
+#include <lasso/xml/saml_statement_abstract.h>
+#include <lasso/xml/saml_subject_statement_abstract.h>
+
+#define LASSO_TYPE_SAML_ASSERTION (lasso_saml_assertion_get_type())
+#define LASSO_SAML_ASSERTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_ASSERTION, LassoSamlAssertion))
+#define LASSO_SAML_ASSERTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_ASSERTION, LassoSamlAssertionClass))
+#define LASSO_IS_SAML_ASSERTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_ASSERTION))
+#define LASSO_IS_SAML_ASSERTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_ASSERTION))
+#define LASSO_SAML_ASSERTION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_ASSERTION, LassoSamlAssertionClass))
+
+typedef struct _LassoSamlAssertion LassoSamlAssertion;
+typedef struct _LassoSamlAssertionClass LassoSamlAssertionClass;
+
+struct _LassoSamlAssertion {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlAssertionClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_saml_assertion_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_assertion_new(void);
+
+LASSO_EXPORT void lasso_saml_assertion_add_authenticationStatement (LassoSamlAssertion *node,
+ LassoSamlAuthenticationStatement *authenticationStatement);
+
+LASSO_EXPORT void lasso_saml_assertion_add_statement (LassoSamlAssertion *node,
+ LassoSamlStatementAbstract *statement);
+
+LASSO_EXPORT void lasso_saml_assertion_add_subjectStatement (LassoSamlAssertion *node,
+ LassoSamlSubjectStatementAbstract *subjectStatement);
+
+LASSO_EXPORT void lasso_saml_assertion_set_advice (LassoSamlAssertion *node,
+ LassoSamlAdvice *advice);
+
+LASSO_EXPORT void lasso_saml_assertion_set_assertionID (LassoSamlAssertion *node,
+ const xmlChar *assertionID);
+
+LASSO_EXPORT void lasso_saml_assertion_set_conditions (LassoSamlAssertion *node,
+ LassoSamlConditions *conditions);
+
+LASSO_EXPORT void lasso_saml_assertion_set_issueInstance (LassoSamlAssertion *node,
+ const xmlChar *issueInstance);
+
+LASSO_EXPORT void lasso_saml_assertion_set_issuer (LassoSamlAssertion *node,
+ const xmlChar *issuer);
+
+LASSO_EXPORT void lasso_saml_assertion_set_majorVersion (LassoSamlAssertion *node,
+ const xmlChar *majorVersion);
+
+LASSO_EXPORT void lasso_saml_assertion_set_minorVersion (LassoSamlAssertion *node,
+ const xmlChar *minorVersion);
+
+LASSO_EXPORT void lasso_saml_assertion_set_signature (LassoSamlAssertion *node,
+ LassoDsSignature *signature);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_ASSERTION_H__ */
diff --git a/lasso/xml/saml_audience_restriction_condition.c b/lasso/xml/saml_audience_restriction_condition.c
new file mode 100644
index 00000000..b2f823a0
--- /dev/null
+++ b/lasso/xml/saml_audience_restriction_condition.c
@@ -0,0 +1,138 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_audience_restriction_condition.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="AudienceRestrictionCondition" type="saml:AudienceRestrictionConditionType"/>
+<complexType name="AudienceRestrictionConditionType">
+ <complexContent>
+ <extension base="saml:ConditionAbstractType">
+ <sequence>
+ <element ref="saml:Audience" maxOccurs="unbounded"/>
+ </sequence>
+ </extension>
+ </complexContent>
+</complexType>
+
+<element name="Audience" type="anyURI"/>
+*/
+
+/*****************************************************************************/
+/* publics methods */
+/*****************************************************************************/
+
+/**
+ * lasso_saml_audience_restriction_condition_add_audience:
+ * @node: the <saml:AudienceRestrictionCondition> node object
+ * @audience: the value of "Audience" element
+ *
+ * Adds an "Audience" element.
+ *
+ * A URI reference that identifies an intended audience. The URI reference MAY
+ * identify a document that describes the terms and conditions of audience
+ * membership.
+ **/
+void
+lasso_saml_audience_restriction_condition_add_audience(LassoSamlAudienceRestrictionCondition *node,
+ const xmlChar *audience)
+{
+ g_assert(LASSO_IS_SAML_AUDIENCE_RESTRICTION_CONDITION(node));
+ g_assert(audience != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "Audience", audience, TRUE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_audience_restriction_condition_instance_init(LassoSamlAudienceRestrictionCondition *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "AudienceRestrictionCondition");
+}
+
+static void
+lasso_saml_audience_restriction_condition_class_init(LassoSamlAudienceRestrictionConditionClass *klass)
+{
+}
+
+GType lasso_saml_audience_restriction_condition_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlAudienceRestrictionConditionClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_audience_restriction_condition_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlAudienceRestrictionCondition),
+ 0,
+ (GInstanceInitFunc) lasso_saml_audience_restriction_condition_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAML_CONDITION_ABSTRACT,
+ "LassoSamlAudienceRestrictionCondition",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_audience_restriction_condition_new:
+ *
+ * Creates a new <saml:AudienceRestrictionCondition> node object.
+ *
+ * The <AudienceRestrictionCondition> element specifies that the assertion is
+ * addressed to one or more specific audiences identified by <Audience>
+ * elements. Although a party that is outside the audiences specified is
+ * capable of drawing conclusions from an assertion, the issuer explicitly
+ * makes no representation as to accuracy or trustworthiness to such a party.
+ *
+ * The AudienceRestrictionCondition evaluates to Valid if and only if the
+ * relying party is a member of one or more of the audiences specified. The
+ * issuer of an assertion cannot prevent a party to whom it is disclosed from
+ * making a decision on the basis of the information provided. However, the
+ * <AudienceRestrictionCondition> element allows the issuer to state explicitly
+ * that no warranty is provided to such a party in a machine- and
+ * human-readable form. While there can be no guarantee that a court would
+ * uphold such a warranty exclusion in every circumstance, the probability of
+ * upholding the warranty exclusion is considerably improved.
+ *
+ * Return value: the new @LassoSamlAudienceRestrictionCondition
+ **/
+LassoNode* lasso_saml_audience_restriction_condition_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION, NULL));
+}
diff --git a/lasso/xml/saml_audience_restriction_condition.h b/lasso/xml/saml_audience_restriction_condition.h
new file mode 100644
index 00000000..25b1915a
--- /dev/null
+++ b/lasso/xml/saml_audience_restriction_condition.h
@@ -0,0 +1,64 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_H__
+#define __LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/saml_condition_abstract.h>
+
+#define LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION (lasso_saml_audience_restriction_condition_get_type())
+#define LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION, LassoSamlAudienceRestrictionCondition))
+#define LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION, LassoSamlAudienceRestrictionConditionClass))
+#define LASSO_IS_SAML_AUDIENCE_RESTRICTION_CONDITION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION))
+#define LASSO_IS_SAML_AUDIENCE_RESTRICTION_CONDITION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION))
+#define LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_AUDIENCE_RESTRICTION_CONDITION, LassoSamlAudienceRestrictionConditionClass))
+
+typedef struct _LassoSamlAudienceRestrictionCondition LassoSamlAudienceRestrictionCondition;
+typedef struct _LassoSamlAudienceRestrictionConditionClass LassoSamlAudienceRestrictionConditionClass;
+
+struct _LassoSamlAudienceRestrictionCondition {
+ LassoSamlConditionAbstract parent;
+ /*< private >*/
+};
+
+struct _LassoSamlAudienceRestrictionConditionClass {
+ LassoSamlConditionAbstractClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_saml_audience_restriction_condition_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_audience_restriction_condition_new(void);
+
+LASSO_EXPORT void lasso_saml_audience_restriction_condition_add_audience (LassoSamlAudienceRestrictionCondition *node,
+ const xmlChar *audience);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_AUDIENCE_RESTRICTION_CONDITION_H__ */
diff --git a/lasso/xml/saml_authentication_statement.c b/lasso/xml/saml_authentication_statement.c
new file mode 100644
index 00000000..60a4ec15
--- /dev/null
+++ b/lasso/xml/saml_authentication_statement.c
@@ -0,0 +1,146 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_authentication_statement.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="AuthenticationStatement" type="saml:AuthenticationStatementType"/>
+<complexType name="AuthenticationStatementType">
+ <complexContent>
+ <extension base="saml:SubjectStatementAbstractType">
+ <sequence>
+ <element ref="saml:SubjectLocality" minOccurs="0"/>
+ <element ref="saml:AuthorityBinding" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="AuthenticationMethod" type="anyURI" use="required"/>
+ <attribute name="AuthenticationInstant" type="dateTime" use="required"/>
+ </extension>
+ </complexContent>
+</complexType>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_saml_authentication_statement_add_authorityBinding(LassoSamlAuthenticationStatement *node,
+ LassoSamlAuthorityBinding *authorityBinding)
+{
+ g_assert(LASSO_IS_SAML_AUTHENTICATION_STATEMENT(node));
+ g_assert(LASSO_IS_SAML_AUTHORITY_BINDING(authorityBinding));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(authorityBinding), TRUE);
+}
+
+void
+lasso_saml_authentication_statement_set_authenticationInstant(LassoSamlAuthenticationStatement *node,
+ const xmlChar *authenticationInstant)
+{
+ g_assert(LASSO_IS_SAML_AUTHENTICATION_STATEMENT(node));
+ g_assert(authenticationInstant != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "AuthenticationInstant", authenticationInstant);
+}
+
+void
+lasso_saml_authentication_statement_set_authenticationMethod(LassoSamlAuthenticationStatement *node,
+ const xmlChar *authenticationMethod)
+{
+ g_assert(LASSO_IS_SAML_AUTHENTICATION_STATEMENT(node));
+ g_assert(authenticationMethod != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "AuthenticationMethod", authenticationMethod);
+}
+
+void
+lasso_saml_authentication_statement_set_subjectLocality(LassoSamlAuthenticationStatement *node,
+ LassoSamlSubjectLocality *subjectLocality)
+{
+ g_assert(LASSO_IS_SAML_AUTHENTICATION_STATEMENT(node));
+ g_assert(LASSO_IS_SAML_SUBJECT_LOCALITY(subjectLocality));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(subjectLocality), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_authentication_statement_instance_init(LassoSamlAuthenticationStatement *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ // namespace is herited from SubjectStatementAbstract -> StatementAbstract
+ //class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "AuthenticationStatement");
+}
+
+static void
+lasso_saml_authentication_statement_class_init(LassoSamlAuthenticationStatementClass *klass)
+{
+}
+
+GType lasso_saml_authentication_statement_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlAuthenticationStatementClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_authentication_statement_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlAuthenticationStatement),
+ 0,
+ (GInstanceInitFunc) lasso_saml_authentication_statement_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT,
+ "LassoSamlAuthenticationStatement",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_authentication_statement_new:
+ *
+ * Creates a new <saml:AuthenticationStatement> node object.
+ *
+ * Return value: the new @LassoSamlAuthenticationStatement
+ **/
+LassoNode* lasso_saml_authentication_statement_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT, NULL));
+}
diff --git a/lasso/xml/saml_authentication_statement.h b/lasso/xml/saml_authentication_statement.h
new file mode 100644
index 00000000..f5729c80
--- /dev/null
+++ b/lasso/xml/saml_authentication_statement.h
@@ -0,0 +1,75 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_AUTHENTICATION_STATEMENT_H__
+#define __LASSO_SAML_AUTHENTICATION_STATEMENT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/saml_subject_statement_abstract.h>
+#include <lasso/xml/saml_authority_binding.h>
+#include <lasso/xml/saml_subject_locality.h>
+
+#define LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT (lasso_saml_authentication_statement_get_type())
+#define LASSO_SAML_AUTHENTICATION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT, LassoSamlAuthenticationStatement))
+#define LASSO_SAML_AUTHENTICATION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT, LassoSamlAuthenticationStatementClass))
+#define LASSO_IS_SAML_AUTHENTICATION_STATEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT))
+#define LASSO_IS_SAML_AUTHENTICATION_STATEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT))
+#define LASSO_SAML_AUTHENTICATION_STATEMENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_AUTHENTICATION_STATEMENT, LassoSamlAuthenticationStatementClass))
+
+typedef struct _LassoSamlAuthenticationStatement LassoSamlAuthenticationStatement;
+typedef struct _LassoSamlAuthenticationStatementClass LassoSamlAuthenticationStatementClass;
+
+struct _LassoSamlAuthenticationStatement {
+ LassoSamlSubjectStatementAbstract parent;
+ /*< private >*/
+};
+
+struct _LassoSamlAuthenticationStatementClass {
+ LassoSamlSubjectStatementAbstractClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_saml_authentication_statement_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_authentication_statement_new(void);
+
+LASSO_EXPORT void lasso_saml_authentication_statement_add_authorityBinding (LassoSamlAuthenticationStatement *node,
+ LassoSamlAuthorityBinding *authorityBinding);
+
+LASSO_EXPORT void lasso_saml_authentication_statement_set_authenticationInstant (LassoSamlAuthenticationStatement *node,
+ const xmlChar *authenticationInstant);
+
+LASSO_EXPORT void lasso_saml_authentication_statement_set_authenticationMethod (LassoSamlAuthenticationStatement *node,
+ const xmlChar *authenticationMethod);
+
+LASSO_EXPORT void lasso_saml_authentication_statement_set_subjectLocality (LassoSamlAuthenticationStatement *node,
+ LassoSamlSubjectLocality *subjectLocality);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_AUTHENTICATION_STATEMENT_H__ */
diff --git a/lasso/xml/saml_authority_binding.c b/lasso/xml/saml_authority_binding.c
new file mode 100644
index 00000000..0725f083
--- /dev/null
+++ b/lasso/xml/saml_authority_binding.c
@@ -0,0 +1,128 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_authority_binding.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="AuthorityBinding" type="saml:AuthorityBindingType"/>
+<complexType name="AuthorityBindingType">
+ <attribute name="AuthorityKind" type="QName" use="required"/>
+ <attribute name="Location" type="anyURI" use="required"/>
+ <attribute name="Binding" type="anyURI" use="required"/>
+</complexType>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_saml_authority_binding_set_authorityKind(LassoSamlAuthorityBinding *node,
+ const xmlChar *authorityKind)
+{
+ g_assert(LASSO_IS_SAML_AUTHORITY_BINDING(node));
+ g_assert(authorityKind != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "AuthorityKind", authorityKind);
+}
+
+void
+lasso_saml_authority_binding_set_binding(LassoSamlAuthorityBinding *node,
+ const xmlChar *binding)
+{
+ g_assert(LASSO_IS_SAML_AUTHORITY_BINDING(node));
+ g_assert(binding != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "Binding", binding);
+}
+
+void
+lasso_saml_authority_binding_set_location(LassoSamlAuthorityBinding *node,
+ const xmlChar *location)
+{
+ g_assert(LASSO_IS_SAML_AUTHORITY_BINDING(node));
+ g_assert(location != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "Location", location);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_authority_binding_instance_init(LassoSamlAuthorityBinding *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "AuthorityBinding");
+}
+
+static void
+lasso_saml_authority_binding_class_init(LassoSamlAuthorityBindingClass *klass)
+{
+}
+
+GType lasso_saml_authority_binding_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlAuthorityBindingClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_authority_binding_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlAuthorityBinding),
+ 0,
+ (GInstanceInitFunc) lasso_saml_authority_binding_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlAuthorityBinding",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_authority_binding_new:
+ *
+ * Creates a new <saml:AuthorityBinding> node object.
+ *
+ * Return value: the new @LassoSamlAuthorityBinding
+ **/
+LassoNode* lasso_saml_authority_binding_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAML_AUTHORITY_BINDING, NULL));
+}
diff --git a/lasso/xml/saml_authority_binding.h b/lasso/xml/saml_authority_binding.h
new file mode 100644
index 00000000..213d7caf
--- /dev/null
+++ b/lasso/xml/saml_authority_binding.h
@@ -0,0 +1,70 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_AUTHORITY_BINDING_H__
+#define __LASSO_SAML_AUTHORITY_BINDING_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_SAML_AUTHORITY_BINDING (lasso_saml_authority_binding_get_type())
+#define LASSO_SAML_AUTHORITY_BINDING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_AUTHORITY_BINDING, LassoSamlAuthorityBinding))
+#define LASSO_SAML_AUTHORITY_BINDING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_AUTHORITY_BINDING, LassoSamlAuthorityBindingClass))
+#define LASSO_IS_SAML_AUTHORITY_BINDING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_AUTHORITY_BINDING))
+#define LASSO_IS_SAML_AUTHORITY_BINDING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_AUTHORITY_BINDING))
+#define LASSO_SAML_AUTHORITY_BINDING_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_AUTHORITY_BINDING, LassoSamlAuthorityBindingClass))
+
+typedef struct _LassoSamlAuthorityBinding LassoSamlAuthorityBinding;
+typedef struct _LassoSamlAuthorityBindingClass LassoSamlAuthorityBindingClass;
+
+struct _LassoSamlAuthorityBinding {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlAuthorityBindingClass {
+ LassoNodeClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_saml_authority_binding_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_authority_binding_new(void);
+
+LASSO_EXPORT void lasso_saml_authority_binding_set_authorityKind (LassoSamlAuthorityBinding *node,
+ const xmlChar *authorityKind);
+
+LASSO_EXPORT void lasso_saml_authority_binding_set_binding (LassoSamlAuthorityBinding *node,
+ const xmlChar *binding);
+
+LASSO_EXPORT void lasso_saml_authority_binding_set_location (LassoSamlAuthorityBinding *node,
+ const xmlChar *location);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_AUTHORITY_BINDING_H__ */
diff --git a/lasso/xml/saml_condition_abstract.c b/lasso/xml/saml_condition_abstract.c
new file mode 100644
index 00000000..a896cdda
--- /dev/null
+++ b/lasso/xml/saml_condition_abstract.c
@@ -0,0 +1,95 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_condition_abstract.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="Condition" type="saml:ConditionAbstractType"/>
+<complexType name="ConditionAbstractType" abstract="true"/>
+*/
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_condition_abstract_instance_init(LassoSamlConditionAbstract *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "ConditionAbstract");
+}
+
+static void
+lasso_saml_condition_abstract_class_init(LassoSamlConditionAbstractClass *klass)
+{
+}
+
+GType lasso_saml_condition_abstract_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlConditionAbstractClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_condition_abstract_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlConditionAbstract),
+ 0,
+ (GInstanceInitFunc) lasso_saml_condition_abstract_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlConditionAbstract",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_condition_abstract_new:
+ * @name: the node's name. If @name is NULL or an empty string, default value
+ * "ConditionAbstract" will be used.
+ *
+ * Creates a new <saml:ConditionAbstract> node object.
+ *
+ * Return value: the new @LassoSamlConditionAbstract
+ **/
+LassoNode* lasso_saml_condition_abstract_new(const xmlChar *name)
+{
+ LassoNode *node;
+
+ node = LASSO_NODE(g_object_new(LASSO_TYPE_SAML_CONDITION_ABSTRACT, NULL));
+
+ if (name && *name)
+ LASSO_NODE_GET_CLASS(node)->set_name(node, name);
+
+ return (node);
+}
diff --git a/lasso/xml/saml_condition_abstract.h b/lasso/xml/saml_condition_abstract.h
new file mode 100644
index 00000000..bdf98b27
--- /dev/null
+++ b/lasso/xml/saml_condition_abstract.h
@@ -0,0 +1,61 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_CONDITION_ABSTRACT_H__
+#define __LASSO_SAML_CONDITION_ABSTRACT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_SAML_CONDITION_ABSTRACT (lasso_saml_condition_abstract_get_type())
+#define LASSO_SAML_CONDITION_ABSTRACT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_CONDITION_ABSTRACT, LassoSamlConditionAbstract))
+#define LASSO_SAML_CONDITION_ABSTRACT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_CONDITION_ABSTRACT, LassoSamlConditionAbstractClass))
+#define LASSO_IS_SAML_CONDITION_ABSTRACT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_CONDITION_ABSTRACT))
+#define LASSO_IS_SAML_CONDITION_ABSTRACT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_CONDITION_ABSTRACT))
+#define LASSO_SAML_CONDITION_ABSTRACT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_CONDITION_ABSTRACT, LassoSamlConditionAbstractClass))
+
+typedef struct _LassoSamlConditionAbstract LassoSamlConditionAbstract;
+typedef struct _LassoSamlConditionAbstractClass LassoSamlConditionAbstractClass;
+
+struct _LassoSamlConditionAbstract {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlConditionAbstractClass {
+ LassoNodeClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_saml_condition_abstract_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_condition_abstract_new(const xmlChar *name);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_CONDITION_ABSTRACT_H__ */
diff --git a/lasso/xml/saml_conditions.c b/lasso/xml/saml_conditions.c
new file mode 100644
index 00000000..3fe0461a
--- /dev/null
+++ b/lasso/xml/saml_conditions.c
@@ -0,0 +1,176 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_conditions.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="Conditions" type="saml:ConditionsType"/>
+<complexType name="ConditionsType">
+ <choice minOccurs="0" maxOccurs="unbounded">
+ <element ref="saml:AudienceRestrictionCondition"/>
+ <element ref="saml:Condition"/>
+ </choice>
+ <attribute name="NotBefore" type="dateTime" use="optional"/>
+ <attribute name="NotOnOrAfter" type="dateTime" use="optional"/>
+</complexType>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+/**
+ * lasso_saml_conditions_add_condition:
+ * @node: the <saml:Conditions> node object
+ * @condition:
+ *
+ *
+ **/
+void
+lasso_saml_conditions_add_condition(LassoSamlConditions *node,
+ LassoSamlConditionAbstract *condition)
+{
+ g_assert(LASSO_IS_SAML_CONDITIONS(node));
+ g_assert(LASSO_IS_SAML_CONDITION_ABSTRACT(condition));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(condition), TRUE);
+}
+
+/**
+ * lasso_saml_conditions_add_audienceRestrictionCondition:
+ * @node: the <saml:Conditions> node object
+ * @audienceRestrictionCondition:
+ *
+ *
+ **/
+void
+lasso_saml_conditions_add_audienceRestrictionCondition(LassoSamlConditions *node,
+ LassoSamlAudienceRestrictionCondition *audienceRestrictionCondition)
+{
+ g_assert(LASSO_IS_SAML_CONDITIONS(node));
+ g_assert(LASSO_IS_SAML_AUDIENCE_RESTRICTION_CONDITION(audienceRestrictionCondition));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(audienceRestrictionCondition), TRUE);
+}
+
+/**
+ * lasso_saml_conditions_set_notBefore:
+ * @node: the <saml:Conditions> node object
+ * @notBefore: the value of "NotBefore" attribute
+ *
+ * Sets the "NotBefore" attribute.
+ *
+ * Specifies the earliest time instant at which the assertion is valid. The
+ * time value is encoded in UTC as described in Section 1.2.2
+ * (oasis-sstc-saml-core-1.0.pdf).
+ **/
+void
+lasso_saml_conditions_set_notBefore(LassoSamlConditions *node,
+ const xmlChar *notBefore)
+{
+ g_assert(LASSO_IS_SAML_CONDITIONS(node));
+ g_assert(notBefore != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "NotBefore", notBefore);
+}
+
+/**
+ * lasso_saml_conditions_set_notOnOrAfter:
+ * @node: the <saml:Conditions> node object
+ * @notOnOrAfter: the value of "NotOnOrAfter" attribute.
+ *
+ * Sets the "NotOnOrAfter" attribute.
+ *
+ * Specifies the time instant at which the assertion has expired. The time
+ * value is encoded in UTC as described in Section 1.2.2
+ * (oasis-sstc-saml-core-1.0.pdf).
+ **/
+void
+lasso_saml_conditions_set_notOnOrAfter(LassoSamlConditions *node,
+ const xmlChar *notOnOrAfter)
+{
+ g_assert(LASSO_IS_SAML_CONDITIONS(node));
+ g_assert(notOnOrAfter != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "NotOnOrAfter", notOnOrAfter);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_conditions_instance_init(LassoSamlConditions *instance,
+ LassoSamlConditionsClass *klass) {
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "Conditions");
+}
+
+static void
+lasso_saml_conditions_class_init(LassoSamlConditionsClass *klass) {
+}
+
+GType lasso_saml_conditions_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlConditionsClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_conditions_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlConditions),
+ 0,
+ (GInstanceInitFunc) lasso_saml_conditions_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlConditions",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_conditions_new:
+ *
+ * Creates a new <saml:Conditions> node object.
+ *
+ * Return value: the new @LassoSamlConditions
+ **/
+LassoNode* lasso_saml_conditions_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAML_CONDITIONS, NULL));
+}
diff --git a/lasso/xml/saml_conditions.h b/lasso/xml/saml_conditions.h
new file mode 100644
index 00000000..6ab73825
--- /dev/null
+++ b/lasso/xml/saml_conditions.h
@@ -0,0 +1,74 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_CONDITIONS_H__
+#define __LASSO_SAML_CONDITIONS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+#include <lasso/xml/saml_condition_abstract.h>
+#include <lasso/xml/saml_audience_restriction_condition.h>
+
+#define LASSO_TYPE_SAML_CONDITIONS (lasso_saml_conditions_get_type())
+#define LASSO_SAML_CONDITIONS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_CONDITIONS, LassoSamlConditions))
+#define LASSO_SAML_CONDITIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_CONDITIONS, LassoSamlConditionsClass))
+#define LASSO_IS_SAML_CONDITIONS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_CONDITIONS))
+#define LASSO_IS_SAML_CONDITIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_CONDITIONS))
+#define LASSO_SAML_CONDITIONS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_CONDITIONS, LassoSamlConditionsClass))
+
+typedef struct _LassoSamlConditions LassoSamlConditions;
+typedef struct _LassoSamlConditionsClass LassoSamlConditionsClass;
+
+struct _LassoSamlConditions {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlConditionsClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_saml_conditions_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_conditions_new(void);
+
+LASSO_EXPORT void lasso_saml_conditions_add_condition (LassoSamlConditions *node,
+ LassoSamlConditionAbstract *condition);
+
+LASSO_EXPORT void lasso_saml_conditions_add_audienceRestrictionCondition(LassoSamlConditions *node,
+ LassoSamlAudienceRestrictionCondition *audienceRestrictionCondition);
+
+LASSO_EXPORT void lasso_saml_conditions_set_notBefore (LassoSamlConditions *node,
+ const xmlChar *notBefore);
+
+LASSO_EXPORT void lasso_saml_conditions_set_notOnOrAfter (LassoSamlConditions *node,
+ const xmlChar *notOnOrAfter);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_CONDITIONS_H__ */
diff --git a/lasso/xml/saml_name_identifier.c b/lasso/xml/saml_name_identifier.c
new file mode 100644
index 00000000..16f03df8
--- /dev/null
+++ b/lasso/xml/saml_name_identifier.c
@@ -0,0 +1,126 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_name_identifier.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="NameIdentifier" type="saml:NameIdentifierType"/>
+<complexType name="NameIdentifierType">
+ <simpleContent>
+ <extension base="string">
+ <attribute name="NameQualifier" type="string" use="optional"/>
+ <attribute name="Format" type="anyURI" use="optional"/>
+ </extension>
+ </simpleContent>
+</complexType>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_saml_name_identifier_set_nameQualifier(LassoSamlNameIdentifier *node,
+ const xmlChar *nameQualifier)
+{
+ g_assert(LASSO_IS_SAML_NAME_IDENTIFIER(node));
+ g_assert(nameQualifier != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "NameQualifier", nameQualifier);
+}
+
+void
+lasso_saml_name_identifier_set_format(LassoSamlNameIdentifier *node,
+ const xmlChar *format)
+{
+ g_assert(LASSO_IS_SAML_NAME_IDENTIFIER(node));
+ g_assert(format != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "Format", format);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_name_identifier_instance_init(LassoSamlNameIdentifier *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "NameIdentifier");
+}
+
+static void
+lasso_saml_name_identifier_class_init(LassoSamlNameIdentifierClass *klass)
+{
+}
+
+GType lasso_saml_name_identifier_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlNameIdentifierClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_name_identifier_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlNameIdentifier),
+ 0,
+ (GInstanceInitFunc) lasso_saml_name_identifier_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlNameIdentifier",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_name_identifier_new:
+ *
+ * Creates a new <saml:NameIdentifier> node object.
+ *
+ * Return value: the new @LassoSamlNameIdentifier
+ **/
+LassoNode* lasso_saml_name_identifier_new(xmlChar *content)
+{
+ LassoNode *node;
+
+ g_assert(content != NULL);
+
+ node = LASSO_NODE(g_object_new(LASSO_TYPE_SAML_NAME_IDENTIFIER, NULL));
+ xmlNodeSetContent(LASSO_NODE_GET_CLASS(node)->get_xmlNode(node),
+ content);
+ return (node);
+}
diff --git a/lasso/xml/saml_name_identifier.h b/lasso/xml/saml_name_identifier.h
new file mode 100644
index 00000000..b3cb118e
--- /dev/null
+++ b/lasso/xml/saml_name_identifier.h
@@ -0,0 +1,67 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_NAME_IDENTIFIER_H__
+#define __LASSO_SAML_NAME_IDENTIFIER_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_SAML_NAME_IDENTIFIER (lasso_saml_name_identifier_get_type())
+#define LASSO_SAML_NAME_IDENTIFIER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_NAME_IDENTIFIER, LassoSamlNameIdentifier))
+#define LASSO_SAML_NAME_IDENTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_NAME_IDENTIFIER, LassoSamlNameIdentifierClass))
+#define LASSO_IS_SAML_NAME_IDENTIFIER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_NAME_IDENTIFIER))
+#define LASSO_IS_SAML_NAME_IDENTIFIER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_NAME_IDENTIFIER))
+#define LASSO_SAML_NAME_IDENTIFIER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_NAME_IDENTIFIER, LassoSamlNameIdentifierClass))
+
+typedef struct _LassoSamlNameIdentifier LassoSamlNameIdentifier;
+typedef struct _LassoSamlNameIdentifierClass LassoSamlNameIdentifierClass;
+
+struct _LassoSamlNameIdentifier {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlNameIdentifierClass {
+ LassoNodeClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_saml_name_identifier_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_name_identifier_new(xmlChar *content);
+
+LASSO_EXPORT void lasso_saml_name_identifier_set_nameQualifier (LassoSamlNameIdentifier *node,
+ const xmlChar *nameQualifier);
+
+LASSO_EXPORT void lasso_saml_name_identifier_set_format (LassoSamlNameIdentifier *node,
+ const xmlChar *format);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_NAME_IDENTIFIER_H__ */
diff --git a/lasso/xml/saml_statement_abstract.c b/lasso/xml/saml_statement_abstract.c
new file mode 100644
index 00000000..7448239a
--- /dev/null
+++ b/lasso/xml/saml_statement_abstract.c
@@ -0,0 +1,95 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_statement_abstract.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="Statement" type="saml:StatementAbstractType"/>
+<complexType name="StatementAbstractType" abstract="true"/>
+*/
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_statement_abstract_instance_init(LassoSamlStatementAbstract *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "StatementAbstract");
+}
+
+static void
+lasso_saml_statement_abstract_class_init(LassoSamlStatementAbstractClass *klass)
+{
+}
+
+GType lasso_saml_statement_abstract_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlStatementAbstractClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_statement_abstract_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlStatementAbstract),
+ 0,
+ (GInstanceInitFunc) lasso_saml_statement_abstract_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlStatementAbstract",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_statement_abstract_new:
+ * @name: the node's name. If @name is NULL or an empty string, default value
+ * "StatementAbstract" will be used.
+ *
+ * Creates a new <saml:StatementAbstract> node object.
+ *
+ * Return value: the new @LassoSamlStatementAbstract
+ **/
+LassoNode* lasso_saml_statement_abstract_new(const xmlChar *name)
+{
+ LassoNode *node;
+
+ node = LASSO_NODE(g_object_new(LASSO_TYPE_SAML_STATEMENT_ABSTRACT, NULL));
+
+ if (name && *name)
+ LASSO_NODE_GET_CLASS(node)->set_name(node, name);
+
+ return (node);
+}
diff --git a/lasso/xml/saml_statement_abstract.h b/lasso/xml/saml_statement_abstract.h
new file mode 100644
index 00000000..fe50bf78
--- /dev/null
+++ b/lasso/xml/saml_statement_abstract.h
@@ -0,0 +1,61 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_STATEMENT_ABSTRACT_H__
+#define __LASSO_SAML_STATEMENT_ABSTRACT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_SAML_STATEMENT_ABSTRACT (lasso_saml_statement_abstract_get_type())
+#define LASSO_SAML_STATEMENT_ABSTRACT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_STATEMENT_ABSTRACT, LassoSamlStatementAbstract))
+#define LASSO_SAML_STATEMENT_ABSTRACT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_STATEMENT_ABSTRACT, LassoSamlStatementAbstractClass))
+#define LASSO_IS_SAML_STATEMENT_ABSTRACT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_STATEMENT_ABSTRACT))
+#define LASSO_IS_SAML_STATEMENT_ABSTRACT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_STATEMENT_ABSTRACT))
+#define LASSO_SAML_STATEMENT_ABSTRACT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_STATEMENT_ABSTRACT, LassoSamlStatementAbstractClass))
+
+typedef struct _LassoSamlStatementAbstract LassoSamlStatementAbstract;
+typedef struct _LassoSamlStatementAbstractClass LassoSamlStatementAbstractClass;
+
+struct _LassoSamlStatementAbstract {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlStatementAbstractClass {
+ LassoNodeClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_saml_statement_abstract_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_statement_abstract_new(const xmlChar *name);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_STATEMENT_ABSTRACT_H__ */
diff --git a/lasso/xml/saml_subject.c b/lasso/xml/saml_subject.c
new file mode 100644
index 00000000..9e5d9679
--- /dev/null
+++ b/lasso/xml/saml_subject.c
@@ -0,0 +1,119 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_subject.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="Subject" type="saml:SubjectType"/>
+<complexType name="SubjectType">
+ <choice>
+ <sequence>
+ <element ref="saml:NameIdentifier"/>
+ <element ref="saml:SubjectConfirmation" minOccurs="0"/>
+ </sequence>
+ <element ref="saml:SubjectConfirmation"/>
+ </choice>
+</complexType>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_saml_subject_set_nameIdentifier(LassoSamlSubject *node,
+ LassoSamlNameIdentifier *nameIdentifier)
+{
+ g_assert(LASSO_IS_SAML_SUBJECT(node));
+ g_assert(LASSO_IS_SAML_NAME_IDENTIFIER(nameIdentifier));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(nameIdentifier), FALSE);
+}
+
+void
+lasso_saml_subject_set_subjectConfirmation(LassoSamlSubject *node,
+ LassoSamlSubjectConfirmation *subjectConfirmation)
+{
+ g_assert(LASSO_IS_SAML_SUBJECT(node));
+ g_assert(LASSO_IS_SAML_SUBJECT_CONFIRMATION(subjectConfirmation));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE (subjectConfirmation), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_subject_instance_init(LassoSamlSubject *instance,
+ LassoSamlSubjectClass *klass) {
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "Subject");
+}
+
+static void
+lasso_saml_subject_class_init(LassoSamlSubjectClass *klass) {
+}
+
+GType lasso_saml_subject_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlSubjectClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_subject_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlSubject),
+ 0,
+ (GInstanceInitFunc) lasso_saml_subject_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlSubject",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_subject_new:
+ *
+ * Creates a new <saml:Subject> node object.
+ *
+ * Return value: the new @LassoSamlSubject
+ **/
+LassoNode* lasso_saml_subject_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAML_SUBJECT, NULL));
+}
diff --git a/lasso/xml/saml_subject.h b/lasso/xml/saml_subject.h
new file mode 100644
index 00000000..9b062c7a
--- /dev/null
+++ b/lasso/xml/saml_subject.h
@@ -0,0 +1,68 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_SUBJECT_H__
+#define __LASSO_SAML_SUBJECT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+#include <lasso/xml/saml_name_identifier.h>
+#include <lasso/xml/saml_subject_confirmation.h>
+
+#define LASSO_TYPE_SAML_SUBJECT (lasso_saml_subject_get_type())
+#define LASSO_SAML_SUBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_SUBJECT, LassoSamlSubject))
+#define LASSO_SAML_SUBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_SUBJECT, LassoSamlSubjectClass))
+#define LASSO_IS_SAML_SUBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_SUBJECT))
+#define LASSO_IS_SAML_SUBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_SUBJECT))
+#define LASSO_SAML_SUBJECT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_SUBJECT, LassoSamlSubjectClass))
+
+typedef struct _LassoSamlSubject LassoSamlSubject;
+typedef struct _LassoSamlSubjectClass LassoSamlSubjectClass;
+
+struct _LassoSamlSubject {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlSubjectClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_saml_subject_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_subject_new(void);
+
+LASSO_EXPORT void lasso_saml_subject_set_nameIdentifier (LassoSamlSubject *node,
+ LassoSamlNameIdentifier *nameIdentifier);
+
+LASSO_EXPORT void lasso_saml_subject_set_subjectConfirmation (LassoSamlSubject *node,
+ LassoSamlSubjectConfirmation *subjectConfirmation);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_SUBJECT_H__ */
diff --git a/lasso/xml/saml_subject_confirmation.c b/lasso/xml/saml_subject_confirmation.c
new file mode 100644
index 00000000..86d1ea87
--- /dev/null
+++ b/lasso/xml/saml_subject_confirmation.c
@@ -0,0 +1,124 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_subject_confirmation.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="SubjectConfirmation" type="saml:SubjectConfirmationType"/>
+<complexType name="SubjectConfirmationType">
+ <sequence>
+ <element ref="saml:ConfirmationMethod" maxOccurs="unbounded"/>
+ <element ref="saml:SubjectConfirmationData" minOccurs="0"/>
+ <element ref="ds:KeyInfo" minOccurs="0"/>
+ </sequence>
+</complexType>
+
+<element name="SubjectConfirmationData" type="anyType"/>
+<element name="ConfirmationMethod" type="anyURI"/>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_saml_subject_confirmation_add_confirmationMethod(LassoSamlSubjectConfirmation *node,
+ const xmlChar *confirmationMethod)
+{
+ g_assert(LASSO_IS_SAML_SUBJECT_CONFIRMATION(node));
+ g_assert(confirmationMethod != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node),
+ "ConfirmationMethod", confirmationMethod, TRUE);
+}
+
+void
+lasso_saml_subject_confirmation_set_subjectConfirmationMethod(LassoSamlSubjectConfirmation *node,
+ const xmlChar *subjectConfirmationMethod)
+{
+ g_assert(LASSO_IS_SAML_SUBJECT_CONFIRMATION(node));
+ g_assert(subjectConfirmationMethod != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node),
+ "SubjectConfirmationMethod", subjectConfirmationMethod,
+ FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_subject_confirmation_instance_init(LassoSamlSubjectConfirmation *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "SubjectConfirmation");
+}
+
+static void
+lasso_saml_subject_confirmation_class_init(LassoSamlSubjectConfirmationClass *klass)
+{
+}
+
+GType lasso_saml_subject_confirmation_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlSubjectConfirmationClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_subject_confirmation_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlSubjectConfirmation),
+ 0,
+ (GInstanceInitFunc) lasso_saml_subject_confirmation_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlSubjectConfirmation",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_subject_confirmation_new:
+ *
+ * Creates a new <saml:SubjectConfirmation> node object.
+ *
+ * Return value: the new @LassoSamlSubjectConfirmation
+ **/
+LassoNode* lasso_saml_subject_confirmation_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAML_SUBJECT_CONFIRMATION, NULL));
+}
diff --git a/lasso/xml/saml_subject_confirmation.h b/lasso/xml/saml_subject_confirmation.h
new file mode 100644
index 00000000..cecbaf13
--- /dev/null
+++ b/lasso/xml/saml_subject_confirmation.h
@@ -0,0 +1,67 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_SUBJECT_CONFIRMATION_H__
+#define __LASSO_SAML_SUBJECT_CONFIRMATION_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_SAML_SUBJECT_CONFIRMATION (lasso_saml_subject_confirmation_get_type())
+#define LASSO_SAML_SUBJECT_CONFIRMATION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_SUBJECT_CONFIRMATION, LassoSamlSubjectConfirmation))
+#define LASSO_SAML_SUBJECT_CONFIRMATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_SUBJECT_CONFIRMATION, LassoSamlSubjectConfirmationClass))
+#define LASSO_IS_SAML_SUBJECT_CONFIRMATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_SUBJECT_CONFIRMATION))
+#define LASSO_IS_SAML_SUBJECT_CONFIRMATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_SUBJECT_CONFIRMATION))
+#define LASSO_SAML_SUBJECT_CONFIRMATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_SUBJECT_CONFIRMATION, LassoSamlSubjectConfirmationClass))
+
+typedef struct _LassoSamlSubjectConfirmation LassoSamlSubjectConfirmation;
+typedef struct _LassoSamlSubjectConfirmationClass LassoSamlSubjectConfirmationClass;
+
+struct _LassoSamlSubjectConfirmation {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlSubjectConfirmationClass {
+ LassoNodeClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_saml_subject_confirmation_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_subject_confirmation_new(void);
+
+LASSO_EXPORT void lasso_saml_subject_confirmation_add_confirmationMethod (LassoSamlSubjectConfirmation *node,
+ const xmlChar *confirmationMethod);
+
+LASSO_EXPORT void lasso_saml_subject_confirmation_set_subjectConfirmationMethod (LassoSamlSubjectConfirmation *node,
+ const xmlChar *subjectConfirmationMethod);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_SUBJECT_CONFIRMATION_H__ */
diff --git a/lasso/xml/saml_subject_locality.c b/lasso/xml/saml_subject_locality.c
new file mode 100644
index 00000000..5311e2d6
--- /dev/null
+++ b/lasso/xml/saml_subject_locality.c
@@ -0,0 +1,115 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_subject_locality.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="SubjectLocality" type="saml:SubjectLocalityType"/>
+<complexType name="SubjectLocalityType">
+ <attribute name="IPAddress" type="string" use="optional"/>
+ <attribute name="DNSAddress" type="string" use="optional"/>
+</complexType>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_saml_subject_locality_set_dnsAddress(LassoSamlSubjectLocality *node,
+ const xmlChar *dnsAddress)
+{
+ g_assert(LASSO_IS_SAML_SUBJECT_LOCALITY(node));
+ g_assert(dnsAddress != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "DNSAddress", dnsAddress);
+}
+
+void
+lasso_saml_subject_locality_set_ipAddress(LassoSamlSubjectLocality *node,
+ const xmlChar *ipAddress)
+{
+ g_assert(LASSO_IS_SAML_SUBJECT_LOCALITY(node));
+ g_assert(ipAddress != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "IPAddress", ipAddress);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_subject_locality_instance_init(LassoSamlSubjectLocality *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "SubjectLocality");
+}
+
+static void
+lasso_saml_subject_locality_class_init(LassoSamlSubjectLocalityClass *klass)
+{
+}
+
+GType lasso_saml_subject_locality_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlSubjectLocalityClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_subject_locality_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlSubjectLocality),
+ 0,
+ (GInstanceInitFunc) lasso_saml_subject_locality_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlSubjectLocality",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_subject_locality_new:
+ *
+ * Creates a new <saml:SubjectLocality> node object.
+ *
+ * Return value: the new @LassoSamlSubjectLocality
+ **/
+LassoNode* lasso_saml_subject_locality_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAML_SUBJECT_LOCALITY, NULL));
+}
diff --git a/lasso/xml/saml_subject_locality.h b/lasso/xml/saml_subject_locality.h
new file mode 100644
index 00000000..6fdde332
--- /dev/null
+++ b/lasso/xml/saml_subject_locality.h
@@ -0,0 +1,67 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_SUBJECT_LOCALITY_H__
+#define __LASSO_SAML_SUBJECT_LOCALITY_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_SAML_SUBJECT_LOCALITY (lasso_saml_subject_locality_get_type())
+#define LASSO_SAML_SUBJECT_LOCALITY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_SUBJECT_LOCALITY, LassoSamlSubjectLocality))
+#define LASSO_SAML_SUBJECT_LOCALITY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_SUBJECT_LOCALITY, LassoSamlSubjectLocalityClass))
+#define LASSO_IS_SAML_SUBJECT_LOCALITY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_SUBJECT_LOCALITY))
+#define LASSO_IS_SAML_SUBJECT_LOCALITY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_SUBJECT_LOCALITY))
+#define LASSO_SAML_SUBJECT_LOCALITY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_SUBJECT_LOCALITY, LassoSamlSubjectLocalityClass))
+
+typedef struct _LassoSamlSubjectLocality LassoSamlSubjectLocality;
+typedef struct _LassoSamlSubjectLocalityClass LassoSamlSubjectLocalityClass;
+
+struct _LassoSamlSubjectLocality {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlSubjectLocalityClass {
+ LassoNodeClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_saml_subject_locality_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_subject_locality_new(void);
+
+LASSO_EXPORT void lasso_saml_subject_locality_set_dnsAddress (LassoSamlSubjectLocality *node,
+ const xmlChar *dnsAddress);
+
+LASSO_EXPORT void lasso_saml_subject_locality_set_ipAddress (LassoSamlSubjectLocality *node,
+ const xmlChar *ipAddress);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_SUBJECT_LOCALITY_H__ */
diff --git a/lasso/xml/saml_subject_statement_abstract.c b/lasso/xml/saml_subject_statement_abstract.c
new file mode 100644
index 00000000..dffb087d
--- /dev/null
+++ b/lasso/xml/saml_subject_statement_abstract.c
@@ -0,0 +1,119 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Samlerty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/saml_subject_statement_abstract.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-assertion-1.0.xsd):
+
+<element name="SubjectStatement" type="saml:SubjectStatementAbstractType"/>
+<complexType name="SubjectStatementAbstractType" abstract="true">
+ <complexContent>
+ <extension base="saml:StatementAbstractType">
+ <sequence>
+ <element ref="saml:Subject"/>
+ </sequence>
+ </extension>
+ </complexContent>
+</complexType>
+*/
+
+/*****************************************************************************/
+/* publics methods */
+/*****************************************************************************/
+
+void
+lasso_saml_subject_statement_abstract_set_subject(LassoSamlSubjectStatementAbstract *node,
+ LassoSamlSubject *subject)
+{
+ g_assert(LASSO_IS_SAML_SUBJECT_STATEMENT_ABSTRACT(node));
+ g_assert(LASSO_IS_SAML_SUBJECT(subject));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(subject), FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_saml_subject_statement_abstract_instance_init(LassoSamlSubjectStatementAbstract *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ // namespace is herited from StatementAbstract
+ //class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:assertion", "saml");
+ class->set_name(node, "SubjectStatementAbstract");
+}
+
+static void
+lasso_saml_subject_statement_abstract_class_init(LassoSamlSubjectStatementAbstractClass *klass)
+{
+}
+
+GType lasso_saml_subject_statement_abstract_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlSubjectStatementAbstractClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_saml_subject_statement_abstract_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlSubjectStatementAbstract),
+ 0,
+ (GInstanceInitFunc) lasso_saml_subject_statement_abstract_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_SAML_STATEMENT_ABSTRACT,
+ "LassoSamlSubjectStatementAbstract",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+/**
+ * lasso_saml_subject_statement_abstract_new:
+ * @name: the node's name. If @name is NULL or an empty string, default value
+ * "SubjectStatementAbstract" will be used.
+ *
+ * Creates a new <saml:SubjectStatementAbstract> node object.
+ *
+ * Return value: the new @LassoSamlSubjectStatementAbstract
+ **/
+LassoNode* lasso_saml_subject_statement_abstract_new(const xmlChar *name)
+{
+ LassoNode *node;
+
+ node = LASSO_NODE(g_object_new(LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT, NULL));
+
+ if (name && *name)
+ LASSO_NODE_GET_CLASS(node)->set_name(node, name);
+
+ return (node);
+}
diff --git a/lasso/xml/saml_subject_statement_abstract.h b/lasso/xml/saml_subject_statement_abstract.h
new file mode 100644
index 00000000..d324363a
--- /dev/null
+++ b/lasso/xml/saml_subject_statement_abstract.h
@@ -0,0 +1,65 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_H__
+#define __LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/saml_statement_abstract.h>
+#include <lasso/xml/saml_subject.h>
+
+#define LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT (lasso_saml_subject_statement_abstract_get_type())
+#define LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT, LassoSamlSubjectStatementAbstract))
+#define LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT, LassoSamlSubjectStatementAbstractClass))
+#define LASSO_IS_SAML_SUBJECT_STATEMENT_ABSTRACT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT))
+#define LASSO_IS_SAML_SUBJECT_STATEMENT_ABSTRACT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT))
+#define LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAML_SUBJECT_STATEMENT_ABSTRACT, LassoSamlSubjectStatementAbstractClass))
+
+typedef struct _LassoSamlSubjectStatementAbstract LassoSamlSubjectStatementAbstract;
+typedef struct _LassoSamlSubjectStatementAbstractClass LassoSamlSubjectStatementAbstractClass;
+
+struct _LassoSamlSubjectStatementAbstract {
+ LassoSamlStatementAbstract parent;
+ /*< private >*/
+};
+
+struct _LassoSamlSubjectStatementAbstractClass {
+ LassoSamlStatementAbstractClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_saml_subject_statement_abstract_get_type(void);
+LASSO_EXPORT LassoNode* lasso_saml_subject_statement_abstract_new(const xmlChar *name);
+
+LASSO_EXPORT void lasso_saml_subject_statement_abstract_set_subject (LassoSamlSubjectStatementAbstract *node,
+ LassoSamlSubject *subject);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT_H__ */
diff --git a/lasso/xml/samlp_request_abstract.c b/lasso/xml/samlp_request_abstract.c
new file mode 100644
index 00000000..1484213e
--- /dev/null
+++ b/lasso/xml/samlp_request_abstract.c
@@ -0,0 +1,158 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/samlp_request_abstract.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-protocol-1.0.xsd):
+
+<complexType name="RequestAbstractType" abstract="true">
+ <sequence>
+ <element ref="samlp:RespondWith" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="ds:Signature" minOccurs="0"/>
+ </sequence>
+ <attribute name="RequestID" type="saml:IDType" use="required"/>
+ <attribute name="MajorVersion" type="integer" use="required"/>
+ <attribute name="MinorVersion" type="integer" use="required"/>
+ <attribute name="IssueInstant" type="dateTime" use="required"/>
+</complexType>
+
+<element name="RespondWith" type="QName"/>
+
+From oasis-sstc-saml-schema-assertion-1.0.xsd:
+<simpleType name="IDType">
+ <restriction base="string"/>
+</simpleType>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_samlp_request_abstract_add_respondWith(LassoSamlpRequestAbstract *node,
+ const xmlChar *respondWith)
+{
+ g_assert(LASSO_IS_SAMLP_REQUEST_ABSTRACT(node));
+ g_assert(respondWith != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "RespondWith", respondWith, TRUE);
+}
+
+void
+lasso_samlp_request_abstract_set_issueInstance(LassoSamlpRequestAbstract *node,
+ const xmlChar *issueInstance) {
+ g_assert(LASSO_IS_SAMLP_REQUEST_ABSTRACT(node));
+ g_assert(issueInstance != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "IssueInstance", issueInstance);
+}
+
+void
+lasso_samlp_request_abstract_set_majorVersion(LassoSamlpRequestAbstract *node,
+ const xmlChar *majorVersion) {
+ g_assert(LASSO_IS_SAMLP_REQUEST_ABSTRACT(node));
+ g_assert(majorVersion != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "MajorVersion", majorVersion);
+}
+
+void
+lasso_samlp_request_abstract_set_minorVersion(LassoSamlpRequestAbstract *node,
+ const xmlChar *minorVersion) {
+ g_assert(LASSO_IS_SAMLP_REQUEST_ABSTRACT(node));
+ g_assert(minorVersion != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "MinorVersion", minorVersion);
+}
+
+/**
+ * lasso_samlp_request_abstract_impl_set_requestID:
+ * @node: the pointer to <Samlp:RequestAbstract/> node
+ * @requestID: the RequestID attribut
+ *
+ * Sets the RequestID attribut (unique)
+ **/
+void
+lasso_samlp_request_abstract_set_requestID(LassoSamlpRequestAbstract *node,
+ const xmlChar *requestID)
+{
+ g_assert(LASSO_IS_SAMLP_REQUEST_ABSTRACT(node));
+ g_assert(requestID != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "RequestID", requestID);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_samlp_request_abstract_instance_init(LassoSamlpRequestAbstract *instance,
+ LassoSamlpRequestAbstractClass *klass) {
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, NULL, "samlp");
+ class->set_name(node, "RequestAbstract");
+}
+
+static void
+lasso_samlp_request_abstract_class_init(LassoSamlpRequestAbstractClass *klass)
+{
+}
+
+GType lasso_samlp_request_abstract_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlpRequestAbstractClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_samlp_request_abstract_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlpRequestAbstract),
+ 0,
+ (GInstanceInitFunc) lasso_samlp_request_abstract_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE ,
+ "LassoSamlpRequestAbstract",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_samlp_request_abstract_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAMLP_REQUEST_ABSTRACT,
+ NULL));
+}
diff --git a/lasso/xml/samlp_request_abstract.h b/lasso/xml/samlp_request_abstract.h
new file mode 100644
index 00000000..b2c4eb2d
--- /dev/null
+++ b/lasso/xml/samlp_request_abstract.h
@@ -0,0 +1,76 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAMLP_REQUEST_ABSTRACT_H__
+#define __LASSO_SAMLP_REQUEST_ABSTRACT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_SAMLP_REQUEST_ABSTRACT (lasso_samlp_request_abstract_get_type())
+#define LASSO_SAMLP_REQUEST_ABSTRACT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, LassoSamlpRequestAbstract))
+#define LASSO_SAMLP_REQUEST_ABSTRACT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, LassoSamlpRequestAbstractClass))
+#define LASSO_IS_SAMLP_REQUEST_ABSTRACT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP_REQUEST_ABSTRACT))
+#define LASSO_IS_SAMLP_REQUEST_ABSTRACT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP_REQUEST_ABSTRACT))
+#define LASSO_SAMLP_REQUEST_ABSTRACT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP_REQUEST_ABSTRACT, LassoSamlpRequestAbstractClass))
+
+typedef struct _LassoSamlpRequestAbstract LassoSamlpRequestAbstract;
+typedef struct _LassoSamlpRequestAbstractClass LassoSamlpRequestAbstractClass;
+
+struct _LassoSamlpRequestAbstract {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlpRequestAbstractClass {
+ LassoNodeClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_samlp_request_abstract_get_type(void);
+LASSO_EXPORT LassoNode* lasso_samlp_request_abstract_new(void);
+
+LASSO_EXPORT void lasso_samlp_request_abstract_add_respondWith (LassoSamlpRequestAbstract *node,
+ const xmlChar *respondWith);
+
+LASSO_EXPORT void lasso_samlp_request_abstract_set_issueInstance (LassoSamlpRequestAbstract *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_samlp_request_abstract_set_majorVersion (LassoSamlpRequestAbstract *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_samlp_request_abstract_set_minorVersion (LassoSamlpRequestAbstract *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_samlp_request_abstract_set_requestID (LassoSamlpRequestAbstract *,
+ const xmlChar *);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAMLP_REQUEST_ABSTRACT_H__ */
diff --git a/lasso/xml/samlp_response.c b/lasso/xml/samlp_response.c
new file mode 100644
index 00000000..144b34e1
--- /dev/null
+++ b/lasso/xml/samlp_response.c
@@ -0,0 +1,114 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/samlp_response.h>
+
+/*
+Schema fragment (oasis-sstc-saml-schema-protocol-1.0.xsd):
+
+<element name="Response" type="samlp:ResponseType"/>
+<complexType name="ResponseType">
+ <complexContent>
+ <extension base="samlp:ResponseAbstractType">
+ <sequence>
+ <element ref="samlp:Status"/>
+ <element ref="saml:Assertion" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </extension>
+ </complexContent>
+</complexType>
+
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_samlp_response_set_status(LassoSamlpResponse *node,
+ LassoSamlpStatus *status)
+{
+ g_assert(LASSO_IS_SAMLP_RESPONSE(node));
+ g_assert(LASSO_IS_SAMLP_STATUS(status));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(status), FALSE);
+}
+
+void
+lasso_samlp_response_add_assertion(LassoSamlpResponse *node,
+ gpointer assertion)
+{
+ g_assert(LASSO_IS_SAMLP_RESPONSE(node));
+ //g_assert(LASSO_IS_SAML_ASSERTION(assertion));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE(assertion), TRUE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_samlp_response_instance_init(LassoSamlpResponse *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, NULL, "samlp");
+ class->set_name(node, "Response");
+}
+
+static void
+lasso_samlp_response_class_init(LassoSamlpResponseClass *klass) {
+}
+
+GType lasso_samlp_response_get_type() {
+ static GType response_type = 0;
+
+ if (!response_type) {
+ static const GTypeInfo response_info = {
+ sizeof (LassoSamlpResponseClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_samlp_response_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlpResponse),
+ 0,
+ (GInstanceInitFunc) lasso_samlp_response_instance_init,
+ };
+
+ response_type = g_type_register_static(LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT ,
+ "LassoSamlpResponse",
+ &response_info, 0);
+ }
+ return response_type;
+}
+
+LassoNode* lasso_samlp_response_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAMLP_RESPONSE, NULL));
+}
diff --git a/lasso/xml/samlp_response.h b/lasso/xml/samlp_response.h
new file mode 100644
index 00000000..09804355
--- /dev/null
+++ b/lasso/xml/samlp_response.h
@@ -0,0 +1,67 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAMLP_RESPONSE_H__
+#define __LASSO_SAMLP_RESPONSE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/samlp_response_abstract.h>
+#include <lasso/xml/samlp_status.h>
+
+#define LASSO_TYPE_SAMLP_RESPONSE (lasso_samlp_response_get_type())
+#define LASSO_SAMLP_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP_RESPONSE, LassoSamlpResponse))
+#define LASSO_SAMLP_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP_RESPONSE, LassoSamlpResponseClass))
+#define LASSO_IS_SAMLP_RESPONSE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP_RESPONSE))
+#define LASSO_IS_SAMLP_RESPONSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP_RESPONSE))
+#define LASSO_SAMLP_RESPONSE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP_RESPONSE, LassoSamlpResponseClass))
+
+typedef struct _LassoSamlpResponse LassoSamlpResponse;
+typedef struct _LassoSamlpResponseClass LassoSamlpResponseClass;
+
+struct _LassoSamlpResponse {
+ LassoSamlpResponseAbstract parent;
+ /*< private >*/
+};
+
+struct _LassoSamlpResponseClass {
+ LassoSamlpResponseAbstractClass parent;
+};
+
+LASSO_EXPORT GType lasso_samlp_response_get_type(void);
+LASSO_EXPORT LassoNode* lasso_samlp_response_new(void);
+
+LASSO_EXPORT void lasso_samlp_response_set_status (LassoSamlpResponse *node,
+ LassoSamlpStatus *status);
+
+LASSO_EXPORT void lasso_samlp_response_add_assertion (LassoSamlpResponse *node,
+ gpointer assertion);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAMLP_RESPONSE_H__ */
diff --git a/lasso/xml/samlp_response_abstract.c b/lasso/xml/samlp_response_abstract.c
new file mode 100644
index 00000000..8f653c50
--- /dev/null
+++ b/lasso/xml/samlp_response_abstract.c
@@ -0,0 +1,180 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/samlp_response_abstract.h>
+
+/*
+The schema fragment (oasis-sstc-saml-schema-protocol-1.0.xsd):
+
+<complexType name="ResponseAbstractType" abstract="true">
+ <sequence>
+ <element ref="ds:Signature" minOccurs="0"/>
+ </sequence>
+ <attribute name="ResponseID" type="saml:IDType" use="required"/>
+ <attribute name="InResponseTo" type="saml:IDReferenceType" use="optional"/>
+ <attribute name="MajorVersion" type="integer" use="required"/>
+ <attribute name="MinorVersion" type="integer" use="required"/>
+ <attribute name="IssueInstant" type="dateTime" use="required"/>
+ <attribute name="Recipient" type="anyURI" use="optional"/>
+</complexType>
+
+From oasis-sstc-saml-schema-assertion-1.0.xsd:
+<simpleType name="IDType">
+ <restriction base="string"/>
+</simpleType>
+<simpleType name="IDReferenceType">
+ <restriction base="string"/>
+</simpleType>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_samlp_response_abstract_set_inResponseTo(LassoSamlpResponseAbstract *node,
+ const xmlChar *inResponseTo)
+{
+ g_assert(LASSO_IS_SAMLP_RESPONSE_ABSTRACT(node));
+ g_assert(inResponseTo != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "InResponseTo", inResponseTo);
+}
+
+void
+lasso_samlp_response_abstract_set_issueInstance(LassoSamlpResponseAbstract *node,
+ const xmlChar *issueInstance)
+{
+ g_assert(LASSO_IS_SAMLP_RESPONSE_ABSTRACT(node));
+ g_assert(issueInstance != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "IssueInstance", issueInstance);
+}
+
+void
+lasso_samlp_response_abstract_set_majorVersion(LassoSamlpResponseAbstract *node,
+ const xmlChar *majorVersion)
+{
+ g_assert(LASSO_IS_SAMLP_RESPONSE_ABSTRACT(node));
+ g_assert(majorVersion != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "MajorVersion", majorVersion);
+}
+
+void
+lasso_samlp_response_abstract_set_minorVersion(LassoSamlpResponseAbstract *node,
+ const xmlChar *minorVersion)
+{
+ g_assert(LASSO_IS_SAMLP_RESPONSE_ABSTRACT(node));
+ g_assert(minorVersion != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "MinorVersion", minorVersion);
+}
+
+void
+lasso_samlp_response_abstract_set_recipient(LassoSamlpResponseAbstract *node,
+ const xmlChar *recipient)
+{
+ g_assert(LASSO_IS_SAMLP_RESPONSE_ABSTRACT(node));
+ g_assert(recipient != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "Recipient", recipient);
+}
+
+/**
+ * lasso_samlp_response_abstract_set_responseId:
+ * @node: the pointer to <Samlp:ResponseAbstract/> node
+ * @responseId: the ResponseID attribut
+ *
+ * Sets the ResponseID attribut (unique)
+ **/
+void
+lasso_samlp_response_abstract_set_responseID(LassoSamlpResponseAbstract *node,
+ const xmlChar *responseID)
+{
+ g_assert(LASSO_IS_SAMLP_RESPONSE_ABSTRACT(node));
+ g_assert(responseID != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "ResponseID", responseID);
+}
+
+/* TODO
+ void
+ lasso_samlp_response_abstract_set_signature(LassoSamlpResponseAbstract *node)
+{
+}
+*/
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_samlp_response_abstract_instance_init(LassoSamlpResponseAbstract *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, NULL, "samlp");
+ class->set_name(node, "ResponseAbstract");
+}
+
+static void
+lasso_samlp_response_abstract_class_init(LassoSamlpResponseAbstractClass *klass)
+{
+}
+
+GType lasso_samlp_response_abstract_get_type() {
+ static GType response_abstract_type = 0;
+
+ if (!response_abstract_type) {
+ static const GTypeInfo response_abstract_info = {
+ sizeof (LassoSamlpResponseAbstractClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_samlp_response_abstract_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlpResponseAbstract),
+ 0,
+ (GInstanceInitFunc) lasso_samlp_response_abstract_instance_init,
+ };
+
+ response_abstract_type = g_type_register_static(LASSO_TYPE_NODE ,
+ "LassoSamlpResponseAbstract",
+ &response_abstract_info, 0);
+ }
+ return response_abstract_type;
+}
+
+LassoNode* lasso_samlp_response_abstract_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT, NULL));
+}
diff --git a/lasso/xml/samlp_response_abstract.h b/lasso/xml/samlp_response_abstract.h
new file mode 100644
index 00000000..8e6c2d23
--- /dev/null
+++ b/lasso/xml/samlp_response_abstract.h
@@ -0,0 +1,79 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAMLP_RESPONSE_ABSTRACT_H__
+#define __LASSO_SAMLP_RESPONSE_ABSTRACT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT (lasso_samlp_response_abstract_get_type())
+#define LASSO_SAMLP_RESPONSE_ABSTRACT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT, LassoSamlpResponseAbstract))
+#define LASSO_SAMLP_RESPONSE_ABSTRACT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT, LassoSamlpResponseAbstractClass))
+#define LASSO_IS_SAMLP_RESPONSE_ABSTRACT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT))
+#define LASSO_IS_SAMLP_RESPONSE_ABSTRACT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT))
+#define LASSO_SAMLP_RESPONSE_ABSTRACT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP_RESPONSE_ABSTRACT, LassoSamlpResponseAbstractClass))
+
+typedef struct _LassoSamlpResponseAbstract LassoSamlpResponseAbstract;
+typedef struct _LassoSamlpResponseAbstractClass LassoSamlpResponseAbstractClass;
+
+struct _LassoSamlpResponseAbstract {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlpResponseAbstractClass {
+ LassoNodeClass parent;
+ /*< vtable >*/
+};
+
+LASSO_EXPORT GType lasso_samlp_response_abstract_get_type(void);
+LASSO_EXPORT LassoNode* lasso_samlp_response_abstract_new(void);
+
+LASSO_EXPORT void lasso_samlp_response_abstract_set_inResponseTo (LassoSamlpResponseAbstract *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_samlp_response_abstract_set_issueInstance (LassoSamlpResponseAbstract *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_samlp_response_abstract_set_majorVersion (LassoSamlpResponseAbstract *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_samlp_response_abstract_set_minorVersion (LassoSamlpResponseAbstract *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_samlp_response_abstract_set_recipient (LassoSamlpResponseAbstract *,
+ const xmlChar *);
+
+LASSO_EXPORT void lasso_samlp_response_abstract_set_responseID (LassoSamlpResponseAbstract *,
+ const xmlChar *);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAMLP_RESPONSE_ABSTRACT_H__ */
diff --git a/lasso/xml/samlp_status.c b/lasso/xml/samlp_status.c
new file mode 100644
index 00000000..b66e8bea
--- /dev/null
+++ b/lasso/xml/samlp_status.c
@@ -0,0 +1,120 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/samlp_status.h>
+
+/*
+Schema fragment (oasis-sstc-saml-schema-protocol-1.0.xsd):
+
+<element name="Status" type="samlp:StatusType"/>
+<complexType name="StatusType">
+ <sequence>
+ <element ref="samlp:StatusCode"/>
+ <element ref="samlp:StatusMessage" minOccurs="0" maxOccurs="1"/>
+ <element ref="samlp:StatusDetail" minOccurs="0"/>
+ </sequence>
+</complexType>
+
+<element name="StatusMessage" type="string"/>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_samlp_status_set_statusCode(LassoSamlpStatus *node,
+ LassoSamlpStatusCode *statusCode) {
+ g_assert(LASSO_IS_SAMLP_STATUS(node));
+ g_assert(LASSO_IS_SAMLP_STATUS_CODE(statusCode));
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(LASSO_NODE (node), LASSO_NODE (statusCode), FALSE);
+}
+
+/* TODO
+void
+lasso_samlp_status_set_statusDetail(LassoSamlpStatus *node,
+ LassoSamlpStatusDetail *statusDetail)
+{
+}
+*/
+
+void
+lasso_samlp_status_set_statusMessage(LassoSamlpStatus *node,
+ const xmlChar *statusMessage)
+{
+ g_assert(LASSO_IS_SAMLP_STATUS(node));
+ g_assert(statusMessage != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_child(LASSO_NODE (node), "StatusMessage", statusMessage, FALSE);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_samlp_status_instance_init(LassoSamlpStatus *instance)
+{
+ LassoNode *node = (LassoNode *)instance;
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, "urn:oasis:names:tc:SAML:1.0:protocol", "samlp");
+ class->set_name(node, "Status");
+}
+
+static void
+lasso_samlp_status_class_init(LassoSamlpStatusClass *klass)
+{
+}
+
+GType lasso_samlp_status_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlpStatusClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_samlp_status_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlpStatus),
+ 0,
+ (GInstanceInitFunc) lasso_samlp_status_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlpStatus",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_samlp_status_new() {
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAMLP_STATUS,
+ NULL));
+}
diff --git a/lasso/xml/samlp_status.h b/lasso/xml/samlp_status.h
new file mode 100644
index 00000000..20535b24
--- /dev/null
+++ b/lasso/xml/samlp_status.h
@@ -0,0 +1,72 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAMLP_STATUS_H__
+#define __LASSO_SAMLP_STATUS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+#include <lasso/xml/samlp_status_code.h>
+
+#define LASSO_TYPE_SAMLP_STATUS (lasso_samlp_status_get_type())
+#define LASSO_SAMLP_STATUS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP_STATUS, LassoSamlpStatus))
+#define LASSO_SAMLP_STATUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP_STATUS, LassoSamlpStatusClass))
+#define LASSO_IS_SAMLP_STATUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP_STATUS))
+#define LASSO_IS_SAMLP_STATUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP_STATUS))
+#define LASSO_SAMLP_STATUS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP_STATUS, LassoSamlpStatusClass))
+
+typedef struct _LassoSamlpStatus LassoSamlpStatus;
+typedef struct _LassoSamlpStatusClass LassoSamlpStatusClass;
+
+struct _LassoSamlpStatus {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlpStatusClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_samlp_status_get_type(void);
+LASSO_EXPORT LassoNode* lasso_samlp_status_new(void);
+
+LASSO_EXPORT void lasso_samlp_status_set_statusCode (LassoSamlpStatus *node,
+ LassoSamlpStatusCode *statusCode);
+
+/* TODO
+LASSO_EXPORT void lasso_samlp_status_set_statusDetail(LassoSamlpStatus *node,
+LassoSamlpStatusDetail *statusDetail);
+*/
+
+LASSO_EXPORT void lasso_samlp_status_set_statusMessage (LassoSamlpStatus *node,
+ const xmlChar *statusMessage);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAMLP_STATUS_H__ */
diff --git a/lasso/xml/samlp_status_code.c b/lasso/xml/samlp_status_code.c
new file mode 100644
index 00000000..69ec6cbd
--- /dev/null
+++ b/lasso/xml/samlp_status_code.c
@@ -0,0 +1,99 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/samlp_status_code.h>
+
+/*
+Schema fragment (oasis-sstc-saml-schema-protocol-1.0.xsd):
+
+<element name="StatusCode" type="samlp:StatusCodeType"/>
+<complexType name="StatusCodeType">
+ <sequence>
+ <element ref="samlp:StatusCode" minOccurs="0"/>
+ </sequence>
+ <attribute name="Value" type="QName" use="required"/>
+</complexType>
+*/
+
+/*****************************************************************************/
+/* public methods */
+/*****************************************************************************/
+
+void
+lasso_samlp_status_code_set_value(LassoSamlpStatusCode *node,
+ const xmlChar *value) {
+
+ g_assert(LASSO_IS_SAMLP_STATUS_CODE(node));
+ g_assert(value != NULL);
+
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(LASSO_NODE (node), "Value", value);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_samlp_status_code_instance_init(LassoSamlpStatusCode *instance)
+{
+ LassoNode *node = (LassoNode *)instance;
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+
+ class->new_ns(node, NULL, "samlp");
+ class->set_name(node, "StatusCode");
+}
+
+static void
+lasso_samlp_status_code_class_init(LassoSamlpStatusCodeClass *klass)
+{
+}
+
+GType lasso_samlp_status_code_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoSamlpStatusCodeClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_samlp_status_code_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoSamlpStatusCode),
+ 0,
+ (GInstanceInitFunc) lasso_samlp_status_code_instance_init,
+ };
+
+ this_type = g_type_register_static(LASSO_TYPE_NODE,
+ "LassoSamlpStatusCode",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_samlp_status_code_new()
+{
+ return LASSO_NODE(g_object_new(LASSO_TYPE_SAMLP_STATUS_CODE, NULL));
+}
diff --git a/lasso/xml/samlp_status_code.h b/lasso/xml/samlp_status_code.h
new file mode 100644
index 00000000..270b6976
--- /dev/null
+++ b/lasso/xml/samlp_status_code.h
@@ -0,0 +1,63 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_SAMLP_STATUS_CODE_H__
+#define __LASSO_SAMLP_STATUS_CODE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/xml.h>
+
+#define LASSO_TYPE_SAMLP_STATUS_CODE (lasso_samlp_status_code_get_type())
+#define LASSO_SAMLP_STATUS_CODE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SAMLP_STATUS_CODE, LassoSamlpStatusCode))
+#define LASSO_SAMLP_STATUS_CODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_SAMLP_STATUS_CODE, LassoSamlpStatusCodeClass))
+#define LASSO_IS_SAMLP_STATUS_CODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_SAMLP_STATUS_CODE))
+#define LASSO_IS_SAMLP_STATUS_CODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_SAMLP_STATUS_CODE))
+#define LASSO_SAMLP_STATUS_CODE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_SAMLP_STATUS_CODE, LassoSamlpStatusCodeClass))
+
+typedef struct _LassoSamlpStatusCode LassoSamlpStatusCode;
+typedef struct _LassoSamlpStatusCodeClass LassoSamlpStatusCodeClass;
+
+struct _LassoSamlpStatusCode {
+ LassoNode parent;
+ /*< private >*/
+};
+
+struct _LassoSamlpStatusCodeClass {
+ LassoNodeClass parent;
+};
+
+LASSO_EXPORT GType lasso_samlp_status_code_get_type(void);
+LASSO_EXPORT LassoNode* lasso_samlp_status_code_new(void);
+
+LASSO_EXPORT void lasso_samlp_status_code_set_value (LassoSamlpStatusCode *node,
+ const xmlChar *value);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_SAMLP_STATUS_CODE_H__ */
diff --git a/lasso/xml/strings.c b/lasso/xml/strings.c
new file mode 100644
index 00000000..74d4eb17
--- /dev/null
+++ b/lasso/xml/strings.c
@@ -0,0 +1,45 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/lasso.h>
+
+/* NameIDPolicyType */
+const gchar lassoLibNameIDPolicyTypeNone[] = "none";
+const gchar lassoLibNameIDPolicyTypeOneTime[] = "onetime";
+const gchar lassoLibNameIDPolicyTypeFederated[] = "federated";
+const gchar lassoLibNameIDPolicyTypeAny[] = "any";
+
+/* AuthnContextComparison */
+const gchar lassoLibAuthnContextComparisonExact[] = "exact";
+const gchar lassoLibAuthnContextComparisonMinimum[] = "minimum";
+const gchar lassoLibAuthnContextComparisonBetter[] = "better";
+
+/* Lib versioning */
+const gchar lassoLibMajorVersion[] = "1";
+const gchar lassoLibMinorVersion[] = "2";
+
+/* Saml versioning */
+const gchar lassoSamlMajorVersion[] = "1";
+const gchar lassoSamlMinorVersion[] = "0";
+
diff --git a/lasso/xml/strings.h b/lasso/xml/strings.h
new file mode 100644
index 00000000..53887e69
--- /dev/null
+++ b/lasso/xml/strings.h
@@ -0,0 +1,58 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_STRINGS_H__
+#define __LASSO_STRINGS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/export.h>
+#include <glib-object.h>
+
+/* NameIDPolicyType */
+LASSO_EXPORT_VAR const gchar lassoLibNameIDPolicyTypeNone[];
+LASSO_EXPORT_VAR const gchar lassoLibNameIDPolicyTypeOneTime[];
+LASSO_EXPORT_VAR const gchar lassoLibNameIDPolicyTypeFederated[];
+LASSO_EXPORT_VAR const gchar lassoLibNameIDPolicyTypeAny[];
+
+/* AuthnContextComparison */
+LASSO_EXPORT_VAR const gchar lassoLibAuthnContextComparisonExact[];
+LASSO_EXPORT_VAR const gchar lassoLibAuthnContextComparisonMinimum[];
+LASSO_EXPORT_VAR const gchar lassLibAuthnContextComparisonBetter[];
+
+/* Lib versioning */
+LASSO_EXPORT_VAR const gchar lassoLibMajorVersion[];
+LASSO_EXPORT_VAR const gchar lassoLibMinorVersion[];
+
+/* Saml versioning */
+LASSO_EXPORT_VAR const gchar lassoSamlMajorVersion[];
+LASSO_EXPORT_VAR const gchar lassoSamlMinorVersion[];
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_STRINGS_H__ */
diff --git a/lasso/xml/tools.c b/lasso/xml/tools.c
new file mode 100644
index 00000000..6f16b072
--- /dev/null
+++ b/lasso/xml/tools.c
@@ -0,0 +1,323 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/tools.h>
+
+xmlChar *
+lasso_build_unique_id(guint8 size)
+{
+ // The probability of 2 randomly chosen identifiers being identical MUST be
+ // less than 2^-128 and SHOULD be less than 2^-160.
+ // so we must have 128 <= exp <= 160
+ // we could build a 128-bit binary number but hexa system is shorter
+ // 32 <= hexa number size <= 48
+ int i, val;
+ xmlChar *id, *enc_id;
+
+ if (size == 0) size = 32;
+ id = g_malloc(size+1);
+
+ // build hex number (<= 2^exp-1)
+ for (i=0; i<size; i++) {
+ val = g_random_int_range(0, 16);
+ if (val < 10)
+ id[i] = 48 + val;
+ else
+ id[i] = 65 + val-10;
+ }
+ id[size] = '\0';
+
+ // base64 encoding of build string
+ enc_id = xmlSecBase64Encode(id, size, 0);
+
+ g_free(id);
+ return (enc_id);
+}
+
+xmlChar *
+lasso_doc_get_node_content(xmlDocPtr doc, const xmlChar *name)
+{
+ xmlNodePtr node;
+
+ node = xmlSecFindNode(xmlDocGetRootElement(doc), name, xmlSecDSigNs);
+ if (node != NULL)
+ /* val returned must be xmlFree() */
+ return (xmlNodeGetContent(node));
+ else
+ return (NULL);
+}
+
+xmlChar*
+lasso_g_ptr_array_index(GPtrArray *a, guint i)
+{
+ if (a != NULL) {
+ return (g_ptr_array_index(a, i));
+ }
+ else {
+ return (NULL);
+ }
+}
+
+xmlChar *
+lasso_get_current_time()
+{
+ struct tm *tm;
+ GTimeVal time_val;
+ xmlChar *ret = g_malloc(21);
+
+ g_get_current_time(&time_val);
+ tm = localtime(&(time_val.tv_sec));
+ strftime(ret, 21, "%FT%TZ", tm);
+
+ return (ret);
+}
+
+/**
+ * lasso_query_to_dict:
+ * @query: the query part of the 'url-encoded + signed' message
+ *
+ * Split query (& char) and build a dictonary with key=value
+ * value is a GPtrArray.
+ * The caller is responsible for freeing returned object by calling
+ * g_datalist_clear() function.
+ *
+ * Return value: a dictonary
+ **/
+GData *
+lasso_query_to_dict(const xmlChar *query)
+{
+ GData *gd;
+ gchar **sa1, **sa2, **sa3;
+
+ GPtrArray *gpa;
+ guint i, j;
+
+ g_datalist_init(&gd);
+
+ sa1 = g_strsplit(query, "&", 0);
+
+ i = 0;
+ while (sa1[i++] != NULL) {
+ /* split of key=value to get (key, value) sub-strings */
+ sa2 = g_strsplit(lasso_str_unescape(sa1[i-1]), "=", 0);
+ //printf("%s => ", sa2[0]);
+ /* split of value to get mutli values sub-strings separated by SPACE char */
+ sa3 = g_strsplit(lasso_str_unescape(sa2[1]), " ", 0);
+ gpa = g_ptr_array_new();
+ j = 0;
+ while (sa3[j++] != NULL) {
+ g_ptr_array_add(gpa, sa3[j-1]);
+ //printf("%s, ", sa3[j-1]);
+ }
+ // add key => values in dict
+ g_datalist_set_data(&gd, sa2[0], gpa);
+ //printf("\n");
+ //g_strfreev(sa3);
+ //g_strfreev(sa2);
+ }
+
+ g_strfreev(sa1);
+ return (gd);
+}
+
+xmlChar *
+lasso_str_escape(xmlChar *str)
+{
+ /* value returned must be xmlFree() */
+ return (xmlURIEscapeStr((const xmlChar *)str, NULL));
+}
+
+xmlDocPtr
+lasso_str_sign(xmlChar *str,
+ xmlSecTransformId signMethodId,
+ const char* key_file)
+{
+ xmlDocPtr doc = xmlNewDoc("1.0");
+ xmlNodePtr cur;
+ xmlNodePtr envelope = xmlNewNode(NULL, "Envelope");
+ xmlNodePtr cdata, data = xmlNewNode(NULL, "Data");
+ xmlNodePtr signNode = NULL;
+ xmlNodePtr refNode = NULL;
+ xmlNodePtr keyInfoNode = NULL;
+ xmlSecDSigCtxPtr dsigCtx = NULL;
+
+ /* create doc */
+ xmlNewNs(envelope, "urn:envelope", NULL);
+ cdata = xmlNewCDataBlock(doc, str, strlen(str));
+ xmlAddChild(envelope, data);
+ xmlAddChild(data, cdata);
+ xmlAddChild((xmlNodePtr)doc, envelope);
+
+ /* create signature template for enveloped signature */
+ signNode = xmlSecTmplSignatureCreate(doc, xmlSecTransformExclC14NId,
+ signMethodId, NULL);
+ if(signNode == NULL) {
+ fprintf(stderr, "Error: failed to create signature template\n");
+ goto done;
+ }
+
+ /* add <dsig:Signature/> node to the doc */
+ xmlAddChild(xmlDocGetRootElement(doc), signNode);
+
+ /* add reference */
+ refNode = xmlSecTmplSignatureAddReference(signNode, xmlSecTransformSha1Id,
+ NULL, NULL, NULL);
+ if(refNode == NULL) {
+ fprintf(stderr, "Error: failed to add reference to signature template\n");
+ goto done;
+ }
+
+ /* add enveloped transform */
+ if(xmlSecTmplReferenceAddTransform(refNode, xmlSecTransformEnvelopedId) == NULL) {
+ fprintf(stderr, "Error: failed to add enveloped transform to reference\n");
+ goto done;
+ }
+
+ /* add <dsig:KeyInfo/> and <dsig:KeyName/> nodes to put key name in the
+ signed document */
+ keyInfoNode = xmlSecTmplSignatureEnsureKeyInfo(signNode, NULL);
+ if(keyInfoNode == NULL) {
+ fprintf(stderr, "Error: failed to add key info\n");
+ goto done;
+ }
+
+ if(xmlSecTmplKeyInfoAddKeyName(keyInfoNode, NULL) == NULL) {
+ fprintf(stderr, "Error: failed to add key name\n");
+ goto done;
+ }
+
+ /* create signature context */
+ dsigCtx = xmlSecDSigCtxCreate(NULL);
+ if(dsigCtx == NULL) {
+ fprintf(stderr,"Error: failed to create signature context\n");
+ goto done;
+ }
+
+ /* load private key, assuming that there is not password */
+ dsigCtx->signKey = xmlSecCryptoAppKeyLoad(key_file, xmlSecKeyDataFormatPem,
+ NULL, NULL, NULL);
+ if(dsigCtx->signKey == NULL) {
+ fprintf(stderr,"Error: failed to load private pem key from \"%s\"\n", key_file);
+ goto done;
+ }
+
+ /* sign the template */
+ if(xmlSecDSigCtxSign(dsigCtx, signNode) < 0) {
+ fprintf(stderr,"Error: signature failed\n");
+ goto done;
+ }
+
+ //xmlDocDump(stdout, doc);
+ return (doc);
+
+ done:
+ /* cleanup */
+ if(dsigCtx != NULL) {
+ xmlSecDSigCtxDestroy(dsigCtx);
+ }
+
+ if(doc != NULL) {
+ xmlFreeDoc(doc);
+ }
+ return(NULL);
+}
+
+xmlChar *
+lasso_str_unescape(xmlChar *str)
+{
+ xmlChar *ret;
+
+ ret = g_malloc(strlen(str) * 2);
+ xmlURIUnescapeString((const char *)str, 0, ret);
+ return (ret);
+}
+
+int
+lasso_str_verify(xmlChar *str,
+ const xmlChar *sender_public_key_file,
+ const xmlChar *recipient_private_key_file)
+{
+ xmlDocPtr doc = NULL;
+ xmlNodePtr node = NULL, sigValNode = NULL;
+ xmlSecDSigCtxPtr dsigCtx = NULL;
+ gchar **str_split;
+
+ /* split query, signatureValue */
+ str_split = g_strsplit((const gchar *)str, "&Signature=", 0);
+ /* re-create doc to verify (signed + enrypted) */
+ doc = lasso_str_sign(str_split[0],
+ xmlSecTransformRsaSha1Id,
+ recipient_private_key_file);
+ sigValNode = xmlSecFindNode(xmlDocGetRootElement(doc),
+ xmlSecNodeSignatureValue,
+ xmlSecDSigNs);
+ /* SignatureValue content */
+ xmlNodeSetContent(sigValNode, lasso_str_unescape(str_split[1]));
+
+ g_strfreev(str_split);
+ //xmlDocDump(stdout, doc);
+
+ /* find start node */
+ node = xmlSecFindNode(xmlDocGetRootElement(doc), xmlSecNodeSignature, xmlSecDSigNs);
+
+ /* create signature context */
+ dsigCtx = xmlSecDSigCtxCreate(NULL);
+ if(dsigCtx == NULL) {
+ fprintf(stderr,"Error: failed to create signature context\n");
+ goto done;
+ }
+
+ /* load public key */
+ dsigCtx->signKey = xmlSecCryptoAppKeyLoad(sender_public_key_file, xmlSecKeyDataFormatPem, NULL, NULL, NULL);
+ if(dsigCtx->signKey == NULL) {
+ fprintf(stderr,"Error: failed to load public pem key from \"%s\"\n", sender_public_key_file);
+ goto done;
+ }
+
+ /* Verify signature */
+ if(xmlSecDSigCtxVerify(dsigCtx, node) < 0) {
+ fprintf(stderr,"Error: signature verify\n");
+ goto done;
+ }
+
+ /* print verification result to stdout and return */
+ if(dsigCtx->status == xmlSecDSigStatusSucceeded) {
+ fprintf(stdout, "Signature is OK\n");
+ return (1);
+ } else {
+ fprintf(stdout, "Signature is INVALID\n");
+ return (0);
+ }
+
+ done:
+ /* cleanup */
+ if(dsigCtx != NULL) {
+ xmlSecDSigCtxDestroy(dsigCtx);
+ }
+
+ if(doc != NULL) {
+ xmlFreeDoc(doc);
+ }
+ return (-1);
+}
diff --git a/lasso/xml/tools.h b/lasso/xml/tools.h
new file mode 100644
index 00000000..188aa09e
--- /dev/null
+++ b/lasso/xml/tools.h
@@ -0,0 +1,53 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <glib-object.h>
+
+#include <libxml/xpath.h>
+
+#include <xmlsec/xmldsig.h>
+#include <xmlsec/templates.h>
+#include <xmlsec/crypto.h>
+
+xmlChar * lasso_build_unique_id(guint8 size);
+
+xmlChar * lasso_doc_get_node_content(xmlDocPtr doc, const xmlChar *name);
+
+xmlChar * lasso_g_ptr_array_index(GPtrArray *a, guint i);
+
+xmlChar * lasso_get_current_time(void);
+
+GData * lasso_query_to_dict(const xmlChar *query);
+
+xmlChar * lasso_str_escape(xmlChar *str);
+
+xmlDocPtr lasso_str_sign(xmlChar *str,
+ xmlSecTransformId signMethodId,
+ const char* key_file);
+
+xmlChar * lasso_str_unescape(xmlChar *str);
+
+int lasso_str_verify(xmlChar *str,
+ const xmlChar *sender_public_key_file,
+ const xmlChar *recipient_private_key_file);
diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c
new file mode 100644
index 00000000..c5117712
--- /dev/null
+++ b/lasso/xml/xml.c
@@ -0,0 +1,653 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <lasso/xml/xml.h>
+#include "../export.h"
+
+struct _LassoNodePrivate
+{
+ gboolean dispose_has_run;
+ gchar *type_name;
+ xmlNodePtr node;
+};
+
+/*****************************************************************************/
+/* virtual public methods */
+/*****************************************************************************/
+
+GString *
+lasso_node_build_query(LassoNode *node)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ return (class->build_query(node));
+}
+
+xmlChar *
+lasso_node_get_name(LassoNode *node)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ return (class->get_name(node));
+}
+
+void
+lasso_node_dump(LassoNode *node, const xmlChar *encoding, int format) {
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->dump(node, encoding, format);
+}
+
+void
+lasso_node_rename_prop(LassoNode *node,
+ const xmlChar *old_name,
+ const xmlChar *new_name)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->rename_prop(node, old_name, new_name);
+}
+
+GData *
+lasso_node_serialize(LassoNode *node, GData *gd)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ return (class->serialize(node, gd));
+}
+
+gchar *
+lasso_node_url_encode(LassoNode *node,
+ guint sign_method,
+ const gchar *key_file)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ return (class->url_encode(node, sign_method, key_file));
+}
+
+/*****************************************************************************/
+/* virtual private methods */
+/*****************************************************************************/
+
+static void
+lasso_node_add_child(LassoNode *node,
+ LassoNode *child,
+ gboolean unbounded)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->add_child(node, child, unbounded);
+}
+
+static LassoAttr *
+lasso_node_get_attr(LassoNode *node, const xmlChar *name)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ return (class->get_attr(node, name));
+}
+
+static GPtrArray *
+lasso_node_get_attrs(LassoNode *node)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ return (class->get_attrs(node));
+}
+
+static LassoNode *
+lasso_node_get_child(LassoNode *node, const xmlChar *name) {
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ return (class->get_child(node, name));
+}
+
+static GPtrArray *
+lasso_node_get_children(LassoNode *node)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ return (class->get_children(node));
+}
+
+static xmlNodePtr
+lasso_node_get_xmlNode(LassoNode *node)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ return (class->get_xmlNode(node));
+}
+
+/**
+ * lasso_node_new_child:
+ * @node: the pointer to node
+ * @name: the name of the child
+ * @content: the content
+ * @unbounded: if TRUE, several children with the same name can be added else a
+ * child is unique.
+ *
+ * Add a new child in node.
+ * This is an internal function and should not be called by application directly.
+ **/
+static void
+lasso_node_new_child(LassoNode *node,
+ const xmlChar *name,
+ const xmlChar *content,
+ gboolean unbounded)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ return (class->new_child(node, name, content, unbounded));
+}
+
+static void
+lasso_node_new_ns(LassoNode *node,
+ const xmlChar *href,
+ const xmlChar *prefix)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->new_ns(node, href, prefix);
+}
+
+static void
+lasso_node_set_name(LassoNode *node,
+ const xmlChar *name)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_name(node, name);
+}
+
+static void
+lasso_node_set_node(LassoNode *node,
+ xmlNodePtr libxml_node)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_node(node, libxml_node);
+}
+
+static void
+lasso_node_set_prop(LassoNode *node,
+ const xmlChar *name,
+ const xmlChar *value)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ class->set_prop(node, name, value);
+}
+
+/*****************************************************************************/
+/* implementation methods */
+/*****************************************************************************/
+
+static void
+gdata_build_query_foreach_func(GQuark key_id,
+ gpointer data,
+ gpointer user_data) {
+ guint i;
+ GString *str;
+ GPtrArray *array;
+
+ array = g_ptr_array_new();
+ str = g_string_new("");
+ for (i=0; i<((GPtrArray *)data)->len; i++) {
+ str = g_string_append(str, g_ptr_array_index((GPtrArray *)data, i));
+ if (i<((GPtrArray *)data)->len - 1) {
+ str = g_string_append(str, " ");
+ }
+ /* free each val get with xmlGetProp() in lasso_node_impl_serialize() */
+ xmlFree(g_ptr_array_index((GPtrArray *)data, i));
+ }
+ g_ptr_array_add(array, g_quark_to_string(key_id));
+ g_ptr_array_add(array, str->str);
+ g_string_free(str, FALSE);
+ g_ptr_array_add((GPtrArray *)user_data, array);
+}
+
+GString *
+lasso_node_impl_build_query(LassoNode *node)
+{
+ guint i;
+ GData *gd;
+ GPtrArray *a, *aa;
+ GString *query;
+
+ gd = lasso_node_serialize(node, NULL);
+ a = g_ptr_array_new();
+ /* transform dict into array
+ each key => [val1, val2, ...] of dict become [key, "val1 val2 ..."] */
+ g_datalist_foreach(&gd, gdata_build_query_foreach_func, a);
+
+ query = g_string_new("");
+ for (i=0; i<a->len; i++) {
+ aa = g_ptr_array_index(a, i);
+ query = g_string_append(query, g_ptr_array_index(aa, 0));
+ query = g_string_append(query, "=");
+ query = g_string_append(query, lasso_str_escape(g_ptr_array_index(aa, 1)));
+ if (i<a->len - 1) {
+ query = g_string_append(query, "&");
+ }
+ // free allocated memory
+ g_ptr_array_free(aa, TRUE);
+ }
+ // free allocated memory
+ g_ptr_array_free(a, TRUE);
+ g_datalist_clear(&gd);
+
+ return (query);
+}
+
+static xmlChar *
+lasso_node_impl_get_name(LassoNode *node)
+{
+ return (node->private->node->name);
+}
+
+static void
+lasso_node_impl_dump(LassoNode *node,
+ const xmlChar *encoding,
+ int format)
+{
+ xmlChar *ret;
+ int len;
+ xmlOutputBufferPtr buf;
+ xmlCharEncodingHandlerPtr handler = NULL;
+
+ if (encoding != NULL) {
+ handler = xmlFindCharEncodingHandler(encoding);
+ if (handler == NULL) {
+ return;
+ }
+ }
+ buf = xmlAllocOutputBuffer(handler);
+ if (buf == NULL) {
+ return;
+ }
+ xmlNodeDumpOutput(buf, node->private->node->doc, node->private->node,
+ 0, format, encoding);
+ xmlOutputBufferFlush(buf);
+ if (buf->conv != NULL) {
+ len = buf->conv->use;
+ ret = buf->conv->content;
+ buf->conv->content = NULL;
+ }
+ else {
+ len = buf->buffer->use;
+ ret = buf->buffer->content;
+ buf->buffer->content = NULL;
+ }
+ (void) xmlOutputBufferClose(buf);
+
+ printf("%s\n\n", ret);
+}
+
+static GData *
+lasso_node_impl_serialize(LassoNode *node, GData *gd)
+{
+ GPtrArray *attrs, *children;
+ GPtrArray *values;
+ xmlChar *name, *val;
+ int i;
+
+ if (gd == NULL) {
+ g_datalist_init(&gd);
+ }
+
+ attrs = lasso_node_get_attrs(node);
+ for(i=0; i<attrs->len; i++) {
+ values = g_ptr_array_new();
+ name = ((LassoAttr *)g_ptr_array_index(attrs, i))->name;
+ /* val must be xmlFree() */
+ val = xmlGetProp(node->private->node, name);
+ g_ptr_array_add(values, val);
+ g_datalist_set_data(&gd, name, values);
+ }
+ g_ptr_array_free(attrs, TRUE);
+
+ children = lasso_node_get_children(node);
+ if (children != NULL) {
+ for(i=0; i<children->len; i++) {
+ xmlNodePtr xml_node = ((LassoNode *)g_ptr_array_index(children, i))->private->node;
+ switch (xml_node->type) {
+ case XML_ELEMENT_NODE:
+ gd = lasso_node_serialize(g_ptr_array_index(children, i), gd);
+ break;
+ case XML_TEXT_NODE:
+ name = lasso_node_get_name(node);
+ values = (GPtrArray *)g_datalist_get_data(&gd, name);
+ if (values == NULL) {
+ values = g_ptr_array_new();
+ }
+ /* val must be xmlFree() */
+ val = xmlNodeGetContent(node->private->node);
+ g_ptr_array_add(values, val);
+ g_datalist_set_data(&gd, name, values);
+ break;
+ }
+ }
+ }
+ g_ptr_array_free(children, TRUE);
+
+ return (gd);
+}
+
+gchar *
+lasso_node_impl_url_encode(LassoNode *node,
+ guint sign_method,
+ const gchar *key_file)
+{
+ GString *msg;
+ xmlDocPtr doc;
+ xmlChar *str1, *str2;
+ gchar *ret;
+
+ msg = lasso_node_build_query(node);
+
+ if (sign_method > 0 && key_file != NULL) {
+ switch (sign_method) {
+ case LassoUrlEncodeRsaSha1:
+ msg = g_string_append(msg, "&SigAlg=");
+ msg = g_string_append(msg, lasso_str_escape("http://www.w3.org/2000/09/xmldsig#rsa-sha1"));
+ doc = lasso_str_sign(msg->str, xmlSecTransformRsaSha1Id, key_file);
+ msg = g_string_append(msg, "&Signature=");
+ str1 = lasso_doc_get_node_content(doc, xmlSecNodeSignatureValue);
+ str2 = lasso_str_escape(str1);
+ xmlFree(str1);
+ msg = g_string_append(msg, str2);
+ xmlFree(str2);
+ break;
+ case LassoUrlEncodeDsaSha1:
+ msg = g_string_append(msg, "&SigAlg=");
+ msg = g_string_append(msg, lasso_str_escape("http://www.w3.org/2000/09/xmldsig#dsa-sha1"));
+ doc = lasso_str_sign(msg->str, xmlSecTransformDsaSha1Id, key_file);
+ msg = g_string_append(msg, "&Signature=");
+ str1 = lasso_doc_get_node_content(doc, xmlSecNodeSignatureValue);
+ str2 = lasso_str_escape(str1);
+ xmlFree(str1);
+ msg = g_string_append(msg, str2);
+ xmlFree(str2);
+ break;
+ }
+ }
+
+ ret = g_strdup(msg->str);
+ g_string_free(msg, TRUE);
+ return (ret);
+}
+
+/*****************************************************************************/
+
+static void
+lasso_node_impl_add_child(LassoNode *node,
+ LassoNode *child,
+ gboolean unbounded)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ LassoNode *old_child;
+
+ // if child is not unbounded, we search it
+ if (!unbounded) {
+ old_child = class->get_child(node, child->private->node->name);
+ }
+
+ if (!unbounded && old_child != NULL) {
+ // child replace old child
+ xmlReplaceNode(old_child->private->node, child->private->node);
+ }
+ else {
+ // else child is added
+ xmlAddChild(node->private->node, child->private->node);
+ }
+}
+
+static LassoAttr *
+lasso_node_impl_get_attr(LassoNode *node, xmlChar *name)
+{
+ LassoAttr *prop;
+
+ prop = node->private->node->properties;
+ while (prop != NULL) {
+ if (xmlStrEqual(prop->name, name)) {
+ return (prop);
+ }
+ prop = prop->next;
+ }
+
+ return (NULL);
+}
+
+static GPtrArray *
+lasso_node_impl_get_attrs(LassoNode *node)
+{
+ GPtrArray *attributs;
+ LassoAttr *prop;
+
+ attributs = g_ptr_array_new();
+
+ prop = node->private->node->properties;
+ while (prop != NULL) {
+ g_ptr_array_add(attributs, prop);
+ prop = prop->next;
+ }
+
+ return (attributs);
+}
+
+static LassoNode *
+lasso_node_impl_get_child(LassoNode *node,
+ const xmlChar *name)
+{
+ xmlNodePtr cur;
+
+ cur = node->private->node->children;
+ while (cur != NULL) {
+ if(cur->type == XML_ELEMENT_NODE) {
+ if (xmlStrEqual(cur->name, name)) {
+ return (lasso_node_new(cur));
+ }
+ }
+ cur = cur->next;
+ }
+ return (NULL);
+}
+
+static GPtrArray *
+lasso_node_impl_get_children(LassoNode *node)
+{
+ GPtrArray *children = NULL;
+ xmlNodePtr cur;
+
+ cur = node->private->node->children;
+ if (cur != NULL)
+ children = g_ptr_array_new();
+
+ while (cur != NULL) {
+ g_ptr_array_add(children, lasso_node_new(cur));
+ cur = cur->next;
+ }
+
+ return (children);
+}
+
+static xmlNodePtr
+lasso_node_impl_get_xmlNode(LassoNode *node)
+{
+ return (node->private->node);
+}
+
+static void
+lasso_node_impl_new_child(LassoNode *node,
+ const xmlChar *name,
+ const xmlChar *content,
+ gboolean unbounded)
+{
+ LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
+ LassoNode *old_child;
+
+ if (!unbounded) {
+ old_child = class->get_child(node, name);
+ }
+
+ if (!unbounded && old_child != NULL)
+ xmlNodeSetContent(old_child->private->node, content);
+ else {
+ xmlNewChild(node->private->node, NULL, name, content);
+ }
+}
+
+static void
+lasso_node_impl_new_ns(LassoNode *node,
+ const xmlChar *href,
+ const xmlChar *prefix)
+{
+ xmlSetNs(node->private->node,
+ xmlNewNs(node->private->node, href, prefix));
+}
+
+static void
+lasso_node_impl_rename_prop(LassoNode *node,
+ const xmlChar *old_name,
+ const xmlChar *new_name)
+{
+ xmlChar *value;
+ LassoAttr *prop;
+
+ value = xmlGetProp(node->private->node, old_name);
+ if (value != NULL) {
+ xmlRemoveProp(lasso_node_get_attr(node, old_name));
+ lasso_node_set_prop(node, new_name, value);
+ }
+}
+
+static void
+lasso_node_impl_set_name(LassoNode *node,
+ const xmlChar *name)
+{
+ xmlNodeSetName(node->private->node, name);
+ node->private->type_name = xmlStrdup(name);
+}
+
+static void
+lasso_node_impl_set_node(LassoNode *node,
+ xmlNodePtr libxml_node)
+{
+ xmlFreeNode(node->private->node);
+ node->private->node = libxml_node;
+}
+
+static void
+lasso_node_impl_set_prop(LassoNode *node,
+ const xmlChar *name,
+ const xmlChar *value)
+{
+ xmlSetProp(node->private->node, name, value);
+}
+
+/*****************************************************************************/
+/* instance and class init functions */
+/*****************************************************************************/
+
+static void
+lasso_node_instance_init(LassoNode *instance)
+{
+ LassoNode *node = LASSO_NODE(instance);
+
+ node->private = g_new (LassoNodePrivate, 1);
+ node->private->dispose_has_run = FALSE;
+ node->private->type_name = NULL;
+ node->private->node = xmlNewNode(NULL, "no-name-set");
+}
+
+/* overrided parent class methods */
+
+static void
+lasso_node_dispose(LassoNode *node)
+{
+ if (node->private->dispose_has_run) {
+ return;
+ }
+ node->private->dispose_has_run = TRUE;
+
+ /* unref reference counted objects */
+ /* we don't have any here */
+ g_print("%s 0x%x disposed ...\n", node->private->type_name, node);
+}
+
+static void
+lasso_node_finalize(LassoNode *node)
+{
+ g_print("%s 0x%x finalized ...\n", node->private->type_name, node);
+ g_free (node->private->type_name);
+ xmlFreeNode(node->private->node);
+}
+
+static void
+lasso_node_class_init(LassoNodeClass *class)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS(class);
+
+ /* virtual public methods */
+ class->build_query = lasso_node_impl_build_query;
+ class->get_name = lasso_node_impl_get_name;
+ class->dump = lasso_node_impl_dump;
+ class->serialize = lasso_node_impl_serialize;
+ class->url_encode = lasso_node_impl_url_encode;
+ /* virtual private methods */
+ class->add_child = lasso_node_impl_add_child;
+ class->get_attr = lasso_node_impl_get_attr;
+ class->get_attrs = lasso_node_impl_get_attrs;
+ class->get_child = lasso_node_impl_get_child;
+ class->get_children = lasso_node_impl_get_children;
+ class->get_xmlNode = lasso_node_impl_get_xmlNode;
+ class->new_child = lasso_node_impl_new_child;
+ class->new_ns = lasso_node_impl_new_ns;
+ class->rename_prop = lasso_node_impl_rename_prop;
+ class->set_name = lasso_node_impl_set_name;
+ class->set_node = lasso_node_impl_set_node;
+ class->set_prop = lasso_node_impl_set_prop;
+ /* override parent class methods */
+ gobject_class->dispose = (void *)lasso_node_dispose;
+ gobject_class->finalize = (void *)lasso_node_finalize;
+}
+
+GType lasso_node_get_type() {
+ static GType this_type = 0;
+
+ if (!this_type) {
+ static const GTypeInfo this_info = {
+ sizeof (LassoNodeClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) lasso_node_class_init,
+ NULL,
+ NULL,
+ sizeof(LassoNode),
+ 0,
+ (GInstanceInitFunc) lasso_node_instance_init,
+ };
+
+ this_type = g_type_register_static(G_TYPE_OBJECT , "LassoNode",
+ &this_info, 0);
+ }
+ return this_type;
+}
+
+LassoNode* lasso_node_new(xmlNodePtr node) {
+ LassoNode *lasso_node;
+
+ lasso_node = LASSO_NODE(g_object_new(LASSO_TYPE_NODE, NULL));
+
+ if (node != NULL) {
+ xmlFreeNode(lasso_node->private->node);
+ lasso_node->private->node = node;
+ }
+
+ return (lasso_node);
+}
diff --git a/lasso/xml/xml.h b/lasso/xml/xml.h
new file mode 100644
index 00000000..bfaf28c8
--- /dev/null
+++ b/lasso/xml/xml.h
@@ -0,0 +1,134 @@
+/* $Id$
+ *
+ * Lasso - A free implementation of the Liberty Alliance specifications.
+ *
+ * Copyright (C) 2004 Entr'ouvert
+ * http://lasso.entrouvert.org
+ *
+ * Author: Valery Febvre <vfebvre@easter-eggs.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __LASSO_XML_H__
+#define __LASSO_XML_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <lasso/xml/strings.h>
+#include <lasso/xml/tools.h>
+
+#define LASSO_TYPE_NODE (lasso_node_get_type())
+#define LASSO_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_NODE, LassoNode))
+#define LASSO_NODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_NODE, LassoNodeClass))
+#define LASSO_IS_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_NODE))
+#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 struct _xmlAttr LassoAttr;
+
+typedef struct _LassoNode LassoNode;
+typedef struct _LassoNodeClass LassoNodeClass;
+typedef struct _LassoNodePrivate LassoNodePrivate;
+
+/**
+ * _LassoNode:
+ * @parent: the parent object
+ * @private: private pointer structure
+ **/
+struct _LassoNode {
+ GObject parent;
+ /*< private >*/
+ LassoNodePrivate *private;
+};
+
+struct _LassoNodeClass {
+ GObjectClass parent_class;
+ /*< vtable >*/
+ /*< public >*/
+ GString * (* build_query) (LassoNode *node);
+ xmlChar * (* get_name) (LassoNode *);
+ void (* dump) (LassoNode *,
+ const xmlChar *,
+ int);
+ GData * (* serialize) (LassoNode *,
+ GData *);
+ gchar * (* url_encode) (LassoNode *node,
+ guint sign_method,
+ const gchar *key_file);
+ /*< private >*/
+ void (* add_child) (LassoNode *,
+ LassoNode *,
+ gboolean);
+ LassoAttr* (* get_attr) (LassoNode *,
+ const xmlChar *);
+ GPtrArray* (* get_attrs) (LassoNode *);
+ LassoNode* (* get_child) (LassoNode *,
+ const xmlChar *);
+ GPtrArray* (* get_children) (LassoNode *);
+ xmlNodePtr (* get_xmlNode) (LassoNode *);
+ void (* new_child) (LassoNode *,
+ const xmlChar *,
+ const xmlChar *,
+ gboolean);
+ void (* new_ns) (LassoNode *,
+ const xmlChar *,
+ const xmlChar *);
+ void (* rename_prop) (LassoNode *node,
+ const xmlChar *old_name,
+ const xmlChar *new_name);
+ void (* set_name) (LassoNode *,
+ const xmlChar *);
+ void (* set_node) (LassoNode *,
+ xmlNodePtr);
+ void (* set_prop) (LassoNode *,
+ const xmlChar *,
+ const xmlChar *);
+};
+
+typedef enum {
+ LassoUrlEncodeRsaSha1 = 1,
+ LassoUrlEncodeDsaSha1
+} LassoUrlEncodeSignMethod;
+
+LASSO_EXPORT GType lasso_node_get_type(void);
+LASSO_EXPORT LassoNode* lasso_node_new(xmlNodePtr node);
+
+LASSO_EXPORT GString* lasso_node_build_query (LassoNode *node);
+
+LASSO_EXPORT xmlChar* lasso_node_get_name (LassoNode *node);
+
+LASSO_EXPORT void lasso_node_dump (LassoNode *,
+ const xmlChar *,
+ int);
+
+LASSO_EXPORT void lasso_node_rename_prop (LassoNode *node,
+ const xmlChar *old_name,
+ const xmlChar *new_name);
+
+LASSO_EXPORT GData* lasso_node_serialize (LassoNode *node,
+ GData *gd);
+
+LASSO_EXPORT gchar* lasso_node_url_encode (LassoNode *node,
+ guint sign_method,
+ const gchar *key_file);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __LASSO_XML_H__ */