1 /*
2  * Copyright (C) 2023 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 #ifndef JS_INITIALIZE_H
17 #define JS_INITIALIZE_H
18 
19 #include "ability.h"
20 #include "data_ability_helper.h"
21 #include "directory_ex.h"
22 #include "js_task.h"
23 #include "napi_base_context.h"
24 
25 namespace OHOS::Request {
26 static constexpr uint32_t TOKEN_MAX_BYTES = 2048;
27 static constexpr uint32_t TOKEN_MIN_BYTES = 8;
28 static constexpr int ACL_SUCC = 0;
29 static const std::string SA_PERMISSION_RWX = "g:3815:rwx";
30 static const std::string SA_PERMISSION_X = "g:3815:x";
31 static const std::string SA_PERMISSION_CLEAN = "g:3815:---";
32 static const std::string AREA1 = "/data/storage/el1/base";
33 static const std::string AREA2 = "/data/storage/el2/base";
34 static const std::string AREA5 = "/data/storage/el5/base";
35 
36 class JsInitialize {
37 public:
38     JsInitialize() = default;
39     ~JsInitialize() = default;
40 
41     static napi_value Initialize(napi_env env, napi_callback_info info, Version version, bool firstInit = true);
42     static void CreatProperties(napi_env env, napi_value &self, napi_value config, JsTask *task);
43     static napi_status GetContext(
44         napi_env env, napi_value value, std::shared_ptr<OHOS::AbilityRuntime::Context> &context);
45     static bool GetAppBaseDir(std::string &baseDir);
46     static bool CheckBelongAppBaseDir(const std::string &filepath, std::string &baseDir);
47     static void StringSplit(const std::string &str, const char delim, std::vector<std::string> &elems);
48     static void StringTrim(std::string &str);
49     static bool CreateDirs(const std::vector<std::string> &pathDirs);
50     static bool FindDir(const std::string &pathDir);
51 
52 private:
53     static ExceptionError InitParam(
54         napi_env env, napi_value *argv, std::shared_ptr<OHOS::AbilityRuntime::Context> &context, Config &config);
55     static bool ParseConfig(napi_env env, napi_value jsConfig, Config &config, std::string &errInfo);
56     static bool ParseConfigV9(napi_env env, napi_value jsConfig, Config &config, std::string &errInfo);
57     static void SetParseConfig(napi_env env, napi_value jsConfig, Config &config);
58     static bool ParseUploadConfig(napi_env env, napi_value jsConfig, Config &config, std::string &errInfo);
59     static bool ParseDownloadConfig(napi_env env, napi_value jsConfig, Config &config, std::string &errInfo);
60     static bool ParseAction(napi_env env, napi_value jsConfig, Action &action, std::string &errInfo);
61     static bool ParseUrl(napi_env env, napi_value jsConfig, std::string &url, std::string &errInfo);
62     static bool ParseProxy(napi_env env, napi_value jsConfig, std::string &proxy, std::string &errInfo);
63     static bool ParseCertsPath(
64         napi_env env, napi_value jsConfig, std::vector<std::string> &certsPath, std::string &errInfo);
65     static bool ParseData(napi_env env, napi_value jsConfig, Config &config, std::string &errInfo);
66     static bool ParseIndex(napi_env env, napi_value jsConfig, Config &config, std::string &errInfo);
67     static bool ParseName(napi_env env, napi_value jsVal, std::string &name);
68     static bool ParseTitle(napi_env env, napi_value jsConfig, Config &config, std::string &errInfo);
69     static void ParseNetwork(napi_env env, napi_value jsConfig, Network &network);
70     static void ParseCertificatePins(napi_env env, std::string &url, std::string &certificatePins);
71     static void ParseMethod(napi_env env, napi_value jsConfig, Config &config);
72     static void ParseRedirect(napi_env env, napi_value jsConfig, bool &redirect);
73     static void ParseRoaming(napi_env env, napi_value jsConfig, Config &config);
74     static void ParseRetry(napi_env env, napi_value jsConfig, bool &retry);
75     static bool ParseSaveas(napi_env env, napi_value jsConfig, Config &config, std::string &errInfo);
76     static bool ParseToken(napi_env env, napi_value jsConfig, Config &config, std::string &errInfo);
77     static bool ParseDescription(napi_env env, napi_value jsConfig, std::string &description, std::string &errInfo);
78     static int64_t ParseEnds(napi_env env, napi_value jsConfig);
79     static int64_t ParseBegins(napi_env env, napi_value jsConfig);
80     static uint32_t ParsePriority(napi_env env, napi_value jsConfig);
81     static std::map<std::string, std::string> ParseMap(
82         napi_env env, napi_value jsConfig, const std::string &propertyName);
83 
84     static bool GetFormItems(
85         napi_env env, napi_value jsVal, std::vector<FormItem> &forms, std::vector<FileSpec> &files);
86     static bool Convert2FormItems(napi_env env, napi_value jsValue, std::vector<FormItem> &forms,
87         std::vector<FileSpec> &files, std::string &errInfo);
88     static bool Convert2FileSpecs(
89         napi_env env, napi_value jsValue, const std::string &name, std::vector<FileSpec> &files);
90     static bool Convert2FileSpec(napi_env env, napi_value jsValue, const std::string &name, FileSpec &file);
91     static bool GetInternalPath(const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, const Config &config,
92         std::string &path, std::string &errInfo);
93 
94     static bool CheckUploadBodyFiles(const std::string &filePath, Config &config, ExceptionError &error);
95     static bool CheckPathIsFile(const std::string &path, ExceptionError &error);
96     static bool CheckPathOverWrite(const std::string &path, const Config &config, ExceptionError &error);
97     static bool GetFdUpload(const std::string &path, const Config &config, ExceptionError &error);
98     static bool GetFdDownload(const std::string &path, const Config &config, ExceptionError &error);
99     static bool InterceptData(const std::string &str, const std::string &in, std::string &out);
100     static bool IsStageMode(napi_env env, napi_value value);
101     static bool CheckDownloadFilePath(
102         const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, Config &config, std::string &errInfo);
103     static bool StandardizePath(
104         const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, const Config &config, std::string &path);
105     static bool BaseToWhole(const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, std::string &path);
106     static bool CacheToWhole(const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, std::string &path);
107     static bool FileToWhole(
108         const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, const Config &config, std::string &path);
109     static bool WholeToNormal(std::string &path, std::vector<std::string> &out);
110     static bool PathVecToNormal(const std::vector<std::string> &in, std::vector<std::string> &out);
111     static bool IsUserFile(const std::string &filePath);
112     static void StandardizeFileSpec(FileSpec &file);
113     static bool GetSandboxPath(const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, const Config &config,
114         std::string &path, std::vector<std::string> &pathVec, std::string &errInfo);
115     static bool CheckUserFileSpec(const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, const Config &config,
116         FileSpec &file, ExceptionError &error);
117     static bool CheckUploadFileSpec(const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, Config &config,
118         FileSpec &file, ExceptionError &error);
119     static bool CheckDownloadFile(
120         const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, Config &config, ExceptionError &error);
121     static bool CheckUploadFiles(
122         const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, Config &config, ExceptionError &error);
123     static bool CheckFilePath(
124         const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, Config &config, ExceptionError &error);
125 };
126 } // namespace OHOS::Request
127 #endif // JS_INITIALIZE_H
128