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 #include "uninstall_bundle_info.h"
16 
17 namespace OHOS {
18 namespace AppExecFwk {
19 namespace {
20 const char* const KEY_UID = "uid";
21 const char* const KEY_GIDS = "gids";
22 const char* const KEY_ACCESS_TOKENID = "accessTokenId";
23 const char* const KEY_ACCESS_TOKENIDEX = "accessTokenIdEx";
24 const char* const KEY_USER_INFOS = "userInfos";
25 const char* const KEY_APP_ID = "appId";
26 const char* const KEY_BUNDLE_TYPE = "bundleType";
27 const char* const KEY_APP_IDENTIFIER = "appIdentifier";
28 const char* const KEY_APP_PROVISION_TYPE = "appProvisionType";
29 const char* const KEY_EXTENSION_DIRS = "extensionDirs";
30 } // namespace
31 
to_json(nlohmann::json & jsonObject,const UninstallDataUserInfo & uninstallDataUserInfo)32 void to_json(nlohmann::json& jsonObject, const UninstallDataUserInfo& uninstallDataUserInfo)
33 {
34     jsonObject = nlohmann::json {
35         {KEY_UID, uninstallDataUserInfo.uid},
36         {KEY_GIDS, uninstallDataUserInfo.gids},
37         {KEY_ACCESS_TOKENID, uninstallDataUserInfo.accessTokenId},
38         {KEY_ACCESS_TOKENIDEX, uninstallDataUserInfo.accessTokenIdEx}
39     };
40 }
41 
to_json(nlohmann::json & jsonObject,const UninstallBundleInfo & uninstallBundleInfo)42 void to_json(nlohmann::json& jsonObject, const UninstallBundleInfo& uninstallBundleInfo)
43 {
44     jsonObject = nlohmann::json {
45         {KEY_USER_INFOS, uninstallBundleInfo.userInfos},
46         {KEY_APP_ID, uninstallBundleInfo.appId},
47         {KEY_APP_IDENTIFIER, uninstallBundleInfo.appIdentifier},
48         {KEY_APP_PROVISION_TYPE, uninstallBundleInfo.appProvisionType},
49         {KEY_BUNDLE_TYPE, uninstallBundleInfo.bundleType},
50         {KEY_EXTENSION_DIRS, uninstallBundleInfo.extensionDirs}
51     };
52 }
53 
from_json(const nlohmann::json & jsonObject,UninstallDataUserInfo & uninstallDataUserInfo)54 void from_json(const nlohmann::json& jsonObject, UninstallDataUserInfo& uninstallDataUserInfo)
55 {
56     const auto &jsonObjectEnd = jsonObject.end();
57     int32_t parseResult = ERR_OK;
58     GetValueIfFindKey<int32_t>(jsonObject, jsonObjectEnd, KEY_UID,
59         uninstallDataUserInfo.uid, JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
60     GetValueIfFindKey<std::vector<int32_t>>(jsonObject, jsonObjectEnd, KEY_GIDS,
61         uninstallDataUserInfo.gids, JsonType::ARRAY, false, parseResult, ArrayType::NUMBER);
62     GetValueIfFindKey<uint32_t>(jsonObject, jsonObjectEnd, KEY_ACCESS_TOKENID,
63         uninstallDataUserInfo.accessTokenId, JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
64     GetValueIfFindKey<uint64_t>(jsonObject, jsonObjectEnd, KEY_ACCESS_TOKENIDEX,
65         uninstallDataUserInfo.accessTokenIdEx, JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
66     if (parseResult != ERR_OK) {
67         APP_LOGE("read uninstallDataUserInfo from jsonObject error, error code : %{public}d", parseResult);
68     }
69 }
70 
from_json(const nlohmann::json & jsonObject,UninstallBundleInfo & uninstallBundleInfo)71 void from_json(const nlohmann::json& jsonObject, UninstallBundleInfo& uninstallBundleInfo)
72 {
73     const auto &jsonObjectEnd = jsonObject.end();
74     int32_t parseResult = ERR_OK;
75     GetValueIfFindKey<std::map<std::string, UninstallDataUserInfo>>(jsonObject, jsonObjectEnd, KEY_USER_INFOS,
76         uninstallBundleInfo.userInfos, JsonType::OBJECT, false, parseResult, ArrayType::NOT_ARRAY);
77     GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd, KEY_APP_ID, uninstallBundleInfo.appId,
78         JsonType::STRING, false, parseResult, ArrayType::NOT_ARRAY);
79     GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd, KEY_APP_IDENTIFIER, uninstallBundleInfo.appIdentifier,
80         JsonType::STRING, false, parseResult, ArrayType::NOT_ARRAY);
81     GetValueIfFindKey<std::string>(jsonObject, jsonObjectEnd, KEY_APP_PROVISION_TYPE,
82         uninstallBundleInfo.appProvisionType, JsonType::STRING, false, parseResult, ArrayType::NOT_ARRAY);
83     GetValueIfFindKey<BundleType>(jsonObject, jsonObjectEnd, KEY_BUNDLE_TYPE,
84         uninstallBundleInfo.bundleType, JsonType::NUMBER, false, parseResult, ArrayType::NOT_ARRAY);
85     GetValueIfFindKey<std::vector<std::string>>(jsonObject, jsonObjectEnd, KEY_EXTENSION_DIRS,
86         uninstallBundleInfo.extensionDirs, JsonType::ARRAY, false, parseResult, ArrayType::STRING);
87     if (parseResult != ERR_OK) {
88         APP_LOGE("read uninstallBundleInfo from jsonObject error, error code : %{public}d", parseResult);
89     }
90 }
91 
ToString() const92 std::string UninstallBundleInfo::ToString() const
93 {
94     nlohmann::json jsonObject;
95     to_json(jsonObject, *this);
96     return jsonObject.dump();
97 }
98 
Init()99 void UninstallBundleInfo::Init()
100 {
101     userInfos.clear();
102     appId.clear();
103     appIdentifier.clear();
104     appProvisionType.clear();
105     bundleType = BundleType::APP;
106     extensionDirs.clear();
107 }
108 } // namespace AppExecFwk
109 } // namespace OHOS
110