Added: webservices/rampart/scratch/c/fed/c/src/fed/fed_metadata_om.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/scratch/c/fed/c/src/fed/fed_metadata_om.c?rev=642897&view=auto
==============================================================================
--- webservices/rampart/scratch/c/fed/c/src/fed/fed_metadata_om.c (added)
+++ webservices/rampart/scratch/c/fed/c/src/fed/fed_metadata_om.c Sun Mar 30 
23:25:17 2008
@@ -0,0 +1,912 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *             http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+*/
+#include <fed_metadata_om.h>
+
+struct fed_metadata_om
+{
+       /* Metadata Context Node . full node for a single federation*/
+       axiom_node_t *metadata_om_node;
+
+       /* Federation ID : unique for a given federation*/
+       axis2_char_t *federation_id;
+
+       /* The key that is used to sign the tokens issued by the metadata 
owner*/
+       axiom_node_t *token_signing_key_info_node;
+       axis2_char_t *token_signing_key;
+
+       /* The key that is used to encrypt key and key materials*/
+       axiom_node_t *token_key_transfer_key_info_node;
+       axis2_char_t *token_key_transfer_key;
+
+       /*Token issuers logical name*/
+       axis2_char_t *token_issuer_name;
+
+       /* Indicate a set logical names associated with the issuer*/
+       axutil_array_list_t *issuer_names_offered_list;
+
+       /* Allows a federation metadata provider to specify the end point [STS] 
that can be used to 
+        * get sec tokens to consume metadata provider*/
+       axis2_char_t *token_issuer_end_point;
+
+       /* Allows a federation metadata provider to specify the end point 
address of the pseudonym service */
+       axis2_char_t *pseudonym_service_end_point;
+
+       /* Allows a federation metadata provider to specify the end point 
address of the attribute service */
+       axis2_char_t *attribute_service_end_point;
+
+       /* Allows a federation metadata provider to specify the end point 
address of its subscription service that is used to subscribe to 
+        * fed sign out*/
+       axis2_char_t *single_signout_subscription_end_point;
+
+       /* Allows a federation metadata provider to specify the endpoint 
address to which push notifications of sign-out are to be sent*/
+       axis2_char_t *single_signout_notification_end_point;
+
+       /* Allows a metadata provider to specify the list of token types 
offered by its sts */
+       axutil_array_list_t *token_types_offered_list;
+
+
+       /* Allows a metadata provider to specify list of publicly offered claim 
types that can be asserted in sec tokens issued by its STS */
+       axutil_array_list_t *uri_named_claim_types_offered_list; /* Set of 
axiom_nodes - <ClaimType URI="id"> <DisplayName><Description> ...*/
+
+       /* xs:boolean */
+       int automatic_pseudonyms_element;
+
+
+       /* Generic Implementations for various key types e.g. x509, RSA etc*/
+       /* Function pointers*/
+
+       /* TokenSigningKey : fp*/
+               /*Extract Key*/
+       axis2_char_t* (AXIS2_CALL *extract_token_signing_key) 
(fed_metadata_om_t *metadata_om, const axutil_env_t * env);
+               /*Build OM*/
+       axiom_node_t* (AXIS2_CALL *build_token_signing_info) (fed_metadata_om_t 
*metadata_om, axis2_char_t *token_signing_key, const axutil_env_t * env);
+
+       /*TokenKeyTransferKey : fp*/
+               /*Extract Key*/
+       axis2_char_t* (AXIS2_CALL *extract_token_key_transfer_key_info) 
(fed_metadata_om_t *metadata_om, const axutil_env_t * env);
+               /* Build OM*/
+       axiom_node_t* (AXIS2_CALL *build_token_key_transfer_key_info) 
(fed_metadata_om_t *metadata_om, 
+                       axis2_char_t *token_key_transfer_key, const 
axutil_env_t * env);
+
+};
+
+AXIS2_EXTERN fed_metadata_om_t* AXIS2_CALL
+fed_metadata_om_create(
+               axiom_node_t *metadata_node,
+               const axutil_env_t * env)
+{
+       fed_metadata_om_t *metadata_om = NULL;
+       AXIS2_ENV_CHECK(env, NULL);
+
+       metadata_om = (fed_metadata_om_t *) AXIS2_MALLOC(env->allocator, 
sizeof(fed_metadata_om_t));
+
+        
+       if(!metadata_om)
+       {
+               return NULL;
+       }
+       /*Initializations*/
+       metadata_om->metadata_om_node = metadata_node;
+       metadata_om->extract_token_signing_key = NULL;
+       metadata_om->build_token_signing_info = NULL;
+       metadata_om->extract_token_key_transfer_key_info = NULL;
+       metadata_om->build_token_key_transfer_key_info = NULL;
+
+       /* Create Array List*/
+       metadata_om->token_types_offered_list = axutil_array_list_create(env, 
5);
+       metadata_om->issuer_names_offered_list = axutil_array_list_create(env, 
5);
+       metadata_om->uri_named_claim_types_offered_list = 
axutil_array_list_create(env, 5);
+
+       return metadata_om;
+}
+
+AXIS2_EXTERN void AXIS2_CALL
+fed_metadata_om_free(
+               fed_metadata_om_t *metadata_om,
+               const axutil_env_t * env)
+{
+       AXIS2_ENV_CHECK(env, void);
+
+       if(metadata_om)
+       {
+               AXIS2_FREE(env->allocator, metadata_om);
+       }
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+fed_metadata_om_populate_metadata(
+               fed_metadata_om_t *metadata_om,
+               const axutil_env_t * env)
+{
+       /*Metadata Context*/
+       axiom_element_t *metadata_om_element = NULL;
+       
+       /*TokenSigningKeyInfo*/
+       axiom_node_t *token_signing_key_info_node = NULL;
+       axiom_element_t *token_signing_key_info_element = NULL;
+       axutil_qname_t *token_signing_key_info_qname = NULL;
+
+       /*TokenSigningKeyTransferKeyInfo*/
+       axiom_node_t *token_key_transfer_key_info_node = NULL;
+       axiom_element_t *token_key_transfer_key_info_element = NULL;
+       axutil_qname_t *token_key_transfer_key_info_qname = NULL;
+
+       /*IssuerName*/
+       axiom_node_t *token_issuer_name_node = NULL;
+       axiom_element_t *token_issuer_name_element = NULL;
+       axutil_qname_t *token_issuer_name_qname = NULL;
+
+       /*TokenIssuerEndPoint*/
+       axiom_node_t *token_issuer_endpoint_node = NULL;
+       axiom_element_t *token_issuer_endpoint_element = NULL;
+       axutil_qname_t *token_issuer_endpoint_qname = NULL;
+       axutil_qname_t *token_issuer_endpoint_addr_qname = NULL;
+       axiom_node_t *token_issuer_endpoint_addr_node = NULL;
+       axiom_element_t *token_issuer_endpoint_addr_element = NULL;
+
+       /*TokenTypesOffered*/
+       axiom_node_t *token_types_offered_node = NULL;
+       axiom_element_t *token_types_offered_element = NULL;
+       axutil_qname_t *token_types_offered_qname = NULL;
+       axiom_children_qname_iterator_t *token_types_offered_qname_iter = NULL;
+       axutil_qname_t *token_type_qname = NULL;
+       axiom_node_t *token_type_node = NULL;
+       axiom_element_t *token_type_element = NULL;
+       axutil_qname_t *token_type_uri_attr_qname = NULL;
+
+       /*IssuerNamedOffered*/
+       axiom_node_t *issuer_names_offered_node = NULL;
+       axiom_element_t *issuer_names_offered_element = NULL;
+       axutil_qname_t *issuer_names_offered_qname = NULL;
+       axiom_children_qname_iterator_t *issuer_names_offered_qname_iter = NULL;
+       axutil_qname_t *issuer_name_qname = NULL;
+       axiom_node_t *issuer_name_node = NULL;
+       axiom_element_t *issuer_name_element = NULL;
+       axutil_qname_t *issuer_name_uri_attr_qname = NULL;
+
+       /*UriNamedClaimTypesOffered*/
+       axiom_node_t *uri_named_claim_types_offered_node = NULL;
+       axiom_element_t *uri_named_claim_types_offered_element = NULL;
+       axutil_qname_t *uri_named_claim_types_offered_qname = NULL;
+       axiom_children_qname_iterator_t *uri_named_claim_types_qname_iter = 
NULL;
+       fed_metadata_claim_type_t *uri_named_claim_type = NULL;
+
+
+
+
+       AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+       if(metadata_om->metadata_om_node)
+       {
+               metadata_om_element = (axiom_element_t *) 
+                       
(axiom_node_get_data_element(metadata_om->metadata_om_node, env));
+
+               /*Get Federation ID*/
+        metadata_om->federation_id = 
axiom_element_get_attribute_value_by_name( metadata_om_element, env,
+                                                                   
FED_ATTR_FED_ID);
+
+               
+               /*TokenKeySigningInfo*/
+               token_signing_key_info_qname = axutil_qname_create(env, 
FED_TOKEN_SIGNING_KEY_INFO, 
+                               FED_FED_XML_NS, FED_WSF);
+               token_signing_key_info_element = 
axiom_element_get_first_child_with_qname(metadata_om_element, 
+                               env, token_signing_key_info_qname, 
metadata_om->metadata_om_node, &token_signing_key_info_node);
+                       /* Set TokenSigningInfoNode */
+               metadata_om->token_signing_key_info_node = 
token_signing_key_info_node;
+                       /* Process TokenSigningInfoNode and extract the key : 
using call back fn*/
+               if(metadata_om->extract_token_signing_key)
+               {
+                       /*Set Key value*/
+                       metadata_om->token_signing_key = 
metadata_om->extract_token_signing_key(metadata_om, env);
+               }
+
+               /*TokenKeyTransferKeyInfo*/
+               token_key_transfer_key_info_qname = axutil_qname_create(env, 
FED_TOKEN_KEY_TRANSFER_KEY_INFO, 
+                                               FED_FED_XML_NS, FED_WSF);
+               token_key_transfer_key_info_element = 
axiom_element_get_first_child_with_qname(metadata_om_element,
+                                env, token_key_transfer_key_info_qname,
+                                metadata_om->metadata_om_node, 
&token_key_transfer_key_info_node);
+               metadata_om->token_key_transfer_key_info_node = 
token_key_transfer_key_info_node;
+
+               if(metadata_om->extract_token_key_transfer_key_info)
+               {
+                       metadata_om->token_key_transfer_key = 
metadata_om->extract_token_key_transfer_key_info(
+                                       metadata_om, env);
+               }
+
+               /*TokenIssuerName*/
+               token_issuer_name_qname = axutil_qname_create(env, 
FED_TOKEN_ISSUER_NAME, FED_FED_XML_NS, FED_WSF);
+               token_issuer_name_element = 
axiom_element_get_first_child_with_qname(metadata_om_element,
+                               env, token_issuer_name_qname, 
metadata_om->metadata_om_node, &token_issuer_name_node);
+               if (token_issuer_name_node)
+               {
+                       metadata_om->token_issuer_name = 
axiom_element_get_text(token_issuer_name_element, 
+                                       env, token_issuer_name_node);
+               }
+
+               /*TokenIssuerEndpoint*/
+               token_issuer_endpoint_qname = axutil_qname_create(env, 
FED_TOKEN_ISSUER_END_POINT, FED_FED_XML_NS, FED_WSF);
+               token_issuer_endpoint_element = 
axiom_element_get_first_child_with_qname(metadata_om_element,
+                               env, token_issuer_endpoint_qname, 
metadata_om->metadata_om_node, &token_issuer_endpoint_node);
+               if (token_issuer_endpoint_node)
+               {
+                       
+                       token_issuer_endpoint_addr_qname = 
axutil_qname_create(env, FED_WSA_ADDRESS, FED_WSA_XMLNS, FED_WSA);
+                       token_issuer_endpoint_addr_element = 
axiom_element_get_first_child_with_qname(token_issuer_endpoint_element,
+                                       env, token_issuer_endpoint_addr_qname, 
token_issuer_endpoint_node, &token_issuer_endpoint_addr_node);
+
+                       metadata_om->token_issuer_end_point = 
axiom_element_get_text(token_issuer_endpoint_addr_element, 
+                               env, token_issuer_endpoint_addr_node); 
+               }
+
+
+               /*PseudonymServiceEndpoint*/
+
+               /*AttributeServiceEndpoint*/
+
+               /*SingleSignOutSubscripionEndpoint*/
+
+               /*SingleSignOutNotificationEndpoint*/
+
+
+               /*TokenTypesOffered*/
+               token_types_offered_qname = axutil_qname_create(env, 
FED_TOKEN_TYPES_OFFERED, FED_FED_XML_NS, FED_WSF);
+               token_types_offered_element = 
axiom_element_get_first_child_with_qname(metadata_om_element,
+                               env, token_types_offered_qname, 
metadata_om->metadata_om_node, &token_types_offered_node);
+               
+               if(token_types_offered_node)
+               {
+                       token_type_qname = axutil_qname_create(env, 
FED_TOKEN_TYPE, FED_FED_XML_NS, FED_WSF);
+                       token_types_offered_qname_iter =  
axiom_element_get_children_with_qname(token_types_offered_element, 
+                                       env, token_type_qname, 
token_types_offered_node);
+
+                       
while(axiom_children_qname_iterator_has_next(token_types_offered_qname_iter, 
env))
+                       {
+                               token_type_node = 
axiom_children_qname_iterator_next(token_types_offered_qname_iter, env);
+                               
+                               if(axiom_node_get_node_type(token_type_node, 
env) == AXIOM_ELEMENT)
+                               {
+                                       token_type_element = 
axiom_node_get_data_element(token_type_node, env);
+
+                                       if(token_type_element)
+                                       {
+                                               token_type_uri_attr_qname = 
axutil_qname_create(env, 
+                                                               
FED_ATTR_TOKEN_TYPE_URI, FED_FED_XML_NS, FED_WSF);
+                                               
axutil_array_list_add(metadata_om->token_types_offered_list, env, 
+                                                               
axiom_element_get_attribute_value_by_name( token_type_element, env,
+                                                                       
FED_ATTR_TOKEN_TYPE_URI));
+                                       }
+
+                               }       
+                       }
+                       
+               }
+
+               /*IssuerNamesOffered*/
+               issuer_names_offered_qname = axutil_qname_create(env, 
FED_ISSER_NAMES_OFFERED, FED_FED_XML_NS, FED_WSF);
+               issuer_names_offered_element = 
axiom_element_get_first_child_with_qname(metadata_om_element, 
+                               env, issuer_names_offered_qname, 
metadata_om->metadata_om_node, &issuer_names_offered_node);
+               if(issuer_names_offered_node)
+               {
+                       issuer_name_qname = axutil_qname_create(env, 
FED_ISSER_NAMES_OFFERED_ISSUER_NAME, FED_FED_XML_NS, FED_WSF);
+                       issuer_names_offered_qname_iter = 
axiom_element_get_children_with_qname(issuer_names_offered_element, 
+                                       env, issuer_name_qname, 
issuer_names_offered_node);
+                       
while(axiom_children_qname_iterator_has_next(issuer_names_offered_qname_iter, 
env))
+                       {
+                               issuer_name_node = 
axiom_children_qname_iterator_next(issuer_names_offered_qname_iter, env);
+                               if(axiom_node_get_node_type(issuer_name_node, 
env) == AXIOM_ELEMENT)
+                               {
+                                       issuer_name_element = 
axiom_node_get_data_element(issuer_name_node, env);
+                                       if(issuer_name_element)
+                                       {
+                                               issuer_name_uri_attr_qname =  
axutil_qname_create(env, 
+                                                       FED_ATTR_URI, 
FED_FED_XML_NS, FED_WSF);
+                                               
axutil_array_list_add(metadata_om->issuer_names_offered_list, env, 
+                                                       
axiom_element_get_attribute_value_by_name( issuer_name_element, env,
+                                                               FED_ATTR_URI));
+                                       }
+                               }
+                       }
+               }
+
+               /*UriNamedClaimTypesOffered*/
+               uri_named_claim_types_offered_qname = axutil_qname_create(env, 
FED_URI_NAMED_CLAIM_TYPES_OFFERED,
+                               FED_FED_XML_NS, FED_WSF);
+               uri_named_claim_types_offered_element = 
axiom_element_get_first_child_with_qname(metadata_om_element, 
+                               env, uri_named_claim_types_offered_qname, 
metadata_om->metadata_om_node, 
+                               &uri_named_claim_types_offered_node);
+
+               if(uri_named_claim_types_offered_node)
+               {
+                       axiom_node_t *claim_type_node = NULL;
+                       axiom_element_t *claim_type_element = NULL;
+                       axiom_node_t *display_name_node = NULL;
+                       axiom_element_t *display_name_element = NULL;
+                       axiom_node_t *description_node = NULL;
+                       axiom_element_t *description_element = NULL;
+                       axutil_qname_t *claim_type_qname = NULL;
+                       axutil_qname_t *claim_type_uri_attr_qname = NULL;
+                       axutil_qname_t *display_name_qname = NULL;
+                       axutil_qname_t *description_qname = NULL;
+
+                       /*creating claim type object*/
+                       uri_named_claim_types_offered_qname = 
axutil_qname_create(env, FED_URI_NAMED_CLAIM_TYPES_OFFERED, 
+                                       FED_FED_XML_NS, FED_WSF);
+                       
+                       claim_type_qname = axutil_qname_create(env, 
FED_URI_NAMED_CLAIM_TYPE, FED_FED_XML_NS, FED_WSF);
+
+                       uri_named_claim_types_qname_iter = 
axiom_element_get_children_with_qname(
+                                       uri_named_claim_types_offered_element,
+                                       env, claim_type_qname, 
uri_named_claim_types_offered_node);
+                       
+                       /*Iterating through the claim type elements */
+                       
while(axiom_children_qname_iterator_has_next(uri_named_claim_types_qname_iter, 
env))
+                       {
+                               claim_type_node = 
axiom_children_qname_iterator_next(uri_named_claim_types_qname_iter, env);
+                               if(axiom_node_get_node_type(claim_type_node, 
env) == AXIOM_ELEMENT)
+                               {
+                                       claim_type_element = 
axiom_node_get_data_element(claim_type_node, env);
+                                       if(claim_type_element)
+                                       {
+                                               /*Creating Claim Type object*/
+                                               uri_named_claim_type = 
AXIS2_MALLOC(env->allocator, sizeof(fed_metadata_claim_type_t));
+                                               
uri_named_claim_type->claim_type_uri_attr = NULL;
+                                               
uri_named_claim_type->display_name = NULL;
+                                               
uri_named_claim_type->description = NULL;
+
+                                               if(uri_named_claim_type)
+                                               {
+                                                       /*Processing The Uri 
Attribute*/
+                                                       
claim_type_uri_attr_qname =  axutil_qname_create(env, FED_ATTR_URI, 
FED_FED_XML_NS, FED_WSF);
+                                                       
uri_named_claim_type->claim_type_uri_attr =  
axiom_element_get_attribute_value_by_name( 
+                                                                               
                                                                        
claim_type_element, env,
+                                                                               
                                                                                
                FED_ATTR_URI);
+                                                       /*Processing 
DisplayName element*/
+                                                       display_name_qname = 
axutil_qname_create(env, FED_URI_NAMED_CLAIM_TYPE_DISPLAY_NAME, 
+                                                                       
FED_FED_XML_NS, FED_WSF);
+                                                       display_name_element = 
axiom_element_get_first_child_with_qname(claim_type_element,
+                                                                       env, 
display_name_qname, 
+                                                                       
claim_type_node, &display_name_node);
+                                                       if(display_name_node)
+                                                       {
+                                                               
uri_named_claim_type->display_name = 
axiom_element_get_text(display_name_element,
+                                                                               
                                                                                
                        env, display_name_node);
+                                                       }
+
+                                                       /*Processing 
Description element*/
+                                                       description_qname = 
axutil_qname_create(env, FED_URI_NAMED_CLAIM_TYPE_DESCRIPTION, 
+                                                                       
FED_FED_XML_NS, FED_WSF);
+                                                       description_element = 
axiom_element_get_first_child_with_qname(claim_type_element,
+                                                                       env, 
description_qname, claim_type_node, &description_node);
+                                                       if(description_node)
+                                                       {
+                                                               
uri_named_claim_type->description = axiom_element_get_text(description_element,
+                                                                               
                                            env, description_node);
+                                                       }
+
+                                                       /*Add UriClaimType 
object to the UriNamedClaimType list*/
+                                                       
axutil_array_list_add(metadata_om->uri_named_claim_types_offered_list, env, 
+                                                                       
uri_named_claim_type);
+
+                                               }
+
+                                       }
+                               }
+                       }
+               }
+       }
+}
+
+
+/*Build FED Context OM*/
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL
+fed_metadata_om_build_metadata_om(
+               fed_metadata_om_t *metadata_om,
+               const axutil_env_t *env)
+{
+       axiom_node_t *federation_node = NULL;
+       axiom_element_t *federation_element = NULL;
+       axiom_namespace_t *wsf_ns = NULL;
+       axiom_attribute_t *fed_id_attr = NULL;
+
+       axiom_node_t *token_issuer_name_node = NULL;
+       axiom_element_t *token_issuer_name_element = NULL;
+
+       axiom_node_t *token_issuer_endpoint_node = NULL;
+       axiom_element_t *token_issuer_endpoint_element = NULL;
+       axiom_node_t *token_issuer_endpoint_addr_node = NULL;
+       axiom_element_t *token_issuer_endpoint_addr_element = NULL;
+       axiom_namespace_t *wsa_ns = NULL;
+
+       axiom_node_t *token_types_offered_node = NULL;
+       axiom_element_t *token_types_offered_element = NULL;
+
+       axiom_node_t *issuer_names_offered_node = NULL;
+       axiom_element_t *issuer_names_offered_element = NULL;
+
+       axiom_node_t *uri_named_claim_types_offered_node = NULL;
+       axiom_element_t *uri_named_claim_types_offered_element = NULL;
+       
+       AXIS2_ENV_CHECK(env, NULL);
+       
+       if(metadata_om->federation_id)
+       {
+               wsf_ns = axiom_namespace_create(env, FED_FED_XML_NS, FED_WSF);
+               federation_element = axiom_element_create(env, NULL, 
FED_FEDERATION, wsf_ns, &federation_node);
+               fed_id_attr = axiom_attribute_create(env, FED_ATTR_FED_ID, 
metadata_om->federation_id, NULL);
+               axiom_element_add_attribute(federation_element, env, 
fed_id_attr, federation_node);
+
+               /*Token Key Signing Info*/
+               if(metadata_om->token_signing_key)
+               {
+                       if(metadata_om->build_token_signing_info)
+                       {
+                               axiom_node_t *token_siging_info_node = NULL;
+                               /*Callback function to create the token signing 
key element*/
+                               token_siging_info_node 
=metadata_om->build_token_signing_info(metadata_om, 
+                                               
(axis2_char_t*)metadata_om->token_signing_key, env);
+                       
+                               if(token_siging_info_node)
+                                       axiom_node_add_child(federation_node, 
env, token_siging_info_node);
+                       }
+               }
+
+               /*TokenIssuerName*/
+               if(metadata_om->token_issuer_name)
+               {
+                       token_issuer_name_element = axiom_element_create(env, 
federation_node, FED_TOKEN_ISSUER_NAME, 
+                                       wsf_ns, &token_issuer_name_node);
+                       axiom_element_set_text(token_issuer_name_element, env, 
+                                       metadata_om->token_issuer_name, 
token_issuer_name_node);
+               }
+
+               /*TokenIssuerEndPoint*/
+               if(metadata_om->token_issuer_end_point)
+               {
+                       token_issuer_endpoint_element = 
axiom_element_create(env, federation_node, FED_TOKEN_ISSUER_END_POINT, 
+                                       wsf_ns, &token_issuer_endpoint_node);
+
+                       wsa_ns = axiom_namespace_create(env, FED_WSA_XMLNS, 
FED_WSA);
+
+                       token_issuer_endpoint_addr_element = 
axiom_element_create(env, token_issuer_endpoint_node,
+                                       FED_WSA_ADDRESS, wsa_ns, 
&token_issuer_endpoint_addr_node);
+                       
axiom_element_set_text(token_issuer_endpoint_addr_element, env, 
metadata_om->token_issuer_end_point,
+                                       token_issuer_endpoint_addr_node);
+               }
+
+               /*TokenTypesOffered*/
+               if(metadata_om->token_types_offered_list)
+               {
+                       axiom_node_t *token_type_node = NULL;
+                       axiom_element_t *token_type_element = NULL;
+                       axiom_attribute_t *token_type_uri_attr = NULL;
+                       int list_size = 0;
+                       int index = 0;
+
+                       list_size = axutil_array_list_size( 
metadata_om->token_types_offered_list, env);
+                       
+                       token_types_offered_element = axiom_element_create(env, 
federation_node, FED_TOKEN_TYPES_OFFERED,
+                                       wsf_ns, &token_types_offered_node);
+                       for(index = 0; index < list_size; index++)
+                       {
+                               token_type_element = axiom_element_create(env, 
token_types_offered_node, FED_TOKEN_TYPE, 
+                                               wsf_ns, &token_type_node);
+                               token_type_uri_attr = 
axiom_attribute_create(env, FED_ATTR_TOKEN_TYPE_URI,
+                                               
(axis2_char_t*)axutil_array_list_get(metadata_om->token_types_offered_list, 
env, index), 
+                                               wsf_ns);
+                               axiom_element_add_attribute(token_type_element, 
env, token_type_uri_attr, token_type_node);
+                       }
+
+                       
+               }
+
+               /* IssuerNamesOffered*/
+               if(metadata_om->issuer_names_offered_list)
+               {
+                       axiom_node_t *issuer_name_node = NULL;
+                       axiom_element_t *issuer_name_element = NULL;
+                       axiom_attribute_t *issuer_name_uri_attr = NULL;
+                       int list_size = 0;
+                       int index = 0;
+
+                       list_size = axutil_array_list_size( 
metadata_om->issuer_names_offered_list, env);
+                       issuer_names_offered_element = 
axiom_element_create(env, federation_node, FED_ISSER_NAMES_OFFERED,
+                                                           wsf_ns, 
&issuer_names_offered_node);
+                       for(index = 0; index < list_size; index++)
+                       {
+                               issuer_name_element = axiom_element_create(env, 
issuer_names_offered_node, 
+                                               
FED_ISSER_NAMES_OFFERED_ISSUER_NAME,
+                                               wsf_ns, &issuer_name_node);
+                               issuer_name_uri_attr = 
axiom_attribute_create(env, 
+                                               FED_ATTR_URI,
+                                               
(axis2_char_t*)axutil_array_list_get(metadata_om->issuer_names_offered_list, 
env, index),
+                                               NULL);
+                               
axiom_element_add_attribute(issuer_name_element, env, issuer_name_uri_attr, 
issuer_name_node);
+                       }
+               }
+
+               /*UriNamedClaimTypes*/
+               if(metadata_om->uri_named_claim_types_offered_list)
+               {
+                       fed_metadata_claim_type_t *uri_named_claim_type;
+                       axiom_node_t *claim_type_node = NULL;
+                       axiom_element_t *claim_type_element = NULL;
+                       axiom_attribute_t *claim_type_uri_attr = NULL;
+                       axiom_node_t *display_name_node = NULL;
+                       axiom_element_t *display_name_element = NULL;
+                       axiom_node_t *description_node = NULL;
+                       axiom_element_t *description_element = NULL;
+                       int list_size = 0;
+                       int index = 0;
+
+
+                       list_size = axutil_array_list_size( 
metadata_om->uri_named_claim_types_offered_list, env);
+                       uri_named_claim_types_offered_element =  
axiom_element_create(env, federation_node, 
+                                       FED_URI_NAMED_CLAIM_TYPES_OFFERED,
+                                       wsf_ns, 
&uri_named_claim_types_offered_node);
+                       for(index = 0; index < list_size; index++)
+                       {
+                               claim_type_element = axiom_element_create(env, 
uri_named_claim_types_offered_node,
+                                               FED_URI_NAMED_CLAIM_TYPE,
+                                               wsf_ns, &claim_type_node);
+
+                               uri_named_claim_type = 
(fed_metadata_claim_type_t*)axutil_array_list_get(
+                                               
metadata_om->uri_named_claim_types_offered_list, env, index);
+                               if(uri_named_claim_type)
+                               {
+                                       
if(uri_named_claim_type->claim_type_uri_attr)
+                                       {
+                                               claim_type_uri_attr = 
axiom_attribute_create(env, FED_ATTR_URI, 
+                                                               
uri_named_claim_type->claim_type_uri_attr, NULL);
+                                               
axiom_element_add_attribute(claim_type_element, env, claim_type_uri_attr, 
claim_type_node);
+                                       }
+                                       if(uri_named_claim_type->display_name)
+                                       {
+                                               display_name_element = 
axiom_element_create(env, claim_type_node, 
FED_URI_NAMED_CLAIM_TYPE_DISPLAY_NAME,
+                                                               wsf_ns, 
&display_name_node);
+                                               
axiom_element_set_text(display_name_element, env,
+                                                                               
    uri_named_claim_type->display_name, display_name_node);
+                                       }
+                                       if(uri_named_claim_type->description)
+                                       {
+                                               description_element = 
axiom_element_create(env, claim_type_node, FED_URI_NAMED_CLAIM_TYPE_DESCRIPTION,
+                                                                               
                wsf_ns, &description_node);
+                                               
axiom_element_set_text(description_element, env,
+                                                               
uri_named_claim_type->description, description_node);
+
+                                       }
+                               }
+
+                       }
+               }
+       }
+       
+       if(!federation_element)
+       {
+               AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[fed]Build Fed Context 
Failed");
+               return NULL;
+       }
+
+       
+       return federation_node;
+
+}
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+fed_metadata_om_get_token_signing_key(
+               fed_metadata_om_t *metadata_om,
+               const axutil_env_t *env)
+{
+       if(metadata_om)
+               return metadata_om->token_signing_key;
+       return NULL;
+}
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+fed_metadata_om_get_federation_id(
+               fed_metadata_om_t *metadata_om,
+               const axutil_env_t *env)
+{
+       if(metadata_om)
+       {
+               return metadata_om->federation_id;
+       }
+       return NULL;
+
+}
+
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL
+fed_metadata_om_get_metadata_node(
+               fed_metadata_om_t *metadata_om,
+               const axutil_env_t *env)
+{
+       if(metadata_om)
+       {
+               return metadata_om->metadata_om_node;
+       }
+       return NULL;
+}
+
+
+
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+fed_metadata_om_get_token_issuer_name(
+               fed_metadata_om_t *metadata_om,
+               const axutil_env_t *env)
+{
+       if(metadata_om)
+       {
+               return metadata_om->token_issuer_name;
+       }
+       return NULL;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+fed_metadata_om_get_token_issuer_epr(fed_metadata_om_t *metadata_om,
+               const axutil_env_t *env)
+{
+    if (metadata_om)
+    {
+        return metadata_om->token_issuer_end_point;
+    }
+    return NULL;
+}
+
+AXIS2_EXTERN axutil_array_list_t* AXIS2_CALL
+fed_metadata_om_get_token_types_offered_list(
+               fed_metadata_om_t *metadata_om,
+               const axutil_env_t *env)
+{
+       if(metadata_om)
+       {
+               return metadata_om->token_types_offered_list;
+       }
+       return NULL;
+}
+
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL
+fed_metadata_om_get_token_signing_info_node(
+               fed_metadata_om_t *metadata_om,
+               const axutil_env_t *env)
+{
+       if(metadata_om)
+       {
+               return metadata_om->token_signing_key_info_node;
+       }
+}
+
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL
+fed_metadata_om_get_token_key_transfer_key_info_node(
+               fed_metadata_om_t *metadata_om,
+               const axutil_env_t *env)
+{
+       if(metadata_om)
+       {
+               return metadata_om->token_key_transfer_key_info_node;
+       }
+}
+
+
+
+/*Setters*/
+AXIS2_EXTERN void AXIS2_CALL
+fed_metadata_om_set_token_signing_key(
+               fed_metadata_om_t *metadata_om,         
+               const axutil_env_t *env, 
+                axis2_char_t *signing_key)
+{
+       if(metadata_om)
+       {
+               metadata_om->token_signing_key = signing_key;
+               return;
+       }
+
+}
+
+
+       /*Set Function Pointers*/
+AXIS2_EXTERN void AXIS2_CALL
+fed_metadata_om_set_process_token_key_signing_info_fp(
+               fed_metadata_om_t *metadata_om,         
+               const axutil_env_t *env, 
+                void *processing_logic_fp)
+{
+       if(metadata_om)
+       {
+               metadata_om->extract_token_signing_key = processing_logic_fp;
+               return;
+       }
+}
+
+AXIS2_EXTERN void AXIS2_CALL
+fed_metadata_om_set_build_token_key_signing_info_fp(
+               fed_metadata_om_t *metadata_om,         
+               const axutil_env_t *env, 
+                void *build_logic_fp)
+{
+       if(metadata_om)
+       {
+               metadata_om->build_token_signing_info = build_logic_fp;
+       }
+}
+
+AXIS2_EXTERN void AXIS2_CALL
+fed_metadata_om_set_process_token_key_transfer_key_info_fp(
+               fed_metadata_om_t *metadata_om,         
+               const axutil_env_t *env, 
+                void *processing_logic_fp)
+{
+       if(metadata_om)
+       {
+               metadata_om->extract_token_key_transfer_key_info = 
processing_logic_fp;
+       }
+}
+
+ AXIS2_EXTERN void AXIS2_CALL
+ fed_metadata_om_set_build_token_key_transfer_key_info_fp(
+                fed_metadata_om_t *metadata_om,                 
+                const axutil_env_t *env, 
+                 void *build_logic_fp)
+{
+       if(metadata_om)
+       {
+               metadata_om->build_token_key_transfer_key_info = build_logic_fp;
+       }
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+fed_metadata_om_set_token_issuer_epr(fed_metadata_om_t *metadata_om,
+               const axutil_env_t *env,
+        axis2_char_t *epr)
+{
+    if (!metadata_om)
+    {
+        return AXIS2_FAILURE;
+    }
+    if (metadata_om->token_issuer_end_point)
+    {
+        AXIS2_FREE(metadata_om->token_issuer_end_point);
+    }
+    metadata_om->token_issuer_end_point = axis2_strdup(env, epr);
+    return AXIS2_SUCCESS;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Added: webservices/rampart/scratch/c/fed/c/src/fed/test_main.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/scratch/c/fed/c/src/fed/test_main.c?rev=642897&view=auto
==============================================================================
--- webservices/rampart/scratch/c/fed/c/src/fed/test_main.c (added)
+++ webservices/rampart/scratch/c/fed/c/src/fed/test_main.c Sun Mar 30 23:25:17 
2008
@@ -0,0 +1,143 @@
+/* Test main for Federation Metadata */
+
+#include <stdio.h>
+
+#include <axiom_xml_reader.h>
+#include <axiom.h>
+#include <axutil_utils.h>
+
+#include <fed_federation_metadata.h>
+
+axis2_char_t* AXIS2_CALL token_signing_key_test (fed_metadata_om_t 
*metadata_om, const axutil_env_t * env);
+
+
+int main()
+{
+       axutil_env_t * env = axutil_env_create_all("jaxc.log",4);
+       axiom_xml_reader_t *xml_reader = NULL;
+       axiom_stax_builder_t *xml_stax_builder = NULL;
+       axiom_document_t *om_document = NULL;
+       axiom_node_t* root_node = NULL;
+       
+       axiom_node_t* created_node = NULL;
+       axiom_element_t* created_element = NULL;
+
+       axiom_node_t* first_node = NULL;
+       axiom_element_t* first_element = NULL;
+
+       axis2_char_t *root_text = NULL;
+
+       /*Metadata Testing*/
+       fed_federation_metadata_t *federation_metadata = NULL;
+       fed_metadata_om_t *metadata_om = NULL;
+
+       root_node = axiom_node_create(env);
+       created_node = axiom_node_create(env);
+
+       xml_reader = axiom_xml_reader_create_for_file(env, 
"./fed_metadata.xml", NULL);
+       xml_stax_builder = axiom_stax_builder_create(env, xml_reader);
+       om_document = axiom_document_create( env, NULL, xml_stax_builder);
+
+       /* Created Node is the completed metadata node*/
+       created_node = axiom_document_build_all(om_document, env);
+
+
+       federation_metadata = fed_federation_metadata_create(env);
+       fed_federation_metadata_load_metadata(federation_metadata, env, 
created_node);
+
+       /*Get required Metadata Context*/
+       metadata_om = 
fed_federation_metadata_get_fed_metadata_om(federation_metadata, env, 
"http://contosso.com/fed2";);
+       /*Set TokenSigningKeyInfo element processing call back fn*/
+       fed_metadata_om_set_process_token_key_signing_info_fp(metadata_om, env, 
 token_signing_key_test);
+
+       fed_federation_metadata_populate_all( federation_metadata, env);
+
+       printf("%s\n", 
axiom_node_to_string(fed_federation_metadata_build_all(federation_metadata, 
env), env));
+       
+
+
+       //metadata_om = 
fed_federation_metadata_get_fed_metadata_om(federation_metadata, 
"http://contosso.com/fed2";, env);
+       /*
+       if(fed_metadata_om_get_metadata_node(metadata_om, env))
+               printf("Acquired Metadata Context : %s\n", 
axiom_node_to_string(fed_metadata_om_get_metadata_node(metadata_om, env),
+                               env));
+       //printf("Acquired Metadata Context : %s\n", 
axiom_node_to_string(created_node, env));
+
+       fed_metadata_om_set_process_token_key_signing_info_fp(metadata_om, 
token_signing_key_test, env);
+       fed_metadata_om_populate_metadata(metadata_om, env);
+
+       fed_federation_metadata_populate_all( federation_metadata, env);
+
+       printf("Array lst - %s\n", axutil_array_list_get(
+                       
fed_metadata_om_get_token_types_offered_list(metadata_om, env),
+                       env,
+                       2));
+
+
+       printf("----- K -----Built Node : %s\n", 
+                       
axiom_node_to_string(fed_federation_metadata_build_all(federation_metadata, 
env) , env));
+       
+
+       */
+       return 0;
+}
+
+
+
+
+/* Test for user define token_key_singing_info generic function */
+axis2_char_t* AXIS2_CALL token_signing_key_test (fed_metadata_om_t 
*metadata_om, const axutil_env_t * env)
+{
+       axiom_node_t* token_signing_key_info_node = NULL;
+
+
+       token_signing_key_info_node = 
fed_metadata_om_get_token_signing_info_node(metadata_om, env);
+
+
+
+
+       //printf("Function Ptr Called------------***--------\n");
+       //printf("Acquired Metadata Context : %s\n", 
+       //              
axiom_node_to_string(fed_metadata_om_get_token_signing_info_node(metadata_om, 
env),env));
+                                          
+       return "OK";
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


Reply via email to