1/*
2 * Copyright (c) 2021-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 FOUNDATION_APPEXECFWK_SERVICES_BUNDLEMGR_INCLUDE_BUNDLE_PARSER_H
17#define FOUNDATION_APPEXECFWK_SERVICES_BUNDLEMGR_INCLUDE_BUNDLE_PARSER_H
18
19#include <set>
20#include <string>
21
22#include "app_privilege_capability.h"
23#include "appexecfwk_errors.h"
24#include "default_permission.h"
25#include "inner_bundle_info.h"
26#include "pre_scan_info.h"
27
28namespace OHOS {
29namespace AppExecFwk {
30class BundleParser {
31private:
32    bool CheckRouterData(nlohmann::json data) const;
33public:
34    static bool ReadFileIntoJson(const std::string &filePath, nlohmann::json &jsonBuf);
35    /**
36     * @brief Parse bundle by the path name, then save in innerBundleInfo info.
37     * @param pathName Indicates the path of Bundle.
38     * @param innerBundleInfo Indicates the obtained InnerBundleInfo object.
39     * @return Returns ERR_OK if the bundle successfully parsed; returns ErrCode otherwise.
40     */
41    ErrCode Parse(
42        const std::string &pathName,
43        InnerBundleInfo &innerBundleInfo) const;
44
45    ErrCode ParsePackInfo(const std::string &pathName, BundlePackInfo &bundlePackInfo) const;
46    /**
47     * @brief Parse bundle by the path name, then save in innerBundleInfo info.
48     * @param pathName Indicates the path of Bundle.
49     * @param sysCaps Indicates the sysCap.
50     * @return Returns ERR_OK if the bundle successfully parsed; returns ErrCode otherwise.
51     */
52    ErrCode ParseSysCap(const std::string &pathName, std::vector<std::string> &sysCaps) const;
53    /**
54     * @brief Parse scanInfos by the configFile.
55     * @param configFile Indicates the path of configFile.
56     * @param scanInfos Indicates the obtained InnerBundleInfo object.
57     * @return Returns ERR_OK if the bundle successfully parsed; returns ErrCode otherwise.
58     */
59    ErrCode ParsePreInstallConfig(
60        const std::string &configFile, std::set<PreScanInfo> &scanInfos) const;
61    /**
62     * @brief Parse bundleNames by the configFile.
63     * @param configFile Indicates the path of configFile.
64     * @param uninstallList Indicates the uninstallList.
65     * @return Returns ERR_OK if the bundle successfully parsed; returns ErrCode otherwise.
66     */
67    ErrCode ParsePreUnInstallConfig(
68        const std::string &configFile,
69        std::set<std::string> &uninstallList) const;
70    /**
71     * @brief Parse PreBundleConfigInfo by the configFile.
72     * @param configFile Indicates the path of configFile.
73     * @param preBundleConfigInfos Indicates the obtained preBundleConfigInfo object.
74     * @return Returns ERR_OK if the bundle successfully parsed; returns ErrCode otherwise.
75     */
76    ErrCode ParsePreInstallAbilityConfig(
77        const std::string &configFile, std::set<PreBundleConfigInfo> &preBundleConfigInfos) const;
78
79    /**
80     * @brief Parse default permission file, then save in DefaultPermission info.
81     * @param permissionFile Indicates the permissionFile.
82     * @param defaultPermissions Indicates the obtained DefaultPermission object.
83     * @return Returns ERR_OK if the bundle successfully parsed; returns ErrCode otherwise.
84     */
85    ErrCode ParseDefaultPermission(
86        const std::string &permissionFile, std::set<DefaultPermission> &defaultPermissions) const;
87
88    /**
89     * @brief Parse default extension type name file, then save in ParseExtensionTypeConfig info.
90     * @param configFile Indicates the path of configFile.
91     * @param extensionTypeList Indicates the obtained extension type name list.
92     * @return Returns ERR_OK if the extensionType successfully parsed; returns ErrCode otherwise.
93     */
94    ErrCode ParseExtTypeConfig(
95        const std::string &configFile, std::set<std::string> &extensionTypeList) const;
96
97    /**
98     * @brief Parse router map json file, then return router map info if necessary.
99     * @param configFile Indicates the path of configFile.
100     * @param routerArray Indicates the obtained router item list.
101     * @return Returns ERR_OK if the router info successfully parsed; returns ErrCode otherwise.
102     */
103    ErrCode ParseRouterArray(
104        const std::string &configFile, std::vector<RouterItem> &routerArray) const;
105
106    static ErrCode ParseNoDisablingList(const std::string &configPath, std::vector<std::string> &noDisablingList);
107};
108}  // namespace AppExecFwk
109}  // namespace OHOS
110#endif  // FOUNDATION_APPEXECFWK_SERVICES_BUNDLEMGR_INCLUDE_BUNDLE_PARSER_H
111