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 "napi/native_api.h"
17 #include "filemanagement/fileshare/oh_file_share.h"
18 #include <iostream>
19 #include "native_common.h"
20 #include "filemanagement/fileio/error_code.h"
21 #include "hilog/log.h"
22 #include <malloc.h>
23 #include <js_native_api_types.h>
24 
FileShare_001(napi_env env, napi_callback_info info)25 static napi_value FileShare_001(napi_env env, napi_callback_info info)
26 {
27     static const uint32_t POLICY_NUM = 1;
28     char path[] =
29     "file://com.acts.storage.filesharendk/data/storage/el2/base/files/test1.txt";
30     FileShare_PolicyInfo policy[POLICY_NUM] = {
31         {path, sizeof(path) - 1, FileShare_OperationMode::READ_MODE}};
32     FileShare_PolicyErrorResult* result = nullptr;
33     uint32_t resultNum = 0;
34     auto ret = OH_FileShare_PersistPermission(policy, POLICY_NUM, &result, &resultNum);
35     napi_value result_1 = nullptr;
36     napi_create_int32(env, ret, &result_1);
37     if (result != nullptr) {
38         OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
39     }
40     return result_1;
41 }
42 
FileShare_002(napi_env env, napi_callback_info info)43 static napi_value FileShare_002(napi_env env, napi_callback_info info)
44 {
45     static const uint32_t POLICY_NUM = 2;
46     char path1[] =
47     "file://com.acts.storage.filesharendk/data/storage/el2/base/files/test2.txt";
48     char path2[] =
49     "file://com.acts.storage.filesharendk/data/storage/el2/base/files/test201.txt";
50     FileShare_PolicyInfo policy[POLICY_NUM] = {
51         {path1, sizeof(path1) - 1, FileShare_OperationMode::READ_MODE},
52         {path2, sizeof(path2) - 1, FileShare_OperationMode::WRITE_MODE}};
53     FileShare_PolicyErrorResult* result = nullptr;
54     uint32_t resultNum = 0;
55     auto ret = OH_FileShare_PersistPermission(policy, POLICY_NUM, &result, &resultNum);
56     napi_value result_1 = nullptr;
57     napi_create_int32(env, ret, &result_1);
58     if (result != nullptr) {
59         OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
60     }
61     return result_1;
62 }
63 
FileShare_003(napi_env env, napi_callback_info info)64 static napi_value FileShare_003(napi_env env, napi_callback_info info)
65 {
66     static const uint32_t POLICY_NUM = 1;
67     char path[] =
68     "file://com.acts.storage.filesharendk/data/storage/el2/base/files/test3.txt";
69     FileShare_PolicyInfo policy[POLICY_NUM] = {
70         {path, sizeof(path) - 1, FileShare_OperationMode::READ_MODE}};
71     FileShare_PolicyErrorResult* result = nullptr;
72     uint32_t resultNum = 0;
73     OH_FileShare_PersistPermission(policy, POLICY_NUM, &result, &resultNum);
74     OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
75     auto ret = OH_FileShare_ActivatePermission(policy, POLICY_NUM, &result, &resultNum);
76     napi_value result_1 = nullptr;
77     napi_create_int32(env, ret, &result_1);
78     if (result != nullptr) {
79         OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
80     }
81     return result_1;
82 }
83 
FileShare_004(napi_env env, napi_callback_info info)84 static napi_value FileShare_004(napi_env env, napi_callback_info info)
85 {
86     static const uint32_t POLICY_NUM = 1;
87     char path[] =
88     "file://com.acts.storage.filesharendk/data/storage/el2/base/files/test4.txt";
89     FileShare_PolicyInfo policy[POLICY_NUM] = {
90         {path, sizeof(path) - 1, FileShare_OperationMode::READ_MODE}};
91     FileShare_PolicyErrorResult* result = nullptr;
92     uint32_t resultNum = 0;
93     OH_FileShare_PersistPermission(policy, POLICY_NUM, &result, &resultNum);
94     OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
95     OH_FileShare_ActivatePermission(policy, POLICY_NUM, &result, &resultNum);
96     OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
97     auto ret = OH_FileShare_DeactivatePermission(policy, POLICY_NUM, &result, &resultNum);
98     napi_value result_1 = nullptr;
99     napi_create_int32(env, ret, &result_1);
100     if (result != nullptr) {
101         OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
102     }
103     return result_1;
104 }
105 
FileShare_005(napi_env env, napi_callback_info info)106 static napi_value FileShare_005(napi_env env, napi_callback_info info)
107 {
108     static const uint32_t POLICY_NUM = 1;
109     char path[] =
110     "file://com.acts.storage.filesharendk/data/storage/el2/base/files/test5.txt";
111     FileShare_PolicyInfo policy[POLICY_NUM] = {
112         {path, sizeof(path) - 1, FileShare_OperationMode::READ_MODE}};
113     FileShare_PolicyErrorResult* result = nullptr;
114     uint32_t resultNum = 0;
115     OH_FileShare_PersistPermission(policy, POLICY_NUM, &result, &resultNum);
116     OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
117     auto ret = OH_FileShare_RevokePermission(policy, POLICY_NUM, &result, &resultNum);
118     napi_value result_1 = nullptr;
119     napi_create_int32(env, ret, &result_1);
120     if (result != nullptr) {
121         OH_FileShare_ReleasePolicyErrorResult(result, resultNum);
122     }
123     return result_1;
124 }
125 
FileShare_006(napi_env env, napi_callback_info info)126 static napi_value FileShare_006(napi_env env, napi_callback_info info)
127 {
128     char policyUriCharA[] =
129     "file://com.acts.storage.filesharendk/data/storage/el2/base/files/test6.txt";
130     FileShare_PolicyInfo policyA = {.uri = policyUriCharA,
131                                     .length = sizeof(policyUriCharA) - 1,
132                                     .operationMode =
133                                     FileShare_OperationMode::READ_MODE | FileShare_OperationMode::WRITE_MODE};
134     FileShare_PolicyInfo policiesA[] = {policyA};
135     unsigned int policiesNumA = sizeof(policiesA) / sizeof(policiesA[0]);
136     FileShare_PolicyErrorResult *resultPersist = nullptr;
137     unsigned int resultPersistNum;
138     OH_FileShare_PersistPermission(policiesA, policiesNumA, &resultPersist, &resultPersistNum);
139     OH_FileShare_ReleasePolicyErrorResult(resultPersist, resultPersistNum);
140     bool *result = nullptr;
141     unsigned int resultNum;
142     auto ret = OH_FileShare_CheckPersistentPermission(policiesA, policiesNumA, &result, &resultNum);
143     napi_value result_1 = nullptr;
144     napi_create_int32(env, ret, &result_1);
145     return result_1;
146 }
147 
148 EXTERN_C_START
Init(napi_env env, napi_value exports)149 static napi_value Init(napi_env env, napi_value exports)
150 {
151     napi_property_descriptor desc[] = {
152         { "FileShare_001", nullptr, FileShare_001, nullptr, nullptr, nullptr, napi_default, nullptr },
153         { "FileShare_002", nullptr, FileShare_002, nullptr, nullptr, nullptr, napi_default, nullptr },
154         { "FileShare_003", nullptr, FileShare_003, nullptr, nullptr, nullptr, napi_default, nullptr },
155         { "FileShare_004", nullptr, FileShare_004, nullptr, nullptr, nullptr, napi_default, nullptr },
156         { "FileShare_005", nullptr, FileShare_005, nullptr, nullptr, nullptr, napi_default, nullptr },
157         { "FileShare_006", nullptr, FileShare_006, nullptr, nullptr, nullptr, napi_default, nullptr },
158     };
159     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
160     return exports;
161 }
162 EXTERN_C_END
163 
164 static napi_module demoModule = {
165     .nm_version =1,
166     .nm_flags = 0,
167     .nm_filename = nullptr,
168     .nm_register_func = Init,
169     .nm_modname = "fileshare",
170     .nm_priv = ((void*)0),
171     .reserved = { 0 },
172 };
173 
RegisterEntryModule(void)174 extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
175 {
176     napi_module_register(&demoModule);
177 }
178