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 
20 namespace OHOS {
21 namespace Security {
22 namespace AccessToken {
DetailUsedRecordToString(bool isAccessDetail,const std::vector<UsedRecordDetail> & detailRecord,std::string & infos)23 void ToString::DetailUsedRecordToString(
24     bool isAccessDetail, const std::vector<UsedRecordDetail>& detailRecord, std::string& infos)
25 {
26     if (isAccessDetail) {
27         infos.append(R"(          "accessRecords": [)");
28     } else {
29         infos.append(R"(          "rejectRecords": [)");
30     }
31     infos.append("\n");
32     for (const auto& detail : detailRecord) {
33         infos.append("            {");
34         infos.append("\n");
35         infos.append(R"(              "status": ")" + std::to_string(detail.status) + R"(")" + ",\n");
36         infos.append(R"(              "lockScreenStatus": ")" + std::to_string(
37             detail.lockScreenStatus) + R"(")" + ",\n");
38         infos.append(R"(              "timestamp": ")" + std::to_string(detail.timestamp) + R"(")" + ",\n");
39         infos.append(R"(              "duration": )" + std::to_string(detail.accessDuration) + ",\n");
40         infos.append(R"(              "count": )" + std::to_string(detail.count) + ",\n");
41         infos.append(R"(              "usedType": )" + std::to_string(detail.type) + ",\n");
42         infos.append("            },");
43         infos.append("\n");
44     }
45 
46     infos.append("          ]");
47     infos.append("\n");
48 }
49 
PermissionUsedRecordToString(const std::vector<PermissionUsedRecord> & permissionRecords,std::string & infos)50 void ToString::PermissionUsedRecordToString(
51     const std::vector<PermissionUsedRecord>& permissionRecords, std::string& infos)
52 {
53     for (const auto& perm : permissionRecords) {
54         infos.append("        {");
55         infos.append("\n");
56         infos.append(R"(          "permissionName": ")" + perm.permissionName + R"(")" + ",\n");
57         infos.append(R"(          "accessCount": ")" + std::to_string(perm.accessCount) + R"(")" + ",\n");
58         infos.append(R"(          "rejectCount": )" + std::to_string(perm.rejectCount) + ",\n");
59         infos.append(R"(          "lastAccessTime": )" + std::to_string(perm.lastAccessTime) + ",\n");
60         infos.append(R"(          "lastRejectTime": )" + std::to_string(perm.lastRejectTime) + ",\n");
61         infos.append(R"(          "lastAccessDuration": )" + std::to_string(perm.lastAccessDuration) + ",\n");
62         ToString::DetailUsedRecordToString(true, perm.accessRecords, infos);
63         ToString::DetailUsedRecordToString(false, perm.rejectRecords, infos);
64         infos.append("        },");
65         infos.append("\n");
66     }
67 }
68 
BundleUsedRecordToString(const BundleUsedRecord & bundleRecord,std::string & infos)69 void ToString::BundleUsedRecordToString(const BundleUsedRecord& bundleRecord, std::string& infos)
70 {
71     infos.append("    {");
72     infos.append("\n");
73     infos.append(R"(      "tokenId": )" + std::to_string(bundleRecord.tokenId) + ",\n");
74     infos.append(R"(      "isRemote": )" + std::to_string(bundleRecord.isRemote) + ",\n");
75     infos.append(R"(      "bundleName": )" + bundleRecord.bundleName + ",\n");
76     infos.append(R"(      "deviceId": )" + ConstantCommon::EncryptDevId(bundleRecord.deviceId) + ",\n");
77     infos.append(R"(      "permissionRecords": [)");
78     infos.append("\n");
79 
80     ToString::PermissionUsedRecordToString(bundleRecord.permissionRecords, infos);
81 
82     infos.append("      ]");
83     infos.append("\n");
84     infos.append("    }");
85     infos.append("\n");
86 }
87 
PermissionUsedResultToString(const PermissionUsedResult & result,std::string & infos)88 void ToString::PermissionUsedResultToString(const PermissionUsedResult& result, std::string& infos)
89 {
90     if (result.bundleRecords.empty()) {
91         return;
92     }
93     infos.append("{");
94     infos.append("\n");
95     infos.append(R"(  "beginTime": )" + std::to_string(result.beginTimeMillis) + ",\n");
96     infos.append(R"(  "endTime": )" + std::to_string(result.endTimeMillis) + ",\n");
97     infos.append(R"(  "bundleRecords": [)");
98     infos.append("\n");
99 
100     for (const auto& res : result.bundleRecords) {
101         ToString::BundleUsedRecordToString(res, infos);
102     }
103 
104     infos.append("  ]");
105     infos.append("\n");
106     infos.append("}");
107     infos.append("\n");
108 }
109 
PermissionUsedTypeInfoToString(const PermissionUsedTypeInfo & info,std::string & infos)110 void ToString::PermissionUsedTypeInfoToString(const PermissionUsedTypeInfo& info, std::string& infos)
111 {
112     infos.append("{\n");
113     infos.append(R"(  "tokenId": )" + std::to_string(info.tokenId) + ",\n");
114     infos.append(R"(  "permissionName": )" + info.permissionName + ",\n");
115     infos.append(R"(  "usedType": )" + std::to_string(info.type) + ",\n");
116     infos.append("}\n");
117 }
118 } // namespace AccessToken
119 } // namespace Security
120 } // namespace OHOS