• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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