1c2b37d2cSopenharmony_ci/*
2c2b37d2cSopenharmony_ci * Copyright (c) 2021-2022 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_helper_data.h"
17c2b37d2cSopenharmony_ci#include <fstream>
18c2b37d2cSopenharmony_ci#include <iostream>
19c2b37d2cSopenharmony_ci#include <nlohmann/json.hpp>
20c2b37d2cSopenharmony_ci#include <vector>
21c2b37d2cSopenharmony_ci#include "account_log_wrapper.h"
22c2b37d2cSopenharmony_ci#include "file_ex.h"
23c2b37d2cSopenharmony_ci
24c2b37d2cSopenharmony_cinamespace OHOS {
25c2b37d2cSopenharmony_cinamespace AccountSA {
26c2b37d2cSopenharmony_ciusing json = nlohmann::json;
27c2b37d2cSopenharmony_cinamespace {
28c2b37d2cSopenharmony_ciconst std::string ACCOUNTMGR_HELPER_JSON_FILE = "/system/etc/account/accountmgr_helper.json";
29c2b37d2cSopenharmony_ciconst std::string KEY_BUNDLE_NAME_LIST = "BundleNameTrustList";
30c2b37d2cSopenharmony_ciconst std::string KEY_ACCOUNT_EVENT_MAP = "AccountEventMap";
31c2b37d2cSopenharmony_ciconst std::string KEY_ACCOUNT_EVENT_LOGIN = "LOGIN";
32c2b37d2cSopenharmony_ciconst std::string KEY_ACCOUNT_EVENT_LOGOUT = "LOGOUT";
33c2b37d2cSopenharmony_ciconst std::string KEY_ACCOUNT_EVENT_TOKEN_INVALID = "TOKEN_INVALID";
34c2b37d2cSopenharmony_ciconst std::string KEY_ACCOUNT_EVENT_LOGOFF = "LOGOFF";
35c2b37d2cSopenharmony_ci
36c2b37d2cSopenharmony_cistatic bool ParseJsonData(nlohmann::json &jsonData)
37c2b37d2cSopenharmony_ci{
38c2b37d2cSopenharmony_ci    if (!FileExists(ACCOUNTMGR_HELPER_JSON_FILE)) {
39c2b37d2cSopenharmony_ci        ACCOUNT_LOGI("File %{public}s not exist, empty default!", ACCOUNTMGR_HELPER_JSON_FILE.c_str());
40c2b37d2cSopenharmony_ci        return false;
41c2b37d2cSopenharmony_ci    }
42c2b37d2cSopenharmony_ci
43c2b37d2cSopenharmony_ci    std::ifstream fin(ACCOUNTMGR_HELPER_JSON_FILE);
44c2b37d2cSopenharmony_ci    if (!fin) {
45c2b37d2cSopenharmony_ci        ACCOUNT_LOGE("Failed to open file %{public}s", ACCOUNTMGR_HELPER_JSON_FILE.c_str());
46c2b37d2cSopenharmony_ci        return false;
47c2b37d2cSopenharmony_ci    }
48c2b37d2cSopenharmony_ci
49c2b37d2cSopenharmony_ci    jsonData = json::parse(fin, nullptr, false);
50c2b37d2cSopenharmony_ci    if (jsonData.is_discarded() || !jsonData.is_structured()) {
51c2b37d2cSopenharmony_ci        ACCOUNT_LOGE("not valid json file!");
52c2b37d2cSopenharmony_ci        fin.close();
53c2b37d2cSopenharmony_ci        return false;
54c2b37d2cSopenharmony_ci    }
55c2b37d2cSopenharmony_ci    fin.close();
56c2b37d2cSopenharmony_ci    return true;
57c2b37d2cSopenharmony_ci}
58c2b37d2cSopenharmony_ci}
59c2b37d2cSopenharmony_ci
60c2b37d2cSopenharmony_cistd::map<std::string, std::string> AccountHelperData::GetAccountEventMap()
61c2b37d2cSopenharmony_ci{
62c2b37d2cSopenharmony_ci    std::map<std::string, std::string> result = {};
63c2b37d2cSopenharmony_ci    nlohmann::json jsonData;
64c2b37d2cSopenharmony_ci    if (!ParseJsonData(jsonData)) {
65c2b37d2cSopenharmony_ci        return result;
66c2b37d2cSopenharmony_ci    }
67c2b37d2cSopenharmony_ci
68c2b37d2cSopenharmony_ci    if ((jsonData.find(KEY_ACCOUNT_EVENT_MAP) != jsonData.end()) && (jsonData.at(KEY_ACCOUNT_EVENT_MAP).is_array())) {
69c2b37d2cSopenharmony_ci        result = jsonData.at(KEY_ACCOUNT_EVENT_MAP).get<std::map<std::string, std::string>>();
70c2b37d2cSopenharmony_ci    }
71c2b37d2cSopenharmony_ci
72c2b37d2cSopenharmony_ci    return result;
73c2b37d2cSopenharmony_ci}
74c2b37d2cSopenharmony_ci} // namespace AccountSA
75c2b37d2cSopenharmony_ci} // namespace OHOS
76