1 /* 2 * Copyright (c) 2021-2022 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 #ifndef INTERFACES_KITS_ACCESSTOKEN_NAPI_INCLUDE_NAPI_ATMANAGER_H_ 16 #define INTERFACES_KITS_ACCESSTOKEN_NAPI_INCLUDE_NAPI_ATMANAGER_H_ 17 18 #include <pthread.h> 19 #include <cstdio> 20 #include <cstring> 21 #include <unistd.h> 22 23 #include "napi/native_api.h" 24 #include "napi/native_node_api.h" 25 26 namespace OHOS { 27 namespace Security { 28 namespace AccessToken { 29 const int AT_PERM_OPERA_FAIL = -1; 30 const int AT_PERM_OPERA_SUCC = 0; 31 const int VALUE_BUFFER_SIZE = 256; 32 const int ASYNC_CALL_BACK_VALUES_NUM = 2; 33 const int VERIFY_OR_FLAG_INPUT_MAX_VALUES = 2; 34 const int GRANT_OR_REVOKE_INPUT_MAX_VALUES = 4; 35 36 static thread_local napi_ref atManagerRef_; 37 const std::string ATMANAGER_CLASS_NAME = "atManager"; 38 39 struct AtManagerAsyncContext { 40 napi_env env = nullptr; 41 uint32_t tokenId = 0; 42 char permissionName[ VALUE_BUFFER_SIZE ] = { 0 }; 43 size_t pNameLen = 0; 44 int flag = 0; 45 int result = AT_PERM_OPERA_FAIL; // default failed 46 47 napi_deferred deferred = nullptr; // promise handle 48 napi_ref callbackRef = nullptr; // callback handle 49 napi_async_work work = nullptr; // work handle 50 }; 51 52 class NapiAtManager { 53 public: 54 static napi_value Init(napi_env env, napi_value exports); 55 56 private: 57 static napi_value JsConstructor(napi_env env, napi_callback_info cbinfo); 58 static napi_value CreateAtManager(napi_env env, napi_callback_info cbInfo); 59 static napi_value VerifyAccessToken(napi_env env, napi_callback_info info); 60 static napi_value GrantUserGrantedPermission(napi_env env, napi_callback_info info); 61 static napi_value RevokeUserGrantedPermission(napi_env env, napi_callback_info info); 62 static napi_value GetPermissionFlags(napi_env env, napi_callback_info info); 63 64 static void ParseInputVerifyPermissionOrGetFlag(const napi_env env, const napi_callback_info info, 65 AtManagerAsyncContext& asyncContext); 66 static void VerifyAccessTokenExecute(napi_env env, void *data); 67 static void VerifyAccessTokenComplete(napi_env env, napi_status status, void *data); 68 static void ParseInputGrantOrRevokePermission(const napi_env env, const napi_callback_info info, 69 AtManagerAsyncContext& asyncContext); 70 static void GrantUserGrantedPermissionExcute(napi_env env, void *data); 71 static void GrantUserGrantedPermissionComplete(napi_env env, napi_status status, void *data); 72 static void RevokeUserGrantedPermissionExcute(napi_env env, void *data); 73 static void RevokeUserGrantedPermissionComplete(napi_env env, napi_status status, void *data); 74 static void GetPermissionFlagsExcute(napi_env env, void *data); 75 static void GetPermissionFlagsComplete(napi_env env, napi_status status, void *data); 76 static void SetNamedProperty(napi_env env, napi_value dstObj, const int32_t objValue, const char *propName); 77 }; 78 } // namespace AccessToken 79 } // namespace Security 80 } // namespace OHOS 81 /* 82 * function for module exports 83 */ 84 static napi_value Init(napi_env env, napi_value exports); 85 86 #endif /* INTERFACES_KITS_ACCESSTOKEN_NAPI_INCLUDE_NAPI_ATMANAGER_H_ */ 87