diff options
Diffstat (limited to 'neethi/src/assertion_builder.c')
-rw-r--r-- | neethi/src/assertion_builder.c | 513 |
1 files changed, 513 insertions, 0 deletions
diff --git a/neethi/src/assertion_builder.c b/neethi/src/assertion_builder.c new file mode 100644 index 0000000..e6f4064 --- /dev/null +++ b/neethi/src/assertion_builder.c @@ -0,0 +1,513 @@ +/* + * 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; +} |