• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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