1/*
2 * Copyright (c) 2023-2024 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 "accesser.h"
17#include "cJSON.h"
18#include "distributed_device_profile_constants.h"
19#include "macro_utils.h"
20#include "profile_utils.h"
21
22namespace OHOS {
23namespace DistributedDeviceProfile {
24namespace {
25    const std::string TAG = "Accesser";
26}
27Accesser::Accesser()
28    : accesserId_(0),
29    accesserDeviceId_(""),
30    accesserUserId_(-1),
31    accesserAccountId_(""),
32    accesserTokenId_(-1),
33    accesserBundleName_(""),
34    accesserHapSignature_(""),
35    accesserBindLevel_(static_cast<uint32_t>(BindLevel::MIN))
36{
37}
38
39int64_t Accesser::GetAccesserId()
40{
41    return accesserId_;
42}
43
44void Accesser::SetAccesserId(int64_t accesserId)
45{
46    accesserId_ = accesserId;
47}
48
49std::string Accesser::GetAccesserDeviceId() const
50{
51    return accesserDeviceId_;
52}
53
54void Accesser::SetAccesserDeviceId(const std::string& accesserDeviceId)
55{
56    accesserDeviceId_ = accesserDeviceId;
57}
58
59int32_t Accesser::GetAccesserUserId() const
60{
61    return accesserUserId_;
62}
63
64void Accesser::SetAccesserUserId(int32_t accesserUserId)
65{
66    accesserUserId_ = accesserUserId;
67}
68
69std::string Accesser::GetAccesserAccountId() const
70{
71    return accesserAccountId_;
72}
73
74void Accesser::SetAccesserAccountId(const std::string& accesserAccountId)
75{
76    accesserAccountId_ = accesserAccountId;
77}
78
79int64_t Accesser::GetAccesserTokenId() const
80{
81    return accesserTokenId_;
82}
83
84void Accesser::SetAccesserTokenId(int64_t accesserTokenId)
85{
86    accesserTokenId_ = accesserTokenId;
87}
88
89std::string Accesser::GetAccesserBundleName() const
90{
91    return accesserBundleName_;
92}
93
94void Accesser::SetAccesserBundleName(const std::string& accesserBundleName)
95{
96    accesserBundleName_ = accesserBundleName;
97}
98
99std::string Accesser::GetAccesserHapSignature() const
100{
101    return accesserHapSignature_;
102}
103
104void Accesser::SetAccesserHapSignature(const std::string& accesserHapSignature)
105{
106    accesserHapSignature_ = accesserHapSignature;
107}
108
109uint32_t Accesser::GetAccesserBindLevel() const
110{
111    return accesserBindLevel_;
112}
113
114void Accesser::SetAccesserBindLevel(uint32_t accesserBindLevel)
115{
116    accesserBindLevel_ = accesserBindLevel;
117}
118
119bool Accesser::Marshalling(MessageParcel& parcel) const
120{
121    WRITE_HELPER_RET(parcel, Int64, accesserId_, false);
122    WRITE_HELPER_RET(parcel, String, accesserDeviceId_, false);
123    WRITE_HELPER_RET(parcel, Int32, accesserUserId_, false);
124    WRITE_HELPER_RET(parcel, String, accesserAccountId_, false);
125    WRITE_HELPER_RET(parcel, Int64, accesserTokenId_, false);
126    WRITE_HELPER_RET(parcel, String, accesserBundleName_, false);
127    WRITE_HELPER_RET(parcel, String, accesserHapSignature_, false);
128    WRITE_HELPER_RET(parcel, Uint32, accesserBindLevel_, false);
129    return true;
130}
131
132bool Accesser::UnMarshalling(MessageParcel& parcel)
133{
134    READ_HELPER_RET(parcel, Int64, accesserId_, false);
135    READ_HELPER_RET(parcel, String, accesserDeviceId_, false);
136    READ_HELPER_RET(parcel, Int32, accesserUserId_, false);
137    READ_HELPER_RET(parcel, String, accesserAccountId_, false);
138    READ_HELPER_RET(parcel, Int64, accesserTokenId_, false);
139    READ_HELPER_RET(parcel, String, accesserBundleName_, false);
140    READ_HELPER_RET(parcel, String, accesserHapSignature_, false);
141    READ_HELPER_RET(parcel, Uint32, accesserBindLevel_, false);
142    return true;
143}
144
145std::string Accesser::dump() const
146{
147    cJSON* json = cJSON_CreateObject();
148    if (!cJSON_IsObject(json)) {
149        cJSON_Delete(json);
150        return EMPTY_STRING;
151    }
152    cJSON_AddNumberToObject(json, ACCESSER_ID.c_str(), accesserId_);
153    cJSON_AddStringToObject(json, ACCESSER_DEVICE_ID.c_str(),
154        ProfileUtils::GetAnonyString(accesserDeviceId_).c_str());
155    cJSON_AddStringToObject(json, ACCESSER_USER_ID.c_str(),
156        ProfileUtils::GetAnonyString(std::to_string(accesserUserId_)).c_str());
157    cJSON_AddStringToObject(json, ACCESSER_ACCOUNT_ID.c_str(),
158        ProfileUtils::GetAnonyString(accesserAccountId_).c_str());
159    cJSON_AddNumberToObject(json, ACCESSER_TOKEN_ID.c_str(), accesserTokenId_);
160    cJSON_AddStringToObject(json, ACCESSER_BUNDLE_NAME.c_str(), accesserBundleName_.c_str());
161    cJSON_AddStringToObject(json, ACCESSER_HAP_SIGNATURE.c_str(), accesserHapSignature_.c_str());
162    cJSON_AddNumberToObject(json, ACCESSER_BIND_LEVEL.c_str(), accesserBindLevel_);
163    char* jsonChars = cJSON_PrintUnformatted(json);
164    if (jsonChars == NULL) {
165        cJSON_Delete(json);
166        HILOGE("cJSON formatted to string failed!");
167        return EMPTY_STRING;
168    }
169    std::string jsonStr = jsonChars;
170    cJSON_Delete(json);
171    cJSON_free(jsonChars);
172    return jsonStr;
173}
174} // namespace DistributedDeviceProfile
175} // namespace OHOS