diff options
| author | Damien Laniel <dlaniel@entrouvert.com> | 2007-05-02 13:23:41 +0000 |
|---|---|---|
| committer | Damien Laniel <dlaniel@entrouvert.com> | 2007-05-02 13:23:41 +0000 |
| commit | 12d32a23c8bc00d1d0eacad8a3125556c8aba0ee (patch) | |
| tree | 89d5d8400bc93375d30b4957723a75bab5a5de58 | |
| parent | 62bf5562a78ec00ec497ab85bfc332f272433406 (diff) | |
added method to get an assertion security token from an EPR
| -rw-r--r-- | lasso/id-ff/identity.c | 31 | ||||
| -rw-r--r-- | lasso/id-wsf-2.0/identity.h | 7 |
2 files changed, 37 insertions, 1 deletions
diff --git a/lasso/id-ff/identity.c b/lasso/id-ff/identity.c index bac16b5f..96c8e531 100644 --- a/lasso/id-ff/identity.c +++ b/lasso/id-ff/identity.c @@ -270,11 +270,40 @@ lasso_identity_add_endpoint_reference(LassoIdentity *identity, LassoWsAddrEndpoi } LassoWsAddrEndpointReference* -lasso_identity_get_endpoint_reference(LassoIdentity *identity, const gchar *service_type) { +lasso_identity_get_endpoint_reference(LassoIdentity *identity, const gchar *service_type) +{ return LASSO_WSA_ENDPOINT_REFERENCE(g_hash_table_lookup( identity->private_data->eprs, service_type)); } +LassoSaml2Assertion* +lasso_identity_assertion_identity_token(LassoIdentity *identity) +{ + LassoWsAddrEndpointReference* epr; + GList *metadata_item; + GList *i; + LassoIdWsf2DiscoSecurityContext *security_context; + LassoIdWsf2SecToken *sec_token; + LassoSaml2Assertion *assertion = NULL; + + epr = lasso_identity_get_endpoint_reference(identity, LASSO_IDWSF2_DISCO_HREF); + metadata_item = epr->Metadata->any; + for (i = g_list_first(metadata_item); i != NULL; i = g_list_next(i)) { + if (LASSO_IS_IDWSF2_DISCO_SECURITY_CONTEXT(i)) { + security_context = LASSO_IDWSF2_DISCO_SECURITY_CONTEXT(i); + if (security_context->Token != NULL) { + sec_token = security_context->Token->data; + if (LASSO_IS_SAML2_ASSERTION(sec_token->any)) { + assertion = LASSO_SAML2_ASSERTION(sec_token->any); + break; + } + } + } + } + + return assertion; +} + #endif diff --git a/lasso/id-wsf-2.0/identity.h b/lasso/id-wsf-2.0/identity.h index 3214e79f..546da475 100644 --- a/lasso/id-wsf-2.0/identity.h +++ b/lasso/id-wsf-2.0/identity.h @@ -31,6 +31,11 @@ extern "C" { #include <lasso/xml/id-wsf-2.0/disco_svc_metadata.h> #include <lasso/xml/id-wsf-2.0/disco_service_type.h> +#include <lasso/xml/id-wsf-2.0/disco_security_context.h> +#include <lasso/xml/id-wsf-2.0/sec_token.h> + +#include <lasso/xml/saml-2.0/saml2_assertion.h> + #include <lasso/xml/ws/wsa_endpoint_reference.h> LASSO_EXPORT gint lasso_identity_add_svc_metadata(LassoIdentity *identity, @@ -45,6 +50,8 @@ LASSO_EXPORT gint lasso_identity_add_endpoint_reference(LassoIdentity *identity, LASSO_EXPORT LassoWsAddrEndpointReference* lasso_identity_get_endpoint_reference( LassoIdentity *identity, const gchar *service_type); +LASSO_EXPORT LassoSaml2Assertion* lasso_identity_assertion_identity_token(LassoIdentity *identity); + #ifdef __cplusplus } #endif /* __cplusplus */ |
