diff options
author | Valery Febvre <vfebvre at easter-eggs.com> | 2004-04-05 22:25:48 +0000 |
---|---|---|
committer | Valery Febvre <vfebvre at easter-eggs.com> | 2004-04-05 22:25:48 +0000 |
commit | caa62ddc7a5c39234a6f00132f0138a6b00f9cb0 (patch) | |
tree | d4e44a619964dbd13fec670c8bf42a069cb02889 /lasso/xml | |
parent | 80960808a8a1a59989f95ad2436d0a332473b816 (diff) | |
download | lasso-caa62ddc7a5c39234a6f00132f0138a6b00f9cb0.tar.gz lasso-caa62ddc7a5c39234a6f00132f0138a6b00f9cb0.tar.xz lasso-caa62ddc7a5c39234a6f00132f0138a6b00f9cb0.zip |
Files moved. Initialy located in lasso/schema/ directory
Diffstat (limited to 'lasso/xml')
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", + ®ister_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__ */ |