summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2005-08-09 15:17:58 +0000
committerFrederic Peters <fpeters@entrouvert.com>2005-08-09 15:17:58 +0000
commit0730a7f612edbd49806891cb9b24d3c86eb60dfa (patch)
treef1fa83d37b4b738fd7fc541cf3568832dbe501b3
parent9d1fea3e356b5f2f086df2cca27169beb898335e (diff)
another id-wsf step, disco:query, looking up for resource offerings in identity
-rw-r--r--lasso/id-ff/identity.c21
-rw-r--r--lasso/id-ff/identityprivate.h1
-rw-r--r--lasso/id-wsf/discovery.c85
-rw-r--r--lasso/id-wsf/discovery.h6
-rw-r--r--swig/Lasso-wsf.i11
5 files changed, 109 insertions, 15 deletions
diff --git a/lasso/id-ff/identity.c b/lasso/id-ff/identity.c
index 64f49533..5071eb62 100644
--- a/lasso/id-ff/identity.c
+++ b/lasso/id-ff/identity.c
@@ -170,6 +170,27 @@ lasso_identity_remove_resource_offering(LassoIdentity *identity, const char *ent
}
return FALSE;
}
+
+
+GList*
+lasso_identity_get_offerings(LassoIdentity *identity, const char *service_type)
+{
+ GList *iter;
+ LassoDiscoResourceOffering *t;
+ GList *result = NULL;
+
+ iter = identity->private_data->resource_offerings;
+ while (iter) {
+ t = iter->data;
+ iter = g_list_next(iter);
+ if (strcmp(t->ServiceInstance->ServiceType, service_type) == 0) {
+ result = g_list_append(result, g_object_ref(t));
+ }
+ }
+
+ return result;
+}
+
#endif
diff --git a/lasso/id-ff/identityprivate.h b/lasso/id-ff/identityprivate.h
index e17349a6..43a003af 100644
--- a/lasso/id-ff/identityprivate.h
+++ b/lasso/id-ff/identityprivate.h
@@ -37,6 +37,7 @@ gint lasso_identity_remove_federation(LassoIdentity *identity, const char *provi
gint lasso_identity_add_resource_offering(LassoIdentity *identity,
LassoDiscoResourceOffering *offering);
gboolean lasso_identity_remove_resource_offering(LassoIdentity *identity, const char *entryID);
+GList* lasso_identity_get_offerings(LassoIdentity *identity, const char *service_type);
#endif
diff --git a/lasso/id-wsf/discovery.c b/lasso/id-wsf/discovery.c
index cb87e1fe..2c178cec 100644
--- a/lasso/id-wsf/discovery.c
+++ b/lasso/id-wsf/discovery.c
@@ -230,7 +230,7 @@ lasso_discovery_init_modify(LassoDiscovery *discovery,
}
gint
-lasso_discovery_init_query(LassoDiscovery *discovery,
+lasso_discovery_init_query_full(LassoDiscovery *discovery,
LassoDiscoResourceOffering *resourceOffering,
LassoDiscoDescription *description)
{
@@ -336,7 +336,6 @@ lasso_discovery_init_insert(LassoDiscovery *discovery, LassoDiscoResourceOfferin
{
LassoDiscoModify *modify;
LassoSession *session;
- GList *assertions;
LassoDiscoResourceOffering *offering;
LassoDiscoDescription *description;
@@ -380,7 +379,6 @@ lasso_discovery_init_remove(LassoDiscovery *discovery, const char *entry_id)
{
LassoDiscoModify *modify;
LassoSession *session;
- GList *assertions;
LassoDiscoResourceOffering *offering;
LassoDiscoDescription *description;
@@ -409,6 +407,47 @@ lasso_discovery_init_remove(LassoDiscovery *discovery, const char *entry_id)
return 0;
}
+/**
+ * lasso_discovery_init_query
+ * @discovery: a #LassoDiscovery
+ *
+ * Initializes a disco Query message
+ *
+ * Return value: 0 on success; or a negative value otherwise.
+ **/
+gint
+lasso_discovery_init_query(LassoDiscovery *discovery)
+{
+ LassoDiscoQuery *query;
+ LassoSession *session;
+ LassoDiscoResourceOffering *offering;
+ LassoDiscoDescription *description;
+
+ query = lasso_disco_query_new();
+ lasso_wsf_profile_init_soap_request(LASSO_WSF_PROFILE(discovery), LASSO_NODE(query));
+
+ /* get discovery service resource id from principal assertion */
+ offering = lasso_discovery_get_resource_offering_auto(discovery, LASSO_DISCO_HREF);
+ if (offering == NULL) {
+ return -1;
+ }
+ description = lasso_discovery_get_description_auto(offering, LASSO_SECURITY_MECH_NULL);
+
+ /* XXX: EncryptedResourceID support */
+ query->ResourceID = g_object_ref(offering->ResourceID);
+ lasso_node_destroy(LASSO_NODE(offering));
+
+ LASSO_WSF_PROFILE(discovery)->request = LASSO_NODE(query);
+
+ if (description->Endpoint != NULL) {
+ LASSO_WSF_PROFILE(discovery)->msg_url = g_strdup(description->Endpoint);
+ } /* XXX: else, description->WsdlURLK, get endpoint automatically */
+
+ return 0;
+}
+
+
+
gint
lasso_discovery_process_modify_msg(LassoDiscovery *discovery,
@@ -511,23 +550,15 @@ lasso_discovery_process_modify_response_msg(LassoDiscovery *discovery, const gch
gint
lasso_discovery_process_query_msg(LassoDiscovery *discovery, const gchar *message)
{
- LassoDiscoQueryResponse *response;
LassoDiscoQuery *request;
LassoSoapEnvelope *envelope;
- LassoUtilityStatus *status;
g_return_val_if_fail(LASSO_IS_DISCOVERY(discovery), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
g_return_val_if_fail(message != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
lasso_wsf_profile_process_soap_request_msg(LASSO_WSF_PROFILE(discovery), message);
- status = lasso_utility_status_new(LASSO_DST_STATUS_CODE_OK);
- response = lasso_disco_query_response_new(status);
- LASSO_WSF_PROFILE(discovery)->response = LASSO_NODE(response);
-
envelope = LASSO_WSF_PROFILE(discovery)->soap_envelope_response;
- envelope->Body->any = g_list_append(envelope->Body->any, response);
-
request = LASSO_DISCO_QUERY(LASSO_WSF_PROFILE(discovery)->request);
if (request->ResourceID)
@@ -539,6 +570,38 @@ lasso_discovery_process_query_msg(LassoDiscovery *discovery, const gchar *messag
return 0;
}
+
+gint
+lasso_discovery_build_response_msg(LassoDiscovery *discovery)
+{
+ LassoDiscoQuery *request = LASSO_DISCO_QUERY(LASSO_WSF_PROFILE(discovery)->request);
+ LassoDiscoQueryResponse *response;
+ LassoSoapEnvelope *envelope;
+ GList *offerings = NULL;
+ GList *iter;
+
+
+ iter = request->RequestedServiceType;
+ while (iter) {
+ LassoDiscoRequestedServiceType *service_type = iter->data;
+ iter = g_list_next(iter);
+ offerings = g_list_concat(offerings, lasso_identity_get_offerings(
+ LASSO_WSF_PROFILE(discovery)->identity,
+ service_type->ServiceType));
+ }
+
+ /* build response */
+ response = lasso_disco_query_response_new(
+ lasso_utility_status_new(LASSO_DST_STATUS_CODE_OK));
+ response->ResourceOffering = offerings;
+ LASSO_WSF_PROFILE(discovery)->response = LASSO_NODE(response);
+ envelope = LASSO_WSF_PROFILE(discovery)->soap_envelope_response;
+ envelope->Body->any = g_list_append(envelope->Body->any, response);
+
+ return lasso_wsf_profile_build_soap_response_msg(LASSO_WSF_PROFILE(discovery));
+
+}
+
gint
lasso_discovery_process_query_response_msg(LassoDiscovery *discovery, const gchar *message)
{
diff --git a/lasso/id-wsf/discovery.h b/lasso/id-wsf/discovery.h
index bca64043..d1306930 100644
--- a/lasso/id-wsf/discovery.h
+++ b/lasso/id-wsf/discovery.h
@@ -106,13 +106,17 @@ LASSO_EXPORT gchar* lasso_discovery_dump(LassoDiscovery *discovery);
LASSO_EXPORT gint lasso_discovery_init_insert(LassoDiscovery *discovery,
LassoDiscoResourceOffering *resourceOffering);
LASSO_EXPORT gint lasso_discovery_init_remove(LassoDiscovery *discovery, const char *entry_id);
+
+LASSO_EXPORT gint lasso_discovery_build_response_msg(LassoDiscovery *discovery);
LASSO_EXPORT gint lasso_discovery_build_modify_response_msg(LassoDiscovery *discovery);
LASSO_EXPORT gint lasso_discovery_init_modify(LassoDiscovery *discovery,
LassoDiscoResourceOffering *resourceOffering,
LassoDiscoDescription *description);
-LASSO_EXPORT gint lasso_discovery_init_query(LassoDiscovery *discovery,
+LASSO_EXPORT gint lasso_discovery_init_query(LassoDiscovery *discovery);
+
+LASSO_EXPORT gint lasso_discovery_init_query_full(LassoDiscovery *discovery,
LassoDiscoResourceOffering *resourceOffering,
LassoDiscoDescription *description);
diff --git a/swig/Lasso-wsf.i b/swig/Lasso-wsf.i
index 0acc16ac..83ec54ee 100644
--- a/swig/Lasso-wsf.i
+++ b/swig/Lasso-wsf.i
@@ -3528,8 +3528,12 @@ typedef struct {
END_THROW_ERROR
THROW_ERROR
- int initQuery(LassoDiscoResourceOffering *resourceOffering,
- LassoDiscoDescription *description);
+ int initQuery();
+ END_THROW_ERROR
+
+ THROW_ERROR
+ int initQueryFull(LassoDiscoResourceOffering *resourceOffering,
+ LassoDiscoDescription *description);
END_THROW_ERROR
THROW_ERROR
@@ -3647,10 +3651,10 @@ int LassoDiscovery_setSessionFromDump(LassoDiscovery *self, char *dump) {
}
#define LassoDiscovery_buildRequestMsg(self) lasso_wsf_profile_build_soap_request_msg(LASSO_WSF_PROFILE(self))
-#define LassoDiscovery_buildResponseMsg(self) lasso_wsf_profile_build_soap_response_msg(LASSO_WSF_PROFILE(self))
/* Methods implementations */
+#define LassoDiscovery_buildResponseMsg lasso_discovery_build_response_msg
#define LassoDiscovery_addInsertEntry lasso_discovery_add_insert_entry
#define LassoDiscovery_addRemoveEntry lasso_discovery_add_remove_entry
#define LassoDiscovery_addRequestedServiceType lasso_discovery_add_requested_service_type
@@ -3660,6 +3664,7 @@ int LassoDiscovery_setSessionFromDump(LassoDiscovery *self, char *dump) {
#define LassoDiscovery_buildModifyResponseMsg lasso_discovery_build_modify_response_msg
#define LassoDiscovery_initModify lasso_discovery_init_modify
#define LassoDiscovery_initQuery lasso_discovery_init_query
+#define LassoDiscovery_initQueryFull lasso_discovery_init_query_full
#define LassoDiscovery_processModifyMsg lasso_discovery_process_modify_msg
#define LassoDiscovery_processModifyResponseMsg lasso_discovery_process_modify_response_msg
#define LassoDiscovery_processQueryMsg lasso_discovery_process_query_msg