1f7a47986Sopenharmony_ci/*
2f7a47986Sopenharmony_ci * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3f7a47986Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4f7a47986Sopenharmony_ci * you may not use this file except in compliance with the License.
5f7a47986Sopenharmony_ci * You may obtain a copy of the License at
6f7a47986Sopenharmony_ci *
7f7a47986Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8f7a47986Sopenharmony_ci *
9f7a47986Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10f7a47986Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11f7a47986Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12f7a47986Sopenharmony_ci * See the License for the specific language governing permissions and
13f7a47986Sopenharmony_ci * limitations under the License.
14f7a47986Sopenharmony_ci */
15f7a47986Sopenharmony_ci
16f7a47986Sopenharmony_ci#include "policy_manager.h"
17f7a47986Sopenharmony_ci#include <algorithm>
18f7a47986Sopenharmony_ci#include <ctime>
19f7a47986Sopenharmony_ci#include <fstream>
20f7a47986Sopenharmony_ci#include <unistd.h>
21f7a47986Sopenharmony_ci#include "directory_ex.h"
22f7a47986Sopenharmony_ci#include "edm_log.h"
23f7a47986Sopenharmony_ci
24f7a47986Sopenharmony_cinamespace OHOS {
25f7a47986Sopenharmony_cinamespace EDM {
26f7a47986Sopenharmony_ci
27f7a47986Sopenharmony_ciErrCode PolicyManager::GetAdminByPolicyName(const std::string &policyName, AdminValueItemsMap &adminValueItems,
28f7a47986Sopenharmony_ci    int32_t userId)
29f7a47986Sopenharmony_ci{
30f7a47986Sopenharmony_ci    auto userPolicyMgr = GetUserPolicyMgr(userId);
31f7a47986Sopenharmony_ci    return userPolicyMgr->GetAdminByPolicyName(policyName, adminValueItems);
32f7a47986Sopenharmony_ci}
33f7a47986Sopenharmony_ci
34f7a47986Sopenharmony_ciErrCode PolicyManager::GetPolicy(const std::string &adminName, const std::string &policyName, std::string &policyValue,
35f7a47986Sopenharmony_ci    int32_t userId)
36f7a47986Sopenharmony_ci{
37f7a47986Sopenharmony_ci    auto userPolicyMgr = GetUserPolicyMgr(userId);
38f7a47986Sopenharmony_ci    return userPolicyMgr->GetPolicy(adminName, policyName, policyValue);
39f7a47986Sopenharmony_ci}
40f7a47986Sopenharmony_ci
41f7a47986Sopenharmony_civoid PolicyManager::Init(std::vector<int32_t> userIds)
42f7a47986Sopenharmony_ci{
43f7a47986Sopenharmony_ci    for (auto userId : userIds) {
44f7a47986Sopenharmony_ci        EDMLOGI("PolicyManager::Init userId %{public}d", userId);
45f7a47986Sopenharmony_ci        if (userId == EdmConstants::DEFAULT_USER_ID) {
46f7a47986Sopenharmony_ci            defaultPolicyMgr_ = std::make_shared<UserPolicyManager>(userId);
47f7a47986Sopenharmony_ci            defaultPolicyMgr_->Init();
48f7a47986Sopenharmony_ci        } else {
49f7a47986Sopenharmony_ci            std::shared_ptr<UserPolicyManager> userPolicyMgr = std::make_shared<UserPolicyManager>(userId);
50f7a47986Sopenharmony_ci            userPolicyMgr->Init();
51f7a47986Sopenharmony_ci            policyMgrMap_.insert(std::make_pair(userId, userPolicyMgr));
52f7a47986Sopenharmony_ci        }
53f7a47986Sopenharmony_ci    }
54f7a47986Sopenharmony_ci    return;
55f7a47986Sopenharmony_ci}
56f7a47986Sopenharmony_ci
57f7a47986Sopenharmony_ciErrCode PolicyManager::SetPolicy(const std::string &adminName, const std::string &policyName,
58f7a47986Sopenharmony_ci    const std::string &adminPolicyValue, const std::string &mergedPolicyValue,
59f7a47986Sopenharmony_ci    int32_t userId)
60f7a47986Sopenharmony_ci{
61f7a47986Sopenharmony_ci    auto userPolicyMgr = GetUserPolicyMgr(userId);
62f7a47986Sopenharmony_ci    return userPolicyMgr->SetPolicy(adminName, policyName, adminPolicyValue, mergedPolicyValue);
63f7a47986Sopenharmony_ci}
64f7a47986Sopenharmony_ci
65f7a47986Sopenharmony_ciErrCode PolicyManager::GetAllPolicyByAdmin(const std::string &adminName, PolicyItemsMap &allAdminPolicy,
66f7a47986Sopenharmony_ci    int32_t userId)
67f7a47986Sopenharmony_ci{
68f7a47986Sopenharmony_ci    auto userPolicyMgr = GetUserPolicyMgr(userId);
69f7a47986Sopenharmony_ci    return userPolicyMgr->GetAllPolicyByAdmin(adminName, allAdminPolicy);
70f7a47986Sopenharmony_ci}
71f7a47986Sopenharmony_ci
72f7a47986Sopenharmony_cistd::shared_ptr<UserPolicyManager> PolicyManager::GetUserPolicyMgr(int32_t userId)
73f7a47986Sopenharmony_ci{
74f7a47986Sopenharmony_ci    EDMLOGD("PolicyManager::GetUserPolicyMgr by userId:%{public}d", userId);
75f7a47986Sopenharmony_ci    if (userId == EdmConstants::DEFAULT_USER_ID) {
76f7a47986Sopenharmony_ci        if (defaultPolicyMgr_ == nullptr) {
77f7a47986Sopenharmony_ci            defaultPolicyMgr_ = std::make_shared<UserPolicyManager>(userId);
78f7a47986Sopenharmony_ci            defaultPolicyMgr_->Init();
79f7a47986Sopenharmony_ci        }
80f7a47986Sopenharmony_ci        return defaultPolicyMgr_;
81f7a47986Sopenharmony_ci    } else {
82f7a47986Sopenharmony_ci        auto itr = policyMgrMap_.find(userId);
83f7a47986Sopenharmony_ci        if (itr != policyMgrMap_.end()) {
84f7a47986Sopenharmony_ci            return itr->second;
85f7a47986Sopenharmony_ci        } else {
86f7a47986Sopenharmony_ci            std::shared_ptr<UserPolicyManager> userPolicyMgr = std::make_shared<UserPolicyManager>(userId);
87f7a47986Sopenharmony_ci            userPolicyMgr->Init();
88f7a47986Sopenharmony_ci            policyMgrMap_.insert(std::make_pair(userId, userPolicyMgr));
89f7a47986Sopenharmony_ci            return userPolicyMgr;
90f7a47986Sopenharmony_ci        }
91f7a47986Sopenharmony_ci    }
92f7a47986Sopenharmony_ci}
93f7a47986Sopenharmony_ci
94f7a47986Sopenharmony_civoid PolicyManager::GetPolicyUserIds(std::vector<int32_t> &userIds)
95f7a47986Sopenharmony_ci{
96f7a47986Sopenharmony_ci    for (const auto& pair : policyMgrMap_) {
97f7a47986Sopenharmony_ci        userIds.push_back(pair.first);
98f7a47986Sopenharmony_ci    }
99f7a47986Sopenharmony_ci}
100f7a47986Sopenharmony_ci
101f7a47986Sopenharmony_civoid PolicyManager::Dump()
102f7a47986Sopenharmony_ci{
103f7a47986Sopenharmony_ci    auto defaultUserPolicyMgr = GetUserPolicyMgr(EdmConstants::DEFAULT_USER_ID);
104f7a47986Sopenharmony_ci    defaultUserPolicyMgr->DumpAdminPolicy();
105f7a47986Sopenharmony_ci    defaultUserPolicyMgr->DumpAdminList();
106f7a47986Sopenharmony_ci    defaultUserPolicyMgr->DumpCombinedPolicy();
107f7a47986Sopenharmony_ci
108f7a47986Sopenharmony_ci    std::vector<int32_t> userIds;
109f7a47986Sopenharmony_ci    GetPolicyUserIds(userIds);
110f7a47986Sopenharmony_ci    EDMLOGD("PolicyManager::Dump userIds size:%{public}zu", userIds.size());
111f7a47986Sopenharmony_ci    for (auto userId : userIds) {
112f7a47986Sopenharmony_ci        auto userPolicyMgr = GetUserPolicyMgr(userId);
113f7a47986Sopenharmony_ci        userPolicyMgr->DumpAdminPolicy();
114f7a47986Sopenharmony_ci        userPolicyMgr->DumpAdminList();
115f7a47986Sopenharmony_ci        userPolicyMgr->DumpCombinedPolicy();
116f7a47986Sopenharmony_ci    }
117f7a47986Sopenharmony_ci}
118f7a47986Sopenharmony_ci} // namespace EDM
119f7a47986Sopenharmony_ci} // namespace OHOS
120