127
128
lasso_data_service_need_redirect_user(LassoDataService *service, const char *redirectUrl)
129
LassoWsfProfile *profile;
131
LassoSoapFault *fault;
132
LassoUtilityStatus *status;
133
130
LassoSoapDetail *detail;
136
132
/* Find a SOAP fault element */
137
133
service->private_data->fault = lasso_soap_fault_new();
176
172
query = lasso_dst_query_new(NULL);
178
174
profile->request = LASSO_NODE(query);
176
if (service == NULL || service->private_data == NULL
177
|| service->private_data->offering == NULL) {
178
return LASSO_PROFILE_ERROR_MISSING_RESOURCE_OFFERING;
180
180
offering = service->private_data->offering;
182
if (offering->ServiceInstance == NULL
183
|| offering->ServiceInstance->ServiceType == NULL) {
184
return LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE;
182
186
query->hrefServiceType = g_strdup(offering->ServiceInstance->ServiceType);
183
187
query->prefixServiceType = lasso_get_prefix_for_dst_service_href(
184
188
query->hrefServiceType);
185
189
if (query->prefixServiceType == NULL) {
186
return LASSO_ERROR_UNDEFINED;
190
return LASSO_PROFILE_ERROR_MISSING_SERVICE_TYPE;
189
193
if (offering->ResourceID) {
198
202
lasso_wsf_profile_init_soap_request(LASSO_WSF_PROFILE(service), LASSO_NODE(query));
200
if (!security_mech_id)
204
if (security_mech_id == NULL) {
201
205
description = LASSO_DISCO_DESCRIPTION(offering->ServiceInstance->Description->data);
203
207
description = lasso_discovery_get_description_auto(offering, security_mech_id);
210
if (description == NULL) {
211
return LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION;
207
213
lasso_wsf_profile_set_description(LASSO_WSF_PROFILE(service), description);
209
215
if (description->Endpoint != NULL) {
216
222
/* Added needed credential for remote service */
217
223
if (description->CredentialRef) {
218
char *credentialRef = description->CredentialRef->data;
219
iter = service->private_data->credentials;
221
LassoSamlAssertion *credential = LASSO_SAML_ASSERTION(
223
if (strcmp(credentialRef, credential->AssertionID) == 0)
224
//lasso_wsf_profile_add_saml_authentication(
225
// LASSO_WSF_PROFILE(service), credential);
224
char *credentialRef = description->CredentialRef->data;
225
iter = service->private_data->credentials;
227
LassoSamlAssertion *credential = LASSO_SAML_ASSERTION(iter->data);
228
if (strcmp(credentialRef, credential->AssertionID) == 0) {
229
//lasso_wsf_profile_add_saml_authentication(
230
// LASSO_WSF_PROFILE(service), credential);
226
231
iter = iter->next;
246
252
LassoIsRedirectRequest *redirect_request = NULL;
255
if (LASSO_WSF_PROFILE(service)->soap_envelope_response == NULL ||
256
LASSO_WSF_PROFILE(service)->soap_envelope_response->Body == NULL) {
249
260
iter = LASSO_WSF_PROFILE(service)->soap_envelope_response->Body->any;
251
262
if (LASSO_IS_SOAP_FAULT(iter->data) == TRUE) {
289
300
LassoWsfProfile *profile;
291
302
gchar *service_type;
304
LassoSoapEnvelope *envelope;
305
LassoDstQuery *request;
293
309
/* FIXME: another way to get the service type ? */
295
LassoSoapEnvelope *envelope;
296
LassoDstQuery *request;
298
doc = xmlParseMemory(message, strlen(message));
299
xmlNode *xmlnode = xmlSecFindNode(xmlDocGetRootElement(doc), xmlSecNodeSignature,
302
xmlUnlinkNode(xmlnode);
303
xmlFreeNode(xmlnode);
305
envelope = LASSO_SOAP_ENVELOPE(
306
lasso_node_new_from_xmlNode(xmlDocGetRootElement(doc)));
307
request = LASSO_DST_QUERY(envelope->Body->any->data);
308
service_type = g_strdup(request->hrefServiceType);
311
g_return_val_if_fail(message != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
313
doc = xmlParseMemory(message, strlen(message));
315
return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG);
318
xmlnode = xmlSecFindNode(xmlDocGetRootElement(doc), xmlSecNodeSignature,
321
xmlUnlinkNode(xmlnode);
322
xmlFreeNode(xmlnode);
326
envelope = LASSO_SOAP_ENVELOPE(
327
lasso_node_new_from_xmlNode(xmlDocGetRootElement(doc)));
328
request = LASSO_DST_QUERY(envelope->Body->any->data);
329
service_type = g_strdup(request->hrefServiceType);
312
332
profile = LASSO_WSF_PROFILE(service);
313
333
rc = lasso_wsf_profile_process_soap_request_msg(profile, message, service_type,
314
334
security_mech_id);
338
/* get provider id from soap:Header */
339
for (node_list = profile->soap_envelope_request->Header->Other;
340
node_list; node_list = g_list_next(node_list)) {
341
LassoNode *node = node_list->data;
342
if (LASSO_IS_SOAP_BINDING_PROVIDER(node)) {
343
if (service->provider_id)
344
g_free(service->provider_id);
345
service->provider_id = g_strdup(
346
LASSO_SOAP_BINDING_PROVIDER(node)->providerID);
318
350
query = LASSO_DST_QUERY(profile->request);
319
if (query->ResourceID)
351
if (query->ResourceID) {
320
352
service->resource_id = g_object_ref(query->ResourceID);
321
else if (query->EncryptedResourceID)
353
} else if (query->EncryptedResourceID) {
322
354
service->encrypted_resource_id = g_object_ref(query->EncryptedResourceID);
324
356
return LASSO_ERROR_UNIMPLEMENTED; /* implied ? */
367
399
xmlNode *node = xpathObj->nodesetval->nodeTab[0];
368
400
xmlReplaceNode(node, newNode);
402
xmlXPathFreeObject(xpathObj);
371
405
iter = g_list_next(iter);
408
xmlXPathFreeContext(xpathCtx);
374
411
return lasso_wsf_profile_build_soap_response_msg(profile);
435
472
response->Data = g_list_append(response->Data, data);
474
xmlXPathFreeObject(xpathObj);
437
476
iter = g_list_next(iter);
440
479
xmlUnlinkNode(service->resource_data);
480
xmlXPathFreeContext(xpathCtx);
443
483
return lasso_wsf_profile_build_soap_response_msg(profile);
602
641
return LASSO_SOAP_FAULT_REDIRECT_REQUEST;
606
/*if (! LASSO_IS_DST_QUERY_RESPONSE(LASSO_WSF_PROFILE(service)->response))
607
return LASSO_ERROR_UNDEFINED;
609
response = LASSO_DST_QUERY_RESPONSE(LASSO_WSF_PROFILE(service)->response);
610
if (response->Status == NULL || strcmp(response->Status->code, "OK") != 0)
611
return LASSO_ERROR_UNDEFINED;*/
644
674
modify->hrefServiceType = g_strdup(offering->ServiceInstance->ServiceType);
645
675
modify->prefixServiceType = lasso_get_prefix_for_dst_service_href(
646
modify->hrefServiceType);
676
modify->hrefServiceType);
647
677
if (modify->prefixServiceType == NULL) {
648
return LASSO_ERROR_UNDEFINED;
678
return LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST;
651
681
/* get ResourceID / EncryptedResourceID */
652
682
if (offering->ResourceID) {
653
683
modify->ResourceID = offering->ResourceID;
655
else if (offering->EncryptedResourceID) {
684
} else if (offering->EncryptedResourceID) {
656
685
modify->EncryptedResourceID = offering->EncryptedResourceID;
659
687
/* XXX: no resource id, implied:resource, etc. */
660
688
return LASSO_ERROR_UNIMPLEMENTED;
693
721
modify = LASSO_DST_MODIFY(profile->request);
694
if (modify->ResourceID)
722
if (modify->ResourceID) {
695
723
service->resource_id = g_object_ref(modify->ResourceID);
696
else if (modify->EncryptedResourceID)
724
} else if (modify->EncryptedResourceID) {
697
725
service->encrypted_resource_id = g_object_ref(modify->EncryptedResourceID);
699
727
return LASSO_ERROR_UNIMPLEMENTED; /* implied ? */
707
735
LassoDstModifyResponse *response;
708
736
LassoSoapEnvelope *envelope;
710
g_return_val_if_fail(LASSO_IS_PROFILE_SERVICE(service), -1);
711
g_return_val_if_fail(soap_msg != NULL, -1);
738
g_return_val_if_fail(LASSO_IS_PROFILE_SERVICE(service),
739
LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
740
g_return_val_if_fail(soap_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
713
742
envelope = LASSO_SOAP_ENVELOPE(lasso_node_new_from_dump(soap_msg));
714
743
LASSO_WSF_PROFILE(service)->soap_envelope_response = envelope;
746
775
if (service->private_data->dispose_has_run == TRUE)
777
g_free(service->provider_id);
778
service->provider_id = NULL;
748
779
service->private_data->dispose_has_run = TRUE;
750
781
G_OBJECT_CLASS(parent_class)->dispose(object);