• 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 && permissionMap_.count(operaType) > 0) {
98         return permissionMap_[operaType].apiType;
99     }
100     return permissionConfig_.apiType;
101 }
102 
GetCode()103 std::uint32_t IPlugin::GetCode()
104 {
105     return policyCode_;
106 }
107 
MergePolicyData(const std::string & adminName,std::string & mergeJsonData)108 ErrCode IPlugin::MergePolicyData(const std::string &adminName, std::string &mergeJsonData)
109 {
110     return ERR_OK;
111 }
112 
WritePolicyToParcel(const std::string & policyJsonData,MessageParcel & reply)113 ErrCode IPlugin::WritePolicyToParcel(const std::string &policyJsonData, MessageParcel &reply)
114 {
115     return reply.WriteString(policyJsonData) ? ERR_OK : ERR_EDM_OPERATE_PARCEL;
116 }
117 
SetExtensionPlugin(std::shared_ptr<IPlugin> extensionPlugin)118 void IPlugin::SetExtensionPlugin(std::shared_ptr<IPlugin> extensionPlugin)
119 {
120     extensionPlugin_ = extensionPlugin;
121 }
122 
ResetExtensionPlugin()123 void IPlugin::ResetExtensionPlugin()
124 {
125     if (extensionPlugin_ != nullptr) {
126         extensionPlugin_.reset();
127     }
128 }
129 
GetExtensionPlugin()130 std::shared_ptr<IPlugin> IPlugin::GetExtensionPlugin()
131 {
132     return extensionPlugin_;
133 }
134 
SetExecuteStrategy(std::shared_ptr<IPluginExecuteStrategy> strategy)135 void IPlugin::SetExecuteStrategy(std::shared_ptr<IPluginExecuteStrategy> strategy)
136 {
137     strategy_ = strategy;
138 }
139 
GetExecuteStrategy()140 std::shared_ptr<IPluginExecuteStrategy> IPlugin::GetExecuteStrategy()
141 {
142     return strategy_;
143 }
144 
SetPluginType(IPlugin::PluginType type)145 void IPlugin::SetPluginType(IPlugin::PluginType type)
146 {
147     type_ = type;
148 }
149 
GetPluginType()150 IPlugin::PluginType IPlugin::GetPluginType()
151 {
152     return type_;
153 }
154 
~IPlugin()155 IPlugin::~IPlugin() {}
156 } // namespace EDM
157 } // namespace OHOS
158