1
/* $Id: register_name_identifier_request.c,v 1.16 2004/09/01 09:59:53 fpeters Exp $
3
* Lasso - A free implementation of the Liberty Alliance specifications.
5
* Copyright (C) 2004 Entr'ouvert
6
* http://lasso.entrouvert.org
8
* Authors: Valery Febvre <vfebvre@easter-eggs.com>
9
* Nicolas Clapies <nclapies@entrouvert.com>
11
* This program is free software; you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License as published by
13
* the Free Software Foundation; either version 2 of the License, or
14
* (at your option) any later version.
16
* This program is distributed in the hope that it will be useful,
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
* GNU General Public License for more details.
21
* You should have received a copy of the GNU General Public License
22
* along with this program; if not, write to the Free Software
23
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26
#include <lasso/protocols/register_name_identifier_request.h>
28
/*****************************************************************************/
30
/*****************************************************************************/
33
lasso_register_name_identifier_request_rename_attributes_for_query(LassoRegisterNameIdentifierRequest *request)
36
LassoNode *idpidentifier, *spidentifier, *oldidentifier;
38
g_return_if_fail (LASSO_IS_REGISTER_NAME_IDENTIFIER_REQUEST(request));
40
idpidentifier = lasso_node_get_child(LASSO_NODE(request), "IDPProvidedNameIdentifier",
42
lasso_node_rename_prop(idpidentifier, "NameQualifier", "IDPNameQualifier");
43
lasso_node_rename_prop(idpidentifier, "Format", "IDPFormat");
44
lasso_node_destroy(idpidentifier);
46
spidentifier = lasso_node_get_child(LASSO_NODE(request), "SPProvidedNameIdentifier",
48
lasso_node_rename_prop(spidentifier, "NameQualifier", "SPNameQualifier");
49
lasso_node_rename_prop(spidentifier, "Format", "SPFormat");
50
lasso_node_destroy(spidentifier);
52
oldidentifier = lasso_node_get_child(LASSO_NODE(request), "OldProvidedNameIdentifier",
54
lasso_node_rename_prop(oldidentifier, "NameQualifier", "OldNameQualifier");
55
lasso_node_rename_prop(oldidentifier, "Format", "OldFormat");
56
lasso_node_destroy(oldidentifier);
59
/*****************************************************************************/
60
/* instance and class init functions */
61
/*****************************************************************************/
64
lasso_register_name_identifier_request_instance_init(LassoRegisterNameIdentifierRequest *request)
69
lasso_register_name_identifier_request_class_init(LassoRegisterNameIdentifierRequestClass *class)
73
GType lasso_register_name_identifier_request_get_type() {
74
static GType this_type = 0;
77
static const GTypeInfo this_info = {
78
sizeof (LassoRegisterNameIdentifierRequestClass),
81
(GClassInitFunc) lasso_register_name_identifier_request_class_init,
84
sizeof(LassoRegisterNameIdentifierRequest),
86
(GInstanceInitFunc) lasso_register_name_identifier_request_instance_init,
89
this_type = g_type_register_static(LASSO_TYPE_LIB_REGISTER_NAME_IDENTIFIER_REQUEST,
90
"LassoRegisterNameIdentifierRequest",
97
lasso_register_name_identifier_request_new(const xmlChar *providerID,
98
const xmlChar *idpProvidedNameIdentifier,
99
const xmlChar *idpNameQualifier,
100
const xmlChar *idpFormat,
101
const xmlChar *spProvidedNameIdentifier,
102
const xmlChar *spNameQualifier,
103
const xmlChar *spFormat,
104
const xmlChar *oldProvidedNameIdentifier,
105
const xmlChar *oldNameQualifier,
106
const xmlChar *oldFormat)
108
LassoNode *request, *idpidentifier, *spidentifier, *oldidentifier;
111
request = LASSO_NODE(g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER_REQUEST, NULL));
113
/* Set ONLY required elements/attributes */
115
id = lasso_build_unique_id(32);
116
lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request),
117
(const xmlChar *)id);
120
lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
121
lassoLibMajorVersion);
123
lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
124
lassoLibMinorVersion);
126
time = lasso_get_current_time();
127
lasso_samlp_request_abstract_set_issueInstant(LASSO_SAMLP_REQUEST_ABSTRACT(request),
128
(const xmlChar *)time);
131
lasso_lib_register_name_identifier_request_set_providerID(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
134
idpidentifier = lasso_lib_idp_provided_name_identifier_new(idpProvidedNameIdentifier);
135
lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(idpidentifier), idpNameQualifier);
136
lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(idpidentifier), idpFormat);
137
lasso_lib_register_name_identifier_request_set_idpProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
138
LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER(idpidentifier));
139
lasso_node_destroy(idpidentifier);
141
spidentifier = lasso_lib_sp_provided_name_identifier_new(spProvidedNameIdentifier);
142
lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(spidentifier), spNameQualifier);
143
lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(spidentifier), spFormat);
144
lasso_lib_register_name_identifier_request_set_spProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
145
LASSO_LIB_SP_PROVIDED_NAME_IDENTIFIER(spidentifier));
146
lasso_node_destroy(spidentifier);
148
oldidentifier = lasso_lib_old_provided_name_identifier_new(oldProvidedNameIdentifier);
149
lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(oldidentifier), oldNameQualifier);
150
lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(oldidentifier), oldFormat);
151
lasso_lib_register_name_identifier_request_set_oldProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
152
LASSO_LIB_OLD_PROVIDED_NAME_IDENTIFIER(oldidentifier));
153
lasso_node_destroy(oldidentifier);
159
lasso_register_name_identifier_request_new_from_query(const xmlChar *query)
161
LassoNode *request, *idpidentifier, *spidentifier, *oldidentifier;
165
request = LASSO_NODE(g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER_REQUEST, NULL));
167
gd = lasso_query_to_dict(query);
170
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0);
171
lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request), str);
174
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MajorVersion"), 0);
175
lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), str);
178
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MinorVersion"), 0);
179
lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request), str);
182
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IssueInstant"), 0);
183
lasso_samlp_request_abstract_set_issueInstant(LASSO_SAMLP_REQUEST_ABSTRACT(request), str);
186
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProviderID"), 0);
187
lasso_lib_register_name_identifier_request_set_providerID(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), str);
190
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0);
192
lasso_lib_register_name_identifier_request_set_relayState(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), str);
194
/* IDPProvidedNameIdentifier */
195
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IDPProvidedNameIdentifier"), 0);
196
idpidentifier = lasso_lib_idp_provided_name_identifier_new(str);
197
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IDPNameQualifier"), 0);
198
lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(idpidentifier), str);
199
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IDPFormat"), 0);
200
lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(idpidentifier), str);
202
lasso_lib_register_name_identifier_request_set_idpProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
203
LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER(idpidentifier));
204
lasso_node_destroy(idpidentifier);
206
/* SPPProvidedNameIdentifier */
207
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "SPProvidedNameIdentifier"), 0);
208
spidentifier = lasso_lib_sp_provided_name_identifier_new(str);
209
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "SPNameQualifier"), 0);
210
lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(spidentifier), str);
211
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "SPFormat"), 0);
212
lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(spidentifier), str);
214
lasso_lib_register_name_identifier_request_set_spProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
215
LASSO_LIB_SP_PROVIDED_NAME_IDENTIFIER(spidentifier));
216
lasso_node_destroy(spidentifier);
218
/* OldPProvidedNameIdentifier */
219
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "OldProvidedNameIdentifier"), 0);
220
oldidentifier = lasso_lib_old_provided_name_identifier_new(str);
221
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "OldNameQualifier"), 0);
222
lasso_saml_name_identifier_set_nameQualifier(LASSO_SAML_NAME_IDENTIFIER(oldidentifier), str);
223
str = lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "OldFormat"), 0);
224
lasso_saml_name_identifier_set_format(LASSO_SAML_NAME_IDENTIFIER(oldidentifier), str);
226
lasso_lib_register_name_identifier_request_set_oldProvidedNameIdentifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
227
LASSO_LIB_OLD_PROVIDED_NAME_IDENTIFIER(oldidentifier));
228
lasso_node_destroy(oldidentifier);
230
g_datalist_clear(&gd);
236
lasso_register_name_identifier_request_new_from_soap(const xmlChar *buffer)
239
LassoNode *envelope, *lassoNode_request;
240
xmlNodePtr xmlNode_request;
241
LassoNodeClass *class;
243
request = LASSO_NODE(g_object_new(LASSO_TYPE_REGISTER_NAME_IDENTIFIER_REQUEST, NULL));
245
envelope = lasso_node_new_from_dump(buffer);
246
lassoNode_request = lasso_node_get_child(envelope, "RegisterNameIdentifierRequest",
249
class = LASSO_NODE_GET_CLASS(lassoNode_request);
250
xmlNode_request = xmlCopyNode(class->get_xmlNode(LASSO_NODE(lassoNode_request)), 1);
251
lasso_node_destroy(lassoNode_request);
253
class = LASSO_NODE_GET_CLASS(request);
254
class->set_xmlNode(LASSO_NODE(request), xmlNode_request);
255
lasso_node_destroy(envelope);
261
lasso_register_name_identifier_request_new_from_export(gchar *buffer,
262
lassoNodeExportType export_type)
266
g_return_val_if_fail(buffer != NULL, NULL);
269
case lassoNodeExportTypeQuery:
270
request = lasso_register_name_identifier_request_new_from_query(buffer);
272
case lassoNodeExportTypeSoap:
273
request = lasso_register_name_identifier_request_new_from_soap(buffer);
276
message(G_LOG_LEVEL_WARNING, "Invalid export type\n");