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> &currentData, 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