Entr'ouvert Entr'ouvert Documentation

LassoDiscovery

LassoDiscovery — ID-WSF Discovery Service Profile

Synopsis

struct              LassoDiscovery;
LassoDiscovery *    lasso_discovery_new                 (LassoServer *server);
LassoDiscovery *    lasso_discovery_new_full            (LassoServer *server,
                                                         LassoDiscoResourceOffering *offering);
lasso_error_t       lasso_discovery_init_modify         (LassoDiscovery *discovery,
                                                         const char *security_mech_id);
lasso_error_t       lasso_discovery_add_insert_entry    (LassoDiscovery *discovery,
                                                         LassoDiscoServiceInstance *serviceInstance,
                                                         LassoDiscoResourceID *resourceId);
lasso_error_t       lasso_discovery_add_remove_entry    (LassoDiscovery *discovery,
                                                         const gchar *entryID);
lasso_error_t       lasso_discovery_init_query          (LassoDiscovery *discovery,
                                                         const gchar *security_mech_id);
lasso_error_t       lasso_discovery_add_requested_service_type
                                                        (LassoDiscovery *discovery,
                                                         const gchar *service_type,
                                                         const gchar *option);
lasso_error_t       lasso_discovery_process_request_msg (LassoDiscovery *discovery,
                                                         const gchar *message,
                                                         const gchar *security_mech_id);
lasso_error_t       lasso_discovery_build_response_msg  (LassoDiscovery *discovery);
lasso_error_t       lasso_discovery_process_modify_response_msg
                                                        (LassoDiscovery *discovery,
                                                         const gchar *message);
lasso_error_t       lasso_discovery_process_query_response_msg
                                                        (LassoDiscovery *discovery,
                                                         const gchar *message);
LassoWsfProfile *   lasso_discovery_get_service         (LassoDiscovery *discovery,
                                                         const char *service_type);
GList *             lasso_discovery_get_services        (LassoDiscovery *discovery);
LassoWsfProfile *   (*LassoWsfProfileConstructor)       (LassoServer *server,
                                                         LassoDiscoResourceOffering *offering);
void                lasso_discovery_register_constructor_for_service_type
                                                        (gchar const *service_type,
                                                         LassoWsfProfileConstructor constructor);
void                lasso_discovery_unregister_constructor_for_service_type
                                                        (gchar const *service_type,
                                                         LassoWsfProfileConstructor constructor);

Description

The Discovery service usually runs on the principal identity provider and knowns about resources and services related to the principal. Attribute providers can register themselves as offering resources for an user while other services can ask where to find a given resource.

The following example is a service provider asking for a "PP" service (an attribute provider for the "Personal Profile"):

LassoServer *server;  // initialized before
char* session_dump;   // initialized before

LassoDiscovery *discovery;    // discovery service
char *soap_answer;            // SOAP answer from disco service
LassoProfileService *service; // instance to perform on requested service

discovery = lasso_discovery_new(server);
lasso_wsf_profile_set_session_from_dump(LASSO_WSF_PROFILE(discovery), session_dump);
lasso_discovery_init_query(discovery);
lasso_discovery_add_requested_service(discovery, LASSO_PP10_HREF);
lasso_discovery_build_request_msg(discovery);

// service must perform SOAP call to LASSO_WSF_PROFILE(discovery)->msg_url
// the SOAP message is LASSO_WSF_PROFILE(discovery)->msg_body.  The answer
// is stored in char* soap_answer;

lasso_discovery_process_query_response_msg(discovery, soap_answer);

// get an object to access the first service returned, or NULL if an error happened
service = lasso_discovery_get_service(discovery);

Details

struct LassoDiscovery

struct LassoDiscovery {
	LassoWsfProfile parent;

	LassoDiscoResourceID *ResourceID;
	LassoDiscoEncryptedResourceID *EncryptedResourceID;
};

lasso_discovery_new ()

LassoDiscovery *    lasso_discovery_new                 (LassoServer *server);

Creates a new LassoDiscovery.

server :

the LassoServer

Returns :

a newly created LassoDiscovery object; or NULL if an error occured.

lasso_discovery_new_full ()

LassoDiscovery *    lasso_discovery_new_full            (LassoServer *server,
                                                         LassoDiscoResourceOffering *offering);

Creates a new LassoDiscovery.

server :

the LassoServer

offering :

the LassoDiscoResourceOffering

Returns :

a newly created LassoDiscovery object; or NULL if an error occured.

lasso_discovery_init_modify ()

lasso_error_t       lasso_discovery_init_modify         (LassoDiscovery *discovery,
                                                         const char *security_mech_id);

Initializes a disco Modify/InsertEntry

discovery :

a LassoDiscovery

security_mech_id :

the security mechanism identifier. [allow-none]

Returns :

0 on success; an error code otherwise.

lasso_discovery_add_insert_entry ()

lasso_error_t       lasso_discovery_add_insert_entry    (LassoDiscovery *discovery,
                                                         LassoDiscoServiceInstance *serviceInstance,
                                                         LassoDiscoResourceID *resourceId);

Add an LassoDiscoInsertEntry containing a new LassoDiscoResourceOffering, and initialize the LassoDiscoResourceOffering using the LassoDiscoServiceInstance and LassoDiscoResourceId object.

discovery :

a LassoDiscovery object

serviceInstance :

an optional LassoDiscoServiceInstance object

resourceID :

the new LassoDiscoResourceID used to create the LassoDiscoResrouceOffering

Returns :

the newly created LassoDiscoInsertEntry or NULL if some preconditions failed.

lasso_discovery_add_remove_entry ()

lasso_error_t       lasso_discovery_add_remove_entry    (LassoDiscovery *discovery,
                                                         const gchar *entryID);

Add a RemoveEntry to the current Modify message for a Discovery service, to remove the resource offering identified by entryID (returned in the response to a Modify/InsertEntry message).

discovery :

a LassoDiscovery object

entryID :

the idenitfier of a ResourceOffering to remove.

Returns :

0 if successful, an error code otherwise.

lasso_discovery_init_query ()

lasso_error_t       lasso_discovery_init_query          (LassoDiscovery *discovery,
                                                         const gchar *security_mech_id);

Initializes a disco:Query message.

discovery :

a LassoDiscovery

security_mech_id :

identifier of a wished security mechanism, or NULL if any is ok. [allow-none]

Returns :

0 on success; or a negative value otherwise.

lasso_discovery_add_requested_service_type ()

lasso_error_t       lasso_discovery_add_requested_service_type
                                                        (LassoDiscovery *discovery,
                                                         const gchar *service_type,
                                                         const gchar *option);

Adds a request for service of service_type to the disco:Query being built.

discovery :

a LassoDiscovery

service_type :

requested service type

option :

option to the requested service

Returns :

0 if successful

lasso_discovery_process_request_msg ()

lasso_error_t       lasso_discovery_process_request_msg (LassoDiscovery *discovery,
                                                         const gchar *message,
                                                         const gchar *security_mech_id);

Process a received SOAP message for the discovery service.

discovery :

a LassoDiscovery object

message :

a serialized SOAP message

security_mech_id :

the security mech id to use for validating authorizations. [allow-none]

Returns :

0 if successfull, an error code otherwise.

lasso_discovery_build_response_msg ()

lasso_error_t       lasso_discovery_build_response_msg  (LassoDiscovery *discovery);

Execute needed action for the received request, and produce a response message.

If any critical error occur, it tries to produce a SOAP fault.

discovery :

a LassoDiscovery object

Returns :

0 on success; or an error code otherwise.

lasso_discovery_process_modify_response_msg ()

lasso_error_t       lasso_discovery_process_modify_response_msg
                                                        (LassoDiscovery *discovery,
                                                         const gchar *message);

Processes a disco:ModifyResponse SOAP message.

discovery :

a LassoDiscovery

message :

the disco:ModifyResponse SOAP message

Returns :

0 on success; or a negative value otherwise.

lasso_discovery_process_query_response_msg ()

lasso_error_t       lasso_discovery_process_query_response_msg
                                                        (LassoDiscovery *discovery,
                                                         const gchar *message);

Processes a disco:QueryResponse message. Extract credentials from the response and put them in the session, for later use by a request from a LassoWsfProfile.

discovery :

a LassoDiscovery

message :

the disco:QueryResponse message

Returns :

0 on success; or a negative value otherwise.

lasso_discovery_get_service ()

LassoWsfProfile *   lasso_discovery_get_service         (LassoDiscovery *discovery,
                                                         const char *service_type);

After a disco:query message, creates a LassoDataService instance for the requested service_type with the first resource offering found or the first resource offering matching the service type.

discovery :

a LassoDiscovery

service_type :

the requested service type

Returns :

a newly created LassoDataService object; or NULL if an error occured. [transfer full][allow-none]

lasso_discovery_get_services ()

GList *             lasso_discovery_get_services        (LassoDiscovery *discovery);

After a disco:query message, creates a GList object of LassoDataService.

discovery :

a LassoDiscovery

Returns :

a newly created GList object of LassoDataService; or NULL if an error occured. [transfer full][element-type LassoNode]

LassoWsfProfileConstructor ()

LassoWsfProfile *   (*LassoWsfProfileConstructor)       (LassoServer *server,
                                                         LassoDiscoResourceOffering *offering);

lasso_discovery_register_constructor_for_service_type ()

void                lasso_discovery_register_constructor_for_service_type
                                                        (gchar const *service_type,
                                                         LassoWsfProfileConstructor constructor);

This function permits to subclass of LassoWsfProfile to register a constructor for the service type they supports.

service_type :

the URI of the service type

constructor :

a constructor function for the profile handling this service type

lasso_discovery_unregister_constructor_for_service_type ()

void                lasso_discovery_unregister_constructor_for_service_type
                                                        (gchar const *service_type,
                                                         LassoWsfProfileConstructor constructor);

This function permits to subclass of LassoWsfProfile to unregister a constructor for the service type they previously registered using lasso_discovery_register_constructor_for_service_type().

service_type :

the URI of the service type

constructor :

a constructor function for the profile handling this service type