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
20namespace OHOS {
21namespace Security {
22namespace AccessToken {
23void 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
50void 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
69void 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
87void 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
109void 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