1c2b37d2cSopenharmony_ci/*
2c2b37d2cSopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3c2b37d2cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c2b37d2cSopenharmony_ci * you may not use this file except in compliance with the License.
5c2b37d2cSopenharmony_ci * You may obtain a copy of the License at
6c2b37d2cSopenharmony_ci *
7c2b37d2cSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8c2b37d2cSopenharmony_ci *
9c2b37d2cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c2b37d2cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c2b37d2cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c2b37d2cSopenharmony_ci * See the License for the specific language governing permissions and
13c2b37d2cSopenharmony_ci * limitations under the License.
14c2b37d2cSopenharmony_ci */
15c2b37d2cSopenharmony_ci
16c2b37d2cSopenharmony_ci#include "account_event_provider.h"
17c2b37d2cSopenharmony_ci#include "account_info.h"
18c2b37d2cSopenharmony_ci#ifdef HAS_CES_PART
19c2b37d2cSopenharmony_ci#include <common_event_data.h>
20c2b37d2cSopenharmony_ci#include <common_event_support.h>
21c2b37d2cSopenharmony_ci#endif // HAS_CES_PART
22c2b37d2cSopenharmony_ci#include "account_log_wrapper.h"
23c2b37d2cSopenharmony_ci#ifdef HAS_CES_PART
24c2b37d2cSopenharmony_ci#include "common_event_manager.h"
25c2b37d2cSopenharmony_ci#include "want.h"
26c2b37d2cSopenharmony_ci#endif // HAS_CES_PART
27c2b37d2cSopenharmony_ci#include "account_hisysevent_adapter.h"
28c2b37d2cSopenharmony_ci#include "hitrace_adapter.h"
29c2b37d2cSopenharmony_ci#include "common_event_constant.h"
30c2b37d2cSopenharmony_ci
31c2b37d2cSopenharmony_ci#ifdef HAS_CES_PART
32c2b37d2cSopenharmony_ciusing namespace OHOS::EventFwk;
33c2b37d2cSopenharmony_ci#endif // HAS_CES_PART
34c2b37d2cSopenharmony_ci
35c2b37d2cSopenharmony_cinamespace OHOS {
36c2b37d2cSopenharmony_cinamespace AccountSA {
37c2b37d2cSopenharmony_cibool AccountEventProvider::EventPublish(const std::string& event, int32_t userId, const DomainAccountEventData *report)
38c2b37d2cSopenharmony_ci{
39c2b37d2cSopenharmony_ci#ifdef HAS_CES_PART
40c2b37d2cSopenharmony_ci    Want want;
41c2b37d2cSopenharmony_ci    want.SetAction(event);
42c2b37d2cSopenharmony_ci    CommonEventData data;
43c2b37d2cSopenharmony_ci    if (event == EventFwk::CommonEventSupport::COMMON_EVENT_USER_INFO_UPDATED) {
44c2b37d2cSopenharmony_ci        data.SetCode(userId);
45c2b37d2cSopenharmony_ci    } else if (event == EventFwk::CommonEventSupport::COMMON_EVENT_DOMAIN_ACCOUNT_STATUS_CHANGED) {
46c2b37d2cSopenharmony_ci        if (report == nullptr) {
47c2b37d2cSopenharmony_ci            ACCOUNT_LOGE("Report is nullptr");
48c2b37d2cSopenharmony_ci            return false;
49c2b37d2cSopenharmony_ci        }
50c2b37d2cSopenharmony_ci        want.SetParam("domain", report->domainAccountInfo.domain_);
51c2b37d2cSopenharmony_ci        want.SetParam("accountName", report->domainAccountInfo.accountName_);
52c2b37d2cSopenharmony_ci        want.SetParam("event", report->event);
53c2b37d2cSopenharmony_ci        want.SetParam("status", report->status);
54c2b37d2cSopenharmony_ci    } else {
55c2b37d2cSopenharmony_ci        want.SetParam("userId", userId);
56c2b37d2cSopenharmony_ci    }
57c2b37d2cSopenharmony_ci
58c2b37d2cSopenharmony_ci    data.SetWant(want);
59c2b37d2cSopenharmony_ci    StartTraceAdapter("Ohos account event publish.");
60c2b37d2cSopenharmony_ci    /* publish */
61c2b37d2cSopenharmony_ci    if (!CommonEventManager::PublishCommonEvent(data)) {
62c2b37d2cSopenharmony_ci        ACCOUNT_LOGE("PublishCommonEvent failed! event %{public}s. userId is %{public}d", event.c_str(), userId);
63c2b37d2cSopenharmony_ci        ReportOhosAccountOperationFail(userId, EVENT_PUBLISH, false, "PublishCommonEvent failed");
64c2b37d2cSopenharmony_ci        FinishTraceAdapter();
65c2b37d2cSopenharmony_ci        return false;
66c2b37d2cSopenharmony_ci    } else {
67c2b37d2cSopenharmony_ci        ACCOUNT_LOGI("PublishCommonEvent succeed! event %{public}s.", event.c_str());
68c2b37d2cSopenharmony_ci    }
69c2b37d2cSopenharmony_ci    FinishTraceAdapter();
70c2b37d2cSopenharmony_ci#else // HAS_CES_PART
71c2b37d2cSopenharmony_ci    ACCOUNT_LOGI("No common event part, do not publish anything! event %{public}s.", event.c_str());
72c2b37d2cSopenharmony_ci#endif // HAS_CES_PART
73c2b37d2cSopenharmony_ci    return true;
74c2b37d2cSopenharmony_ci}
75c2b37d2cSopenharmony_ci
76c2b37d2cSopenharmony_cibool AccountEventProvider::EventPublishAsUser(const std::string& event, int32_t userId)
77c2b37d2cSopenharmony_ci{
78c2b37d2cSopenharmony_ci    if (userId == UNDEFINED_USER) {
79c2b37d2cSopenharmony_ci        ACCOUNT_LOGE("EventPublishAsUser failed, userId is UNDEFINED_USER");
80c2b37d2cSopenharmony_ci        return EventPublish(event, userId, nullptr);
81c2b37d2cSopenharmony_ci    }
82c2b37d2cSopenharmony_ci#ifdef HAS_CES_PART
83c2b37d2cSopenharmony_ci    Want want;
84c2b37d2cSopenharmony_ci    want.SetAction(event);
85c2b37d2cSopenharmony_ci    CommonEventData data;
86c2b37d2cSopenharmony_ci    if (event == EventFwk::CommonEventSupport::COMMON_EVENT_USER_INFO_UPDATED) {
87c2b37d2cSopenharmony_ci        data.SetCode(userId);
88c2b37d2cSopenharmony_ci    } else {
89c2b37d2cSopenharmony_ci        want.SetParam("userId", userId);
90c2b37d2cSopenharmony_ci    }
91c2b37d2cSopenharmony_ci
92c2b37d2cSopenharmony_ci    data.SetWant(want);
93c2b37d2cSopenharmony_ci    StartTraceAdapter("Ohos account event publish.");
94c2b37d2cSopenharmony_ci    /* publish */
95c2b37d2cSopenharmony_ci    if (!CommonEventManager::PublishCommonEventAsUser(data, userId)) {
96c2b37d2cSopenharmony_ci        ACCOUNT_LOGE("PublishCommonEventAsUser failed! event %{public}s. userId is %{public}d", event.c_str(), userId);
97c2b37d2cSopenharmony_ci        ReportOhosAccountOperationFail(userId, EVENT_PUBLISH, false, "PublishCommonEventAsUser failed");
98c2b37d2cSopenharmony_ci        FinishTraceAdapter();
99c2b37d2cSopenharmony_ci        return false;
100c2b37d2cSopenharmony_ci    } else {
101c2b37d2cSopenharmony_ci        ACCOUNT_LOGI("PublishCommonEventAsUser succeed! event %{public}s.", event.c_str());
102c2b37d2cSopenharmony_ci    }
103c2b37d2cSopenharmony_ci    FinishTraceAdapter();
104c2b37d2cSopenharmony_ci#else // HAS_CES_PART
105c2b37d2cSopenharmony_ci    ACCOUNT_LOGI("No common event part, do not publish anything! event %{public}s.", event.c_str());
106c2b37d2cSopenharmony_ci#endif // HAS_CES_PART
107c2b37d2cSopenharmony_ci    return true;
108c2b37d2cSopenharmony_ci}
109c2b37d2cSopenharmony_ci} // namespace AccountSA
110c2b37d2cSopenharmony_ci} // namespace OHOS