diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2005-08-09 15:17:58 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2005-08-09 15:17:58 +0000 |
| commit | 0730a7f612edbd49806891cb9b24d3c86eb60dfa (patch) | |
| tree | f1fa83d37b4b738fd7fc541cf3568832dbe501b3 | |
| parent | 9d1fea3e356b5f2f086df2cca27169beb898335e (diff) | |
another id-wsf step, disco:query, looking up for resource offerings in identity
| -rw-r--r-- | lasso/id-ff/identity.c | 21 | ||||
| -rw-r--r-- | lasso/id-ff/identityprivate.h | 1 | ||||
| -rw-r--r-- | lasso/id-wsf/discovery.c | 85 | ||||
| -rw-r--r-- | lasso/id-wsf/discovery.h | 6 | ||||
| -rw-r--r-- | swig/Lasso-wsf.i | 11 |
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 |
