1 /*
2 * Copyright (c) 2022 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 #include "to_string.h"
17
18 #include "constant_common.h"
19 #include "permission_map.h"
20
21 namespace OHOS {
22 namespace Security {
23 namespace AccessToken {
DetailUsedRecordToJson(const std::vector<UsedRecordDetail> & detailRecord,CJsonUnique & detailsJson)24 static void DetailUsedRecordToJson(const std::vector<UsedRecordDetail>& detailRecord, CJsonUnique& detailsJson)
25 {
26 for (const auto& detail : detailRecord) {
27 CJsonUnique recordJson = CreateJson();
28 (void)AddIntToJson(recordJson, "status", detail.status);
29 (void)AddIntToJson(recordJson, "lockScreenStatus", detail.lockScreenStatus);
30 (void)AddInt64ToJson(recordJson, "timestamp", detail.timestamp);
31 (void)AddInt64ToJson(recordJson, "duration", detail.accessDuration);
32 (void)AddIntToJson(recordJson, "count", detail.count);
33 (void)AddIntToJson(recordJson, "usedType", detail.type);
34
35 (void)AddObjToArray(detailsJson, recordJson);
36 }
37 }
38
PermissionUsedResultToString(const PermissionUsedResult & result)39 std::string ToString::PermissionUsedResultToString(const PermissionUsedResult& result)
40 {
41 CJsonUnique responseJsion = CreateJson();
42 (void)AddInt64ToJson(responseJsion, "beginTime", result.beginTimeMillis);
43 (void)AddInt64ToJson(responseJsion, "endTime", result.endTimeMillis);
44
45 CJsonUnique bundleRecordsJson = CreateJsonArray();
46 for (const auto& bundleRecord : result.bundleRecords) {
47 CJsonUnique bundleRecordJson = CreateJson();
48 (void)AddUnsignedIntToJson(bundleRecordJson, "tokenId", bundleRecord.tokenId);
49 (void)AddBoolToJson(bundleRecordJson, "isRemote", bundleRecord.isRemote);
50 (void)AddStringToJson(bundleRecordJson, "bundleName", bundleRecord.bundleName);
51
52 CJsonUnique permRecordListJson = CreateJsonArray();
53 for (const auto& permRecord : bundleRecord.permissionRecords) {
54 CJsonUnique permRecordJson = CreateJson();
55 (void)AddStringToJson(permRecordJson, "permissionName", permRecord.permissionName);
56 (void)AddIntToJson(permRecordJson, "accessCount", permRecord.accessCount);
57 (void)AddIntToJson(permRecordJson, "secAccessCount", permRecord.secAccessCount);
58 (void)AddIntToJson(permRecordJson, "rejectCount", permRecord.rejectCount);
59 (void)AddInt64ToJson(permRecordJson, "lastAccessTime", permRecord.lastAccessTime);
60 (void)AddInt64ToJson(permRecordJson, "lastRejectTime", permRecord.lastRejectTime);
61 (void)AddInt64ToJson(permRecordJson, "lastAccessDuration", permRecord.lastAccessDuration);
62
63 CJsonUnique accessDetailsJson = CreateJsonArray();
64 DetailUsedRecordToJson(permRecord.accessRecords, accessDetailsJson);
65 (void)AddObjToJson(permRecordJson, "accessRecords", accessDetailsJson);
66
67 CJsonUnique rejectDetailsJson = CreateJsonArray();
68 DetailUsedRecordToJson(permRecord.rejectRecords, rejectDetailsJson);
69 (void)AddObjToJson(permRecordJson, "rejectRecords", rejectDetailsJson);
70
71 (void)AddObjToArray(permRecordListJson, permRecordJson);
72 }
73 (void)AddObjToJson(bundleRecordJson, "permissionRecords", permRecordListJson);
74 (void)AddObjToArray(bundleRecordsJson, bundleRecordJson);
75 }
76 (void)AddObjToJson(responseJsion, "bundleRecords", bundleRecordsJson);
77 return JsonToStringFormatted(responseJsion.get());
78 }
79
PermissionUsedTypeInfoToString(const std::vector<PermissionUsedTypeInfo> & typeInfos)80 std::string ToString::PermissionUsedTypeInfoToString(const std::vector<PermissionUsedTypeInfo>& typeInfos)
81 {
82 CJsonUnique useTypeInfoJson = CreateJsonArray();
83 for (const auto& usedType : typeInfos) {
84 CJsonUnique tmpJson = CreateJson();
85 (void)AddUnsignedIntToJson(tmpJson, "tokenId", usedType.tokenId);
86 (void)AddStringToJson(tmpJson, "permissionName", usedType.permissionName);
87 (void)AddIntToJson(tmpJson, "type", usedType.type);
88 (void)AddObjToArray(useTypeInfoJson, tmpJson);
89 }
90 return JsonToStringFormatted(useTypeInfoJson.get());
91 }
92
FormatApl(ATokenAplEnum availableLevel)93 static std::string FormatApl(ATokenAplEnum availableLevel)
94 {
95 std::string apl = "";
96 switch (availableLevel) {
97 case ATokenAplEnum::APL_NORMAL:
98 apl = "NORMAL";
99 break;
100 case ATokenAplEnum::APL_SYSTEM_BASIC:
101 apl = "SYSTEM_BASIC";
102 break;
103 case ATokenAplEnum::APL_SYSTEM_CORE:
104 apl = "SYSTEM_CORE";
105 break;
106 default:
107 apl = "invalid apl";
108 break;
109 }
110 return apl;
111 }
112
FormatAvailableType(ATokenAvailableTypeEnum availableType)113 static std::string FormatAvailableType(ATokenAvailableTypeEnum availableType)
114 {
115 std::string type = "";
116 switch (availableType) {
117 case ATokenAvailableTypeEnum::NORMAL:
118 type = "NORMAL";
119 break;
120 case ATokenAvailableTypeEnum::SYSTEM:
121 type = "SYSTEM";
122 break;
123 case ATokenAvailableTypeEnum::MDM:
124 type = "MDM";
125 break;
126 case ATokenAvailableTypeEnum::SYSTEM_AND_MDM:
127 type = "MDM";
128 break;
129 case ATokenAvailableTypeEnum::SERVICE:
130 type = "SERVICE";
131 break;
132 case ATokenAvailableTypeEnum::ENTERPRISE_NORMAL:
133 type = "ENTERPRISE_NORMAL";
134 break;
135 default:
136 type = "invalid type";
137 break;
138 }
139 return type;
140 }
141
PermDefToJson(const PermissionBriefDef & briefDef,CJsonUnique & permDefJson)142 static void PermDefToJson(const PermissionBriefDef& briefDef, CJsonUnique& permDefJson)
143 {
144 std::string grantMode = briefDef.grantMode == GrantMode::USER_GRANT ? "USER_GRANT" : "SYSTEM_GRANT";
145 (void)AddStringToJson(permDefJson, "permissionName", briefDef.permissionName);
146 (void)AddStringToJson(permDefJson, "grantMode", grantMode);
147 (void)AddStringToJson(permDefJson, "availableLevel", FormatApl(briefDef.availableLevel));
148 (void)AddStringToJson(permDefJson, "availableType", FormatAvailableType(briefDef.availableType));
149 (void)AddBoolToJson(permDefJson, "distributedSceneEnable", briefDef.distributedSceneEnable);
150 (void)AddBoolToJson(permDefJson, "isKernelEffect", briefDef.isKernelEffect);
151 (void)AddBoolToJson(permDefJson, "hasValue", briefDef.hasValue);
152 }
153
DumpPermDefinition(const std::string & permissionName)154 std::string ToString::DumpPermDefinition(const std::string& permissionName)
155 {
156 CJsonUnique permDefJson = nullptr;
157 if (permissionName.empty()) {
158 size_t count = GetDefPermissionsSize();
159 permDefJson = CreateJsonArray();
160 for (size_t i = 0; i < count; ++i) {
161 PermissionBriefDef briefDef;
162 GetPermissionBriefDef(i, briefDef);
163 CJsonUnique sinPrmDefJson = CreateJson();
164 PermDefToJson(briefDef, sinPrmDefJson);
165
166 (void)AddObjToArray(permDefJson, sinPrmDefJson);
167 }
168 } else {
169 uint32_t code = 0;
170 if (TransferPermissionToOpcode(permissionName, code)) {
171 PermissionBriefDef briefDef;
172 GetPermissionBriefDef(code, briefDef);
173 permDefJson = CreateJson();
174 PermDefToJson(briefDef, permDefJson);
175 }
176 }
177 return JsonToStringFormatted(permDefJson.get());
178 }
179 } // namespace AccessToken
180 } // namespace Security
181 } // namespace OHOS