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