1c8a96e64Sopenharmony_ci/* 2c8a96e64Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3c8a96e64Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c8a96e64Sopenharmony_ci * you may not use this file except in compliance with the License. 5c8a96e64Sopenharmony_ci * You may obtain a copy of the License at 6c8a96e64Sopenharmony_ci * 7c8a96e64Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c8a96e64Sopenharmony_ci * 9c8a96e64Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c8a96e64Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c8a96e64Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c8a96e64Sopenharmony_ci * See the License for the specific language governing permissions and 13c8a96e64Sopenharmony_ci * limitations under the License. 14c8a96e64Sopenharmony_ci */ 15c8a96e64Sopenharmony_ci 16c8a96e64Sopenharmony_ci#include <memory> 17c8a96e64Sopenharmony_ci 18c8a96e64Sopenharmony_ci#include "napi/native_node_api.h" 19c8a96e64Sopenharmony_ci#include "api_policy_adapter.h" 20c8a96e64Sopenharmony_ci 21c8a96e64Sopenharmony_ciusing namespace std; 22c8a96e64Sopenharmony_ci 23c8a96e64Sopenharmony_ciextern const char _binary_atomicserviceweb_abc_start[]; 24c8a96e64Sopenharmony_ciextern const char _binary_atomicserviceweb_abc_end[]; 25c8a96e64Sopenharmony_ci 26c8a96e64Sopenharmony_cinamespace HMS::AtomicServiceWeb { 27c8a96e64Sopenharmony_ci static napi_value CheckUrl(napi_env env, napi_callback_info info) 28c8a96e64Sopenharmony_ci { 29c8a96e64Sopenharmony_ci const int indexTwo = 2; 30c8a96e64Sopenharmony_ci size_t requireArgc = 3; 31c8a96e64Sopenharmony_ci size_t argc = 3; 32c8a96e64Sopenharmony_ci napi_value args[3] = { nullptr }; 33c8a96e64Sopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); 34c8a96e64Sopenharmony_ci 35c8a96e64Sopenharmony_ci NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments"); 36c8a96e64Sopenharmony_ci 37c8a96e64Sopenharmony_ci napi_valuetype bundleNameType; 38c8a96e64Sopenharmony_ci NAPI_CALL(env, napi_typeof(env, args[0], &bundleNameType)); 39c8a96e64Sopenharmony_ci 40c8a96e64Sopenharmony_ci napi_valuetype domainTypeType; 41c8a96e64Sopenharmony_ci NAPI_CALL(env, napi_typeof(env, args[1], &domainTypeType)); 42c8a96e64Sopenharmony_ci 43c8a96e64Sopenharmony_ci napi_valuetype urlType; 44c8a96e64Sopenharmony_ci NAPI_CALL(env, napi_typeof(env, args[indexTwo], &urlType)); 45c8a96e64Sopenharmony_ci 46c8a96e64Sopenharmony_ci NAPI_ASSERT(env, bundleNameType == napi_string && domainTypeType == napi_string && urlType == napi_string, 47c8a96e64Sopenharmony_ci "Wrong argument type. String expected."); 48c8a96e64Sopenharmony_ci 49c8a96e64Sopenharmony_ci size_t maxValueLen = 1024; 50c8a96e64Sopenharmony_ci char bundleNameValue[maxValueLen]; 51c8a96e64Sopenharmony_ci size_t bundleNameLength = 0; 52c8a96e64Sopenharmony_ci napi_get_value_string_utf8(env, args[0], bundleNameValue, maxValueLen, &bundleNameLength); 53c8a96e64Sopenharmony_ci std::string bundleName = bundleNameValue; 54c8a96e64Sopenharmony_ci 55c8a96e64Sopenharmony_ci char domainTypeValue[maxValueLen]; 56c8a96e64Sopenharmony_ci size_t domainTypeLength = 0; 57c8a96e64Sopenharmony_ci napi_get_value_string_utf8(env, args[1], domainTypeValue, maxValueLen, &domainTypeLength); 58c8a96e64Sopenharmony_ci std::string domainType = domainTypeValue; 59c8a96e64Sopenharmony_ci 60c8a96e64Sopenharmony_ci char urlValue[maxValueLen]; 61c8a96e64Sopenharmony_ci size_t urlLength = 0; 62c8a96e64Sopenharmony_ci napi_get_value_string_utf8(env, args[indexTwo], urlValue, maxValueLen, &urlLength); 63c8a96e64Sopenharmony_ci std::string url = urlValue; 64c8a96e64Sopenharmony_ci 65c8a96e64Sopenharmony_ci std::shared_ptr<ApiPolicyAdapter> apiPolicyAdapter = std::make_shared<ApiPolicyAdapter>(); 66c8a96e64Sopenharmony_ci int32_t res = apiPolicyAdapter->CheckUrl(bundleName, domainType, url); 67c8a96e64Sopenharmony_ci 68c8a96e64Sopenharmony_ci napi_value result; 69c8a96e64Sopenharmony_ci NAPI_CALL(env, napi_create_double(env, res, &result)); 70c8a96e64Sopenharmony_ci return result; 71c8a96e64Sopenharmony_ci } 72c8a96e64Sopenharmony_ci 73c8a96e64Sopenharmony_ci static napi_value Init(napi_env env, napi_value exports) 74c8a96e64Sopenharmony_ci { 75c8a96e64Sopenharmony_ci napi_property_descriptor desc[] = { 76c8a96e64Sopenharmony_ci DECLARE_NAPI_FUNCTION("checkUrl", CheckUrl), 77c8a96e64Sopenharmony_ci }; 78c8a96e64Sopenharmony_ci NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); 79c8a96e64Sopenharmony_ci return exports; 80c8a96e64Sopenharmony_ci } 81c8a96e64Sopenharmony_ci 82c8a96e64Sopenharmony_ci // Napi get abc code function 83c8a96e64Sopenharmony_ci extern "C" __attribute__((visibility("default"))) 84c8a96e64Sopenharmony_ci void NAPI_atomicservice_AtomicServiceWeb_GetABCCode(const char **buf, int *buflen) 85c8a96e64Sopenharmony_ci { 86c8a96e64Sopenharmony_ci if (buf != nullptr) { 87c8a96e64Sopenharmony_ci *buf = _binary_atomicserviceweb_abc_start; 88c8a96e64Sopenharmony_ci } 89c8a96e64Sopenharmony_ci if (buflen != nullptr) { 90c8a96e64Sopenharmony_ci *buflen = _binary_atomicserviceweb_abc_end - _binary_atomicserviceweb_abc_start; 91c8a96e64Sopenharmony_ci } 92c8a96e64Sopenharmony_ci } 93c8a96e64Sopenharmony_ci 94c8a96e64Sopenharmony_ci /* 95c8a96e64Sopenharmony_ci * Module define 96c8a96e64Sopenharmony_ci */ 97c8a96e64Sopenharmony_ci static napi_module AtomicServiceWebModule = { 98c8a96e64Sopenharmony_ci .nm_version = 1, 99c8a96e64Sopenharmony_ci .nm_flags = 0, 100c8a96e64Sopenharmony_ci .nm_filename = nullptr, 101c8a96e64Sopenharmony_ci .nm_register_func = Init, 102c8a96e64Sopenharmony_ci .nm_modname = "atomicservice.AtomicServiceWeb", 103c8a96e64Sopenharmony_ci .nm_priv = ((void*)0), 104c8a96e64Sopenharmony_ci .reserved = { 0 }, 105c8a96e64Sopenharmony_ci }; 106c8a96e64Sopenharmony_ci 107c8a96e64Sopenharmony_ci /* 108c8a96e64Sopenharmony_ci * Module registerfunction 109c8a96e64Sopenharmony_ci */ 110c8a96e64Sopenharmony_ci extern "C" __attribute__((constructor)) void AtomicServiceWebRegisterModule(void) 111c8a96e64Sopenharmony_ci { 112c8a96e64Sopenharmony_ci napi_module_register(&AtomicServiceWebModule); 113c8a96e64Sopenharmony_ci } 114c8a96e64Sopenharmony_ci} 115