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