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 "accessee.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 = "Accessee";
26}
27Accessee::Accessee()
28    : accesseeId_(0),
29    accesseeDeviceId_(""),
30    accesseeUserId_(-1),
31    accesseeAccountId_(""),
32    accesseeTokenId_(-1),
33    accesseeBundleName_(""),
34    accesseeHapSignature_(""),
35    accesseeBindLevel_(static_cast<uint32_t>(BindLevel::MIN))
36{
37}
38
39int64_t Accessee::GetAccesseeId()
40{
41    return accesseeId_;
42}
43
44void Accessee::SetAccesseeId(int64_t accesseeId)
45{
46    accesseeId_ = accesseeId;
47}
48
49std::string Accessee::GetAccesseeDeviceId() const
50{
51    return accesseeDeviceId_;
52}
53
54void Accessee::SetAccesseeDeviceId(const std::string& accesseeDeviceId)
55{
56    accesseeDeviceId_ = accesseeDeviceId;
57}
58
59int32_t Accessee::GetAccesseeUserId() const
60{
61    return accesseeUserId_;
62}
63
64void Accessee::SetAccesseeUserId(int32_t accesseeUserId)
65{
66    accesseeUserId_ = accesseeUserId;
67}
68
69std::string Accessee::GetAccesseeAccountId() const
70{
71    return accesseeAccountId_;
72}
73
74void Accessee::SetAccesseeAccountId(const std::string& accesseeAccountId)
75{
76    accesseeAccountId_ = accesseeAccountId;
77}
78
79int64_t Accessee::GetAccesseeTokenId() const
80{
81    return accesseeTokenId_;
82}
83
84void Accessee::SetAccesseeTokenId(int64_t accesseeTokenId)
85{
86    accesseeTokenId_ = accesseeTokenId;
87}
88
89std::string Accessee::GetAccesseeBundleName() const
90{
91    return accesseeBundleName_;
92}
93
94void Accessee::SetAccesseeBundleName(const std::string& accesseeBundleName)
95{
96    accesseeBundleName_ = accesseeBundleName;
97}
98
99std::string Accessee::GetAccesseeHapSignature() const
100{
101    return accesseeHapSignature_;
102}
103
104void Accessee::SetAccesseeHapSignature(const std::string& accesseeHapSignature)
105{
106    accesseeHapSignature_ = accesseeHapSignature;
107}
108
109uint32_t Accessee::GetAccesseeBindLevel() const
110{
111    return accesseeBindLevel_;
112}
113
114void Accessee::SetAccesseeBindLevel(uint32_t accesseeBindLevel)
115{
116    accesseeBindLevel_ = accesseeBindLevel;
117}
118
119bool Accessee::Marshalling(MessageParcel& parcel) const
120{
121    WRITE_HELPER_RET(parcel, Int64, accesseeId_, false);
122    WRITE_HELPER_RET(parcel, String, accesseeDeviceId_, false);
123    WRITE_HELPER_RET(parcel, Int32, accesseeUserId_, false);
124    WRITE_HELPER_RET(parcel, String, accesseeAccountId_, false);
125    WRITE_HELPER_RET(parcel, Int64, accesseeTokenId_, false);
126    WRITE_HELPER_RET(parcel, String, accesseeBundleName_, false);
127    WRITE_HELPER_RET(parcel, String, accesseeHapSignature_, false);
128    WRITE_HELPER_RET(parcel, Uint32, accesseeBindLevel_, false);
129    return true;
130}
131
132bool Accessee::UnMarshalling(MessageParcel& parcel)
133{
134    READ_HELPER_RET(parcel, Int64, accesseeId_, false);
135    READ_HELPER_RET(parcel, String, accesseeDeviceId_, false);
136    READ_HELPER_RET(parcel, Int32, accesseeUserId_, false);
137    READ_HELPER_RET(parcel, String, accesseeAccountId_, false);
138    READ_HELPER_RET(parcel, Int64, accesseeTokenId_, false);
139    READ_HELPER_RET(parcel, String, accesseeBundleName_, false);
140    READ_HELPER_RET(parcel, String, accesseeHapSignature_, false);
141    READ_HELPER_RET(parcel, Uint32, accesseeBindLevel_, false);
142    return true;
143}
144
145std::string Accessee::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, ACCESSEE_ID.c_str(), accesseeId_);
153    cJSON_AddStringToObject(json, ACCESSEE_DEVICE_ID.c_str(),
154        ProfileUtils::GetAnonyString(accesseeDeviceId_).c_str());
155    cJSON_AddStringToObject(json, ACCESSEE_USER_ID.c_str(),
156        ProfileUtils::GetAnonyString(std::to_string(accesseeUserId_)).c_str());
157    cJSON_AddStringToObject(json, ACCESSEE_ACCOUNT_ID.c_str(),
158        ProfileUtils::GetAnonyString(accesseeAccountId_).c_str());
159    cJSON_AddNumberToObject(json, ACCESSEE_TOKEN_ID.c_str(), accesseeTokenId_);
160    cJSON_AddStringToObject(json, ACCESSEE_BUNDLE_NAME.c_str(), accesseeBundleName_.c_str());
161    cJSON_AddStringToObject(json, ACCESSEE_HAP_SIGNATURE.c_str(), accesseeHapSignature_.c_str());
162    cJSON_AddNumberToObject(json, ACCESSEE_BIND_LEVEL.c_str(), accesseeBindLevel_);
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