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"(      "permissionRecords": [)");
77     infos.append("\n");
78 
79     ToString::PermissionUsedRecordToString(bundleRecord.permissionRecords, infos);
80 
81     infos.append("      ]");
82     infos.append("\n");
83     infos.append("    }");
84     infos.append("\n");
85 }
86 
PermissionUsedResultToString(const PermissionUsedResult& result, std::string& infos)87 void ToString::PermissionUsedResultToString(const PermissionUsedResult& result, std::string& infos)
88 {
89     if (result.bundleRecords.empty()) {
90         return;
91     }
92     infos.append("{");
93     infos.append("\n");
94     infos.append(R"(  "beginTime": )" + std::to_string(result.beginTimeMillis) + ",\n");
95     infos.append(R"(  "endTime": )" + std::to_string(result.endTimeMillis) + ",\n");
96     infos.append(R"(  "bundleRecords": [)");
97     infos.append("\n");
98 
99     for (const auto& res : result.bundleRecords) {
100         ToString::BundleUsedRecordToString(res, infos);
101     }
102 
103     infos.append("  ]");
104     infos.append("\n");
105     infos.append("}");
106     infos.append("\n");
107 }
108 
PermissionUsedTypeInfoToString(const PermissionUsedTypeInfo& info, std::string& infos)109 void ToString::PermissionUsedTypeInfoToString(const PermissionUsedTypeInfo& info, std::string& infos)
110 {
111     infos.append("{\n");
112     infos.append(R"(  "tokenId": )" + std::to_string(info.tokenId) + ",\n");
113     infos.append(R"(  "permissionName": )" + info.permissionName + ",\n");
114     infos.append(R"(  "usedType": )" + std::to_string(info.type) + ",\n");
115     infos.append("}\n");
116 }
117 } // namespace AccessToken
118 } // namespace Security
119 } // namespace OHOS