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(FuncOperateType operaType)36 IPlugin::PolicyPermissionConfig IPlugin::GetAllPermission(FuncOperateType operaType)
37 {
38     if (permissionConfig_.permissionType == PermissionType::UNKNOWN && permissionMap_.count(operaType) > 0) {
39         return permissionMap_[operaType];
40     }
41     return permissionConfig_;
42 }
43 
GetPermission(FuncOperateType operaType,std::string permissionTag)44 std::string IPlugin::GetPermission(FuncOperateType operaType, std::string permissionTag)
45 {
46     if (permissionConfig_.permissionType == PermissionType::UNKNOWN && permissionMap_.count(operaType) > 0) {
47         PolicyPermissionConfig config = permissionMap_[operaType];
48         return CheckAndGetPermissionFromConfig(permissionTag, config.tagPermissions, config.permission);
49     }
50     return CheckAndGetPermissionFromConfig(permissionTag, permissionConfig_.tagPermissions,
51         permissionConfig_.permission);
52 }
53 
CheckAndGetPermissionFromConfig(const std::string & permissionTag,std::map<std::string,std::string> tagPermissions,const std::string & commonPermission)54 std::string IPlugin::CheckAndGetPermissionFromConfig(const std::string &permissionTag,
55     std::map<std::string, std::string> tagPermissions, const std::string &commonPermission)
56 {
57     if (permissionTag.empty()) {
58         return tagPermissions.empty() ? commonPermission : NONE_PERMISSION_MATCH;
59     } else {
60         return (!tagPermissions.empty() && tagPermissions.count(permissionTag) > 0 ?
61             tagPermissions[permissionTag] : NONE_PERMISSION_MATCH);
62     }
63 }
64 
GetPermissionType(FuncOperateType operaType)65 IPlugin::PermissionType IPlugin::GetPermissionType(FuncOperateType operaType)
66 {
67     if (permissionConfig_.permissionType == PermissionType::UNKNOWN && permissionMap_.count(operaType) > 0) {
68         return permissionMap_[operaType].permissionType;
69     }
70     return permissionConfig_.permissionType;
71 }
72 
GetApiType(FuncOperateType operaType)73 IPlugin::ApiType IPlugin::GetApiType(FuncOperateType operaType)
74 {
75     if (permissionConfig_.apiType == ApiType::UNKNOWN && permissionMap_.count(operaType) > 0) {
76         return permissionMap_[operaType].apiType;
77     }
78     return permissionConfig_.apiType;
79 }
80 
GetCode()81 std::uint32_t IPlugin::GetCode()
82 {
83     return policyCode_;
84 }
85 
MergePolicyData(const std::string & adminName,std::string & mergeJsonData)86 ErrCode IPlugin::MergePolicyData(const std::string &adminName, std::string &mergeJsonData)
87 {
88     return ERR_OK;
89 }
90 
WritePolicyToParcel(const std::string & policyJsonData,MessageParcel & reply)91 ErrCode IPlugin::WritePolicyToParcel(const std::string &policyJsonData, MessageParcel &reply)
92 {
93     return reply.WriteString(policyJsonData) ? ERR_OK : ERR_EDM_OPERATE_PARCEL;
94 }
95 
SetExtensionPlugin(std::shared_ptr<IPlugin> extensionPlugin)96 void IPlugin::SetExtensionPlugin(std::shared_ptr<IPlugin> extensionPlugin)
97 {
98     extensionPlugin_ = extensionPlugin;
99 }
100 
ResetExtensionPlugin()101 void IPlugin::ResetExtensionPlugin()
102 {
103     if (extensionPlugin_ != nullptr) {
104         extensionPlugin_.reset();
105     }
106 }
107 
GetExtensionPlugin()108 std::shared_ptr<IPlugin> IPlugin::GetExtensionPlugin()
109 {
110     return extensionPlugin_;
111 }
112 
SetExecuteStrategy(std::shared_ptr<IPluginExecuteStrategy> strategy)113 void IPlugin::SetExecuteStrategy(std::shared_ptr<IPluginExecuteStrategy> strategy)
114 {
115     strategy_ = strategy;
116 }
117 
GetExecuteStrategy()118 std::shared_ptr<IPluginExecuteStrategy> IPlugin::GetExecuteStrategy()
119 {
120     return strategy_;
121 }
122 
SetPluginType(IPlugin::PluginType type)123 void IPlugin::SetPluginType(IPlugin::PluginType type)
124 {
125     type_ = type;
126 }
127 
GetPluginType()128 IPlugin::PluginType IPlugin::GetPluginType()
129 {
130     return type_;
131 }
132 
~IPlugin()133 IPlugin::~IPlugin() {}
134 } // namespace EDM
135 } // namespace OHOS
136