1 /*
2 * Copyright (c) 2022-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 "iplugin.h"
17 #include <string_ex.h>
18
19 namespace OHOS {
20 namespace EDM {
GetPolicyName()21 std::string IPlugin::GetPolicyName()
22 {
23 return policyName_;
24 }
25
NeedSavePolicy()26 bool IPlugin::NeedSavePolicy()
27 {
28 return needSave_;
29 }
30
IsGlobalPolicy()31 bool IPlugin::IsGlobalPolicy()
32 {
33 return isGlobal_;
34 }
35
GetAllPermission()36 std::vector<IPlugin::PolicyPermissionConfig> IPlugin::GetAllPermission()
37 {
38 std::vector<IPlugin::PolicyPermissionConfig> allPermission;
39 if (!permissionMap_.empty()) {
40 for (auto &it : permissionMap_) {
41 allPermission.push_back(it.second);
42 }
43 } else {
44 allPermission.push_back(permissionConfig_);
45 }
46 return allPermission;
47 }
48
GetPermission(FuncOperateType operaType,PermissionType permissionType,std::string permissionTag)49 std::string IPlugin::GetPermission(FuncOperateType operaType, PermissionType permissionType, std::string permissionTag)
50 {
51 if (!permissionMap_.empty() && permissionMap_.find(operaType) != permissionMap_.end()) {
52 PolicyPermissionConfig config = permissionMap_[operaType];
53 return CheckAndGetPermissionFromConfig(permissionType, permissionTag, config.tagPermissions,
54 config.typePermissions);
55 }
56 return CheckAndGetPermissionFromConfig(permissionType, permissionTag, permissionConfig_.tagPermissions,
57 permissionConfig_.typePermissions);
58 }
59
CheckAndGetPermissionFromConfig(PermissionType permissionType,const std::string & permissionTag,std::map<std::string,std::map<PermissionType,std::string>> tagPermissions,std::map<PermissionType,std::string> typePermissions)60 std::string IPlugin::CheckAndGetPermissionFromConfig(PermissionType permissionType, const std::string &permissionTag,
61 std::map<std::string, std::map<PermissionType, std::string>> tagPermissions,
62 std::map<PermissionType, std::string> typePermissions)
63 {
64 if (!permissionTag.empty() && !tagPermissions.empty()) {
65 auto it = tagPermissions.find(permissionTag);
66 if (it == tagPermissions.end()) {
67 return NONE_PERMISSION_MATCH;
68 }
69
70 const auto &typePermissionsForTag = it->second;
71 if (typePermissionsForTag.size() == 1) {
72 return typePermissionsForTag.begin()->second;
73 }
74 if (typePermissionsForTag.size() > 1) {
75 auto typeIt = typePermissionsForTag.find(permissionType);
76 if (typeIt != typePermissionsForTag.end()) {
77 return typeIt->second;
78 }
79 }
80 }
81 if (!typePermissions.empty()) {
82 if (typePermissions.size() == 1) {
83 return typePermissions.begin()->second;
84 }
85 if (typePermissions.size() > 1) {
86 auto typeIt = typePermissions.find(permissionType);
87 if (typeIt != typePermissions.end()) {
88 return typeIt->second;
89 }
90 }
91 }
92 return NONE_PERMISSION_MATCH;
93 }
94
GetApiType(FuncOperateType operaType)95 IPlugin::ApiType IPlugin::GetApiType(FuncOperateType operaType)
96 {
97 if (permissionConfig_.apiType == ApiType::UNKNOWN &&
98 permissionMap_.find(operaType) != permissionMap_.end()) {
99 return permissionMap_[operaType].apiType;
100 }
101 return permissionConfig_.apiType;
102 }
103
GetCode()104 std::uint32_t IPlugin::GetCode()
105 {
106 return policyCode_;
107 }
108
GetBasicPluginCode()109 std::uint32_t IPlugin::GetBasicPluginCode()
110 {
111 return basicPluginCode_;
112 }
113
SetBasicPluginCode(std::uint32_t basicPluginCode)114 void IPlugin::SetBasicPluginCode(std::uint32_t basicPluginCode)
115 {
116 basicPluginCode_ = basicPluginCode;
117 }
118
GetOthersMergePolicyData(const std::string & adminName,int32_t userId,std::string & othersMergePolicyData)119 ErrCode IPlugin::GetOthersMergePolicyData(const std::string &adminName, int32_t userId,
120 std::string &othersMergePolicyData)
121 {
122 return ERR_OK;
123 }
124
WritePolicyToParcel(const std::string & policyJsonData,MessageParcel & reply)125 ErrCode IPlugin::WritePolicyToParcel(const std::string &policyJsonData, MessageParcel &reply)
126 {
127 return reply.WriteString(policyJsonData) ? ERR_OK : ERR_EDM_OPERATE_PARCEL;
128 }
129
SetExtensionPlugin(std::shared_ptr<IPlugin> extensionPlugin)130 void IPlugin::SetExtensionPlugin(std::shared_ptr<IPlugin> extensionPlugin)
131 {
132 extensionPlugin_ = extensionPlugin;
133 }
134
ResetExtensionPlugin()135 void IPlugin::ResetExtensionPlugin()
136 {
137 if (extensionPlugin_ != nullptr) {
138 extensionPlugin_.reset();
139 }
140 }
141
GetExtensionPlugin()142 std::shared_ptr<IPlugin> IPlugin::GetExtensionPlugin()
143 {
144 return extensionPlugin_;
145 }
146
SetExecuteStrategy(std::shared_ptr<IPluginExecuteStrategy> strategy)147 void IPlugin::SetExecuteStrategy(std::shared_ptr<IPluginExecuteStrategy> strategy)
148 {
149 strategy_ = strategy;
150 }
151
GetExecuteStrategy()152 std::shared_ptr<IPluginExecuteStrategy> IPlugin::GetExecuteStrategy()
153 {
154 return strategy_;
155 }
156
SetPluginType(IPlugin::PluginType type)157 void IPlugin::SetPluginType(IPlugin::PluginType type)
158 {
159 type_ = type;
160 }
161
GetPluginType()162 IPlugin::PluginType IPlugin::GetPluginType()
163 {
164 return type_;
165 }
166
~IPlugin()167 IPlugin::~IPlugin() {}
168 } // namespace EDM
169 } // namespace OHOS
170