1 /*
2 * Copyright (c) 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 "clipboard_policy_plugin.h"
17
18 #include "cJSON.h"
19 #include "clipboard_utils.h"
20 #include "edm_ipc_interface_code.h"
21 #include "plugin_manager.h"
22
23 namespace OHOS {
24 namespace EDM {
25 const bool REGISTER_RESULT = PluginManager::GetInstance()->AddPlugin(ClipboardPolicyPlugin::GetPlugin());
26 const int32_t MAX_PASTEBOARD_POLICY_NUM = 100;
27
InitPlugin(std::shared_ptr<IPluginTemplate<ClipboardPolicyPlugin,std::map<int32_t,ClipboardPolicy>>> ptr)28 void ClipboardPolicyPlugin::InitPlugin(
29 std::shared_ptr<IPluginTemplate<ClipboardPolicyPlugin, std::map<int32_t, ClipboardPolicy>>> ptr)
30 {
31 EDMLOGI("ClipboardPolicyPlugin InitPlugin...");
32 ptr->InitAttribute(EdmInterfaceCode::CLIPBOARD_POLICY,
33 "clipboard_policy", "ohos.permission.ENTERPRISE_MANAGE_SECURITY",
34 IPlugin::PermissionType::SUPER_DEVICE_ADMIN, true);
35 ptr->SetSerializer(ClipboardSerializer::GetInstance());
36 ptr->SetOnHandlePolicyListener(&ClipboardPolicyPlugin::OnSetPolicy, FuncOperateType::SET);
37 ptr->SetOnAdminRemoveListener(&ClipboardPolicyPlugin::OnAdminRemove);
38 }
39
OnSetPolicy(std::map<int32_t,ClipboardPolicy> & data,std::map<int32_t,ClipboardPolicy> & currentData,int32_t userId)40 ErrCode ClipboardPolicyPlugin::OnSetPolicy(std::map<int32_t, ClipboardPolicy> &data,
41 std::map<int32_t, ClipboardPolicy> ¤tData, int32_t userId)
42 {
43 EDMLOGI("ClipboardPolicyPlugin OnSetPolicy.");
44 if (data.empty()) {
45 EDMLOGD("ClipboardPolicyPlugin data is empty.");
46 return EdmReturnErrCode::PARAM_ERROR;
47 }
48 auto it = data.begin();
49 if (it->second == ClipboardPolicy::DEFAULT) {
50 currentData.erase(it->first);
51 } else {
52 currentData[it->first] = it->second;
53 }
54 if (currentData.size() > MAX_PASTEBOARD_POLICY_NUM) {
55 return EdmReturnErrCode::PARAM_ERROR;
56 }
57 return ClipboardUtils::HandlePasteboardPolicy(data);
58 }
59
OnGetPolicy(std::string & policyData,MessageParcel & data,MessageParcel & reply,int32_t userId)60 ErrCode ClipboardPolicyPlugin::OnGetPolicy(std::string &policyData,
61 MessageParcel &data, MessageParcel &reply, int32_t userId)
62 {
63 EDMLOGI("ClipboardPolicyPlugin OnGetPolicy.");
64 int32_t tokenId = data.ReadInt32();
65 std::string policy = policyData;
66 if (tokenId != 0) {
67 std::map<int32_t, ClipboardPolicy> policyMap;
68 if (!pluginInstance_->serializer_->Deserialize(policyData, policyMap)) {
69 return EdmReturnErrCode::SYSTEM_ABNORMALLY;
70 }
71 std::map<int32_t, ClipboardPolicy> resultMap;
72 resultMap[tokenId] = policyMap[tokenId];
73 pluginInstance_->serializer_->Serialize(resultMap, policy);
74 }
75 reply.WriteInt32(ERR_OK);
76 reply.WriteString(policy);
77 return ERR_OK;
78 }
79
OnAdminRemove(const std::string & adminName,std::map<int32_t,ClipboardPolicy> & data,int32_t userId)80 ErrCode ClipboardPolicyPlugin::OnAdminRemove(const std::string &adminName,
81 std::map<int32_t, ClipboardPolicy> &data, int32_t userId)
82 {
83 EDMLOGI("ClipboardPolicyPlugin OnAdminRemove.");
84 return ClipboardUtils::RemoveAllPasteboardPolicy(data);
85 }
86 } // namespace EDM
87 } // namespace OHOS