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