| /* |
| * 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 <neethi_assertion_builder.h> |
| |
| AXIS2_EXTERN neethi_assertion_t *AXIS2_CALL |
| neethi_assertion_builder_build( |
| const axutil_env_t *env, |
| axiom_node_t *node, |
| axiom_element_t *element) |
| { |
| axis2_char_t *localname = NULL; |
| axis2_char_t *ns = NULL; |
| axutil_qname_t *node_qname = NULL; |
| |
| localname = axiom_element_get_localname(element, env); |
| if(!localname) |
| { |
| AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get localname from element."); |
| return NULL; |
| } |
| |
| node_qname = axiom_element_get_qname(element, env, node); |
| if(!node_qname) |
| { |
| AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get qname from element %s.", |
| localname); |
| return NULL; |
| } |
| |
| ns = axutil_qname_get_uri(node_qname, env); |
| if(!ns) |
| { |
| AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Cannot get namespace from element %s.", |
| localname); |
| return NULL; |
| } |
| |
| if(!(axutil_strcmp(ns, RP_SP_NS_11) && axutil_strcmp(ns, RP_SP_NS_12))) |
| { |
| /* if namespace is WS-SecurityPolicy Namespace */ |
| if(!axutil_strcmp(localname, RP_TRANSPORT_BINDING)) |
| { |
| return rp_transport_binding_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_ASYMMETRIC_BINDING)) |
| { |
| return rp_asymmetric_binding_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_SYMMETRIC_BINDING)) |
| { |
| return rp_symmetric_binding_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_TRANSPORT_TOKEN)) |
| { |
| return rp_transport_token_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_RECIPIENT_TOKEN)) |
| { |
| return rp_recipient_token_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_INITIATOR_TOKEN)) |
| { |
| return rp_initiator_token_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_PROTECTION_TOKEN)) |
| { |
| return rp_protection_token_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_ENCRYPTION_TOKEN)) |
| { |
| return rp_encryption_token_builder_build(env, node, element); |
| } |
| |
| else if(!axutil_strcmp(localname, RP_SIGNATURE_TOKEN)) |
| { |
| return rp_signature_token_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_X509_TOKEN)) |
| { |
| return rp_x509_token_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_SECURITY_CONTEXT_TOKEN)) |
| { |
| return rp_security_context_token_builder_build(env, node, element, ns, AXIS2_FALSE); |
| } |
| else if(!axutil_strcmp(localname, RP_SECURE_CONVERSATION_TOKEN)) |
| { |
| return rp_security_context_token_builder_build(env, node, element, ns, AXIS2_TRUE); |
| } |
| else if(!axutil_strcmp(localname, RP_ENCRYPT_BEFORE_SIGNING)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_ENCRYPT_BEFORE_SIGNING); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_SIGN_BEFORE_ENCRYPTING)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_SIGN_BEFORE_ENCRYPTING); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_ENCRYPT_SIGNATURE)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_ENCRYPT_SIGNATURE); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_PROTECT_TOKENS)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_PROTECT_TOKENS); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_ONLY_SIGN_ENTIRE_HEADERS_AND_BODY)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_ONLY_SIGN_ENTIRE_HEADERS_AND_BODY); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_REQUIRE_KEY_IDENTIFIRE_REFERENCE)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_REQUIRE_KEY_IDENTIFIRE_REFERENCE); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_REQUIRE_ISSUER_SERIAL_REFERENCE)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_REQUIRE_ISSUER_SERIAL_REFERENCE); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_REQUIRE_EMBEDDED_TOKEN_REFERENCE)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_REQUIRE_EMBEDDED_TOKEN_REFERENCE); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_REQUIRE_THUMBPRINT_REFERENCE)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_REQUIRE_THUMBPRINT_REFERENCE); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_WSS_X509_V1_TOKEN_10)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_X509_V1_TOKEN_10); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_WSS_X509_V3_TOKEN_10)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_X509_V3_TOKEN_10); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_ALGORITHM_SUITE)) |
| { |
| return rp_algorithmsuite_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_LAYOUT)) |
| { |
| return rp_layout_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_USERNAME_TOKEN)) |
| { |
| return rp_username_token_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_SIGNED_SUPPORTING_TOKENS)) |
| { |
| return rp_supporting_tokens_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_SUPPORTING_TOKENS)) |
| { |
| return rp_supporting_tokens_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_ENDORSING_SUPPORTING_TOKENS)) |
| { |
| return rp_supporting_tokens_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_SIGNED_ENDORSING_SUPPORTING_TOKENS)) |
| { |
| return rp_supporting_tokens_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_WSS10)) |
| { |
| return rp_wss10_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_WSS11)) |
| { |
| return rp_wss11_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_TRUST10)) |
| { |
| return rp_trust10_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_TRUST13)) |
| { |
| /* we can still use rp_trust10 structures */ |
| return rp_trust10_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_INCLUDE_TIMESTAMP)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_INCLUDE_TIMESTAMP); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_HTTPS_TOKEN)) |
| { |
| return rp_https_token_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_WSS_USERNAME_TOKEN_10)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_USERNAME_TOKEN_10); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_WSS_USERNAME_TOKEN_11)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_USERNAME_TOKEN_11); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_KEY_IDENTIFIER)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_MUST_SUPPORT_REF_KEY_IDENTIFIER); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_ISSUER_SERIAL)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_MUST_SUPPORT_REF_ISSUER_SERIAL); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_EXTERNAL_URI)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_MUST_SUPPORT_REF_EXTERNAL_URI); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_EMBEDDED_TOKEN)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_MUST_SUPPORT_REF_EMBEDDED_TOKEN); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_SIGNED_PARTS)) |
| { |
| return rp_signed_encrypted_parts_builder_build(env, node, element, AXIS2_TRUE); |
| } |
| else if(!axutil_strcmp(localname, RP_ENCRYPTED_PARTS)) |
| { |
| return rp_signed_encrypted_parts_builder_build(env, node, element, AXIS2_FALSE); |
| } |
| else if(!axutil_strcmp(localname, RP_BOOTSTRAP_POLICY)) |
| { |
| return rp_bootstrap_policy_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_THUMBPRINT)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_MUST_SUPPORT_REF_THUMBPRINT); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_REF_ENCRYPTED_KEY)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_MUST_SUPPORT_REF_ENCRYPTED_KEY); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_REQUIRE_SIGNATURE_CONFIRMATION)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_REQUIRE_SIGNATURE_CONFIRMATION); |
| return assertion; |
| } |
| |
| else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_CLIENT_CHALLENGE)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_MUST_SUPPORT_CLIENT_CHALLENGE); |
| return assertion; |
| } |
| |
| else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_SERVER_CHALLENGE)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_MUST_SUPPORT_SERVER_CHALLENGE); |
| return assertion; |
| } |
| |
| else if(!axutil_strcmp(localname, RP_REQUIRE_CLIENT_ENTROPY)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_REQUIRE_CLIENT_ENTROPY); |
| return assertion; |
| } |
| |
| else if(!axutil_strcmp(localname, RP_REQUIRE_SERVER_ENTROPHY)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_REQUIRE_SERVER_ENTROPHY); |
| return assertion; |
| } |
| |
| else if(!axutil_strcmp(localname, RP_MUST_SUPPORT_ISSUED_TOKENS)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_MUST_SUPPORT_ISSUED_TOKENS); |
| return assertion; |
| } |
| |
| else if(!axutil_strcmp(localname, RP_REQUIRE_DERIVED_KEYS)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| if(!axutil_strcmp(ns, RP_SP_NS_11)) |
| { |
| /* derived key should be as defined in WS-SecConversation 1.0 */ |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC10); |
| } |
| else |
| { |
| /* derived key should be as defined in WS-SecConversation 1.3 */ |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_REQUIRE_DERIVED_KEYS_SC13); |
| } |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_REQUIRE_EXTERNAL_URI_REFERENCE)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_REQUIRE_EXTERNAL_URI); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_SC10_SECURITY_CONTEXT_TOKEN)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_SC10_SECURITY_CONTEXT_TOKEN); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_SC13_SECURITY_CONTEXT_TOKEN)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_SC13_SECURITY_CONTEXT_TOKEN); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_ISSUER)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| axis2_char_t *issuer = NULL; |
| |
| issuer = axiom_element_get_text(element, env, node); |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, issuer, ASSERTION_TYPE_ISSUER); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_REQUIRE_EXTERNAL_REFERENCE)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_REQUIRE_EXTERNAL_REFERENCE); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_REQUIRE_INTERNAL_REFERENCE)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_REQUIRE_INTERNAL_REFERENCE); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_ISSUED_TOKEN)) |
| { |
| return rp_issued_token_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_SAML_TOKEN)) |
| { |
| return rp_saml_token_builder_build(env, node, element); |
| } |
| else if(!axutil_strcmp(localname, RP_WSS_SAML_V10_TOKEN_V10)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_SAML_V10_TOKEN_V10); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_WSS_SAML_V10_TOKEN_V11)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_SAML_V10_TOKEN_V11); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_WSS_SAML_V11_TOKEN_V10)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_SAML_V11_TOKEN_V10); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_WSS_SAML_V11_TOKEN_V11)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_SAML_V11_TOKEN_V11); |
| return assertion; |
| } |
| else if(!axutil_strcmp(localname, RP_WSS_SAML_V20_TOKEN_V11)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, ASSERTION_TYPE_WSS_SAML_V20_TOKEN_V11); |
| return assertion; |
| } |
| } |
| else if(!axutil_strcmp(ns, RP_RAMPART_NS)) |
| { |
| /* if namespace is Rampart Namespace */ |
| if(!axutil_strcmp(localname, RP_RAMPART_CONFIG)) |
| { |
| return rp_rampart_config_builder_build(env, node, element); |
| } |
| } |
| else if(!axutil_strcmp(ns, AXIS2_MTOM_POLICY_NS)) |
| { |
| if(!axutil_strcmp(localname, AXIS2_OPTIMIZED_MIME_SERIALIZATION)) |
| { |
| neethi_assertion_t *assertion = NULL; |
| assertion = neethi_assertion_create(env); |
| neethi_assertion_set_value(assertion, env, NULL, |
| ASSERTION_TYPE_OPTIMIZED_MIME_SERIALIZATION); |
| return assertion; |
| } |
| } |
| else if((!axutil_strcmp(ns, AXIS2_RM_POLICY_10_NS)) || (!axutil_strcmp(ns, |
| AXIS2_RM_POLICY_11_NS))) |
| { |
| if(!axutil_strcmp(localname, AXIS2_RM_RMASSERTION)) |
| { |
| return axis2_rm_assertion_builder_build(env, node, element); |
| } |
| } |
| |
| /* This assertion cannot be processed */ |
| AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NEETHI_UNKNOWN_ASSERTION, AXIS2_FAILURE); |
| AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[neethi] Unknown Assertion %s with namespace %s", |
| localname, ns); |
| return NULL; |
| } |