1 /*
2 * Copyright (c) 2023 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 "device_settings_proxy.h"
17
18 #include "edm_log.h"
19 #include "func_code.h"
20
21 namespace OHOS {
22 namespace EDM {
23 std::shared_ptr<DeviceSettingsProxy> DeviceSettingsProxy::instance_ = nullptr;
24 std::mutex DeviceSettingsProxy::mutexLock_;
25 const std::u16string DESCRIPTOR = u"ohos.edm.IEnterpriseDeviceMgr";
26
GetDeviceSettingsProxy()27 std::shared_ptr<DeviceSettingsProxy> DeviceSettingsProxy::GetDeviceSettingsProxy()
28 {
29 if (instance_ == nullptr) {
30 std::lock_guard<std::mutex> lock(mutexLock_);
31 if (instance_ == nullptr) {
32 std::shared_ptr<DeviceSettingsProxy> temp = std::make_shared<DeviceSettingsProxy>();
33 instance_ = temp;
34 }
35 }
36 return instance_;
37 }
38
SetScreenOffTime(const AppExecFwk::ElementName & admin,int32_t value,const std::string & permissionTag)39 int32_t DeviceSettingsProxy::SetScreenOffTime(const AppExecFwk::ElementName &admin, int32_t value,
40 const std::string &permissionTag)
41 {
42 EDMLOGD("DeviceSettingsProxy::SetScreenOffTime");
43 MessageParcel data;
44 data.WriteInterfaceToken(DESCRIPTOR);
45 data.WriteInt32(WITHOUT_USERID);
46 data.WriteParcelable(&admin);
47 data.WriteString(permissionTag);
48 data.WriteInt32(value);
49 std::uint32_t funcCode = POLICY_FUNC_CODE((std::uint32_t)FuncOperateType::SET, EdmInterfaceCode::SCREEN_OFF_TIME);
50 return EnterpriseDeviceMgrProxy::GetInstance()->HandleDevicePolicy(funcCode, data);
51 }
52
GetScreenOffTime(const AppExecFwk::ElementName & admin,int32_t & value,const std::string & permissionTag)53 int32_t DeviceSettingsProxy::GetScreenOffTime(const AppExecFwk::ElementName &admin, int32_t &value,
54 const std::string &permissionTag)
55 {
56 EDMLOGD("DeviceSettingsProxy::GetScreenOffTime");
57 auto proxy = EnterpriseDeviceMgrProxy::GetInstance();
58 MessageParcel data;
59 MessageParcel reply;
60 data.WriteInterfaceToken(DESCRIPTOR);
61 data.WriteInt32(WITHOUT_USERID);
62 data.WriteString(permissionTag);
63 data.WriteInt32(HAS_ADMIN);
64 data.WriteParcelable(&admin);
65 proxy->GetPolicy(EdmInterfaceCode::SCREEN_OFF_TIME, data, reply);
66 int32_t ret = ERR_INVALID_VALUE;
67 bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
68 if (!blRes) {
69 EDMLOGE("EnterpriseDeviceMgrProxy:GetPolicy fail. %{public}d", ret);
70 return ret;
71 }
72 reply.ReadInt32(value);
73 return ERR_OK;
74 }
75
InstallUserCertificate(const AppExecFwk::ElementName & admin,const std::vector<uint8_t> & certArray,std::string & alias,std::string & result,std::string & innerCodeMsg)76 int32_t DeviceSettingsProxy::InstallUserCertificate(const AppExecFwk::ElementName &admin,
77 const std::vector<uint8_t> &certArray, std::string &alias, std::string &result, std::string &innerCodeMsg)
78 {
79 EDMLOGD("DeviceSettingsProxy::InstallUserCertificate");
80 MessageParcel data;
81 MessageParcel reply;
82 std::uint32_t funcCode =
83 POLICY_FUNC_CODE((std::uint32_t)FuncOperateType::SET, EdmInterfaceCode::INSTALL_CERTIFICATE);
84 data.WriteInterfaceToken(DESCRIPTOR);
85 data.WriteInt32(WITHOUT_USERID);
86 data.WriteParcelable(&admin);
87 data.WriteString(WITHOUT_PERMISSION_TAG);
88 data.WriteUInt8Vector(certArray);
89 data.WriteString(alias);
90 ErrCode ret = EnterpriseDeviceMgrProxy::GetInstance()->HandleDevicePolicy(funcCode, data, reply);
91 EDMLOGI("DeviceSettingsProxy::InstallUserCertificate : %{public}d.", ret);
92 if (ret == ERR_OK) {
93 result = reply.ReadString();
94 } else if (ret == EdmReturnErrCode::MANAGED_CERTIFICATE_FAILED) {
95 int32_t certRetCode = ERR_INVALID_VALUE;
96 reply.ReadInt32(certRetCode);
97 innerCodeMsg = std::to_string(certRetCode);
98 }
99 return ret;
100 }
101
UninstallUserCertificate(const AppExecFwk::ElementName & admin,const std::string & alias,std::string & innerCodeMsg)102 int32_t DeviceSettingsProxy::UninstallUserCertificate(const AppExecFwk::ElementName &admin, const std::string &alias,
103 std::string &innerCodeMsg)
104 {
105 EDMLOGD("DeviceSettingsProxy::UninstallUserCertificate");
106 MessageParcel data;
107 MessageParcel reply;
108 std::uint32_t funcCode =
109 POLICY_FUNC_CODE((std::uint32_t)FuncOperateType::REMOVE, EdmInterfaceCode::INSTALL_CERTIFICATE);
110 data.WriteInterfaceToken(DESCRIPTOR);
111 data.WriteInt32(WITHOUT_USERID);
112 data.WriteParcelable(&admin);
113 data.WriteString(WITHOUT_PERMISSION_TAG);
114 data.WriteString(alias);
115 ErrCode ret = EnterpriseDeviceMgrProxy::GetInstance()->HandleDevicePolicy(funcCode, data, reply);
116 if (ret == EdmReturnErrCode::MANAGED_CERTIFICATE_FAILED) {
117 int32_t certRetCode = ERR_INVALID_VALUE;
118 reply.ReadInt32(certRetCode);
119 innerCodeMsg = std::to_string(certRetCode);
120 }
121 return ret;
122 }
123
SetPowerPolicy(const AppExecFwk::ElementName & admin,const PowerScene & powerScene,const PowerPolicy & powerPolicy)124 int32_t DeviceSettingsProxy::SetPowerPolicy(const AppExecFwk::ElementName &admin, const PowerScene &powerScene,
125 const PowerPolicy &powerPolicy)
126 {
127 EDMLOGD("DeviceSettingsProxy::SetPowerPolicy");
128 MessageParcel data;
129 MessageParcel reply;
130 std::uint32_t funcCode = POLICY_FUNC_CODE((std::uint32_t)FuncOperateType::SET, EdmInterfaceCode::POWER_POLICY);
131 data.WriteInterfaceToken(DESCRIPTOR);
132 data.WriteInt32(WITHOUT_USERID);
133 data.WriteParcelable(&admin);
134 data.WriteString(WITHOUT_PERMISSION_TAG);
135 data.WriteUint32(static_cast<uint32_t>(powerScene));
136 if (!powerPolicy.Marshalling(data)) {
137 EDMLOGE("DeviceSettingsProxy::SetPowerPolicy Marshalling proxy fail.");
138 return EdmReturnErrCode::SYSTEM_ABNORMALLY;
139 }
140 return EnterpriseDeviceMgrProxy::GetInstance()->HandleDevicePolicy(funcCode, data);
141 }
142
GetPowerPolicy(const AppExecFwk::ElementName & admin,const PowerScene & powerScene,PowerPolicy & powerPolicy)143 int32_t DeviceSettingsProxy::GetPowerPolicy(const AppExecFwk::ElementName &admin, const PowerScene &powerScene,
144 PowerPolicy &powerPolicy)
145 {
146 EDMLOGD("DeviceSettingsProxy::GetPowerPolicy");
147 MessageParcel data;
148 MessageParcel reply;
149 data.WriteInterfaceToken(DESCRIPTOR);
150 data.WriteInt32(WITHOUT_USERID);
151 data.WriteString(WITHOUT_PERMISSION_TAG);
152 data.WriteInt32(HAS_ADMIN);
153 data.WriteParcelable(&admin);
154 data.WriteUint32(static_cast<uint32_t>(powerScene));
155 EnterpriseDeviceMgrProxy::GetInstance()->GetPolicy(EdmInterfaceCode::POWER_POLICY, data, reply);
156 int32_t ret = ERR_INVALID_VALUE;
157 bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
158 if (!blRes) {
159 EDMLOGE("DeviceSettingsProxy:getPowerPolicy fail. %{public}d", ret);
160 return ret;
161 }
162 if (!PowerPolicy::Unmarshalling(reply, powerPolicy)) {
163 EDMLOGE("DeviceSettingsProxy::getPowerPolicy Unmarshalling power policy fail.");
164 return EdmReturnErrCode::SYSTEM_ABNORMALLY;
165 }
166 return ERR_OK;
167 }
168 } // namespace EDM
169 } // namespace OHOS