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 "password_policy_plugin.h"
17
18 #include "edm_ipc_interface_code.h"
19 #include "iplugin_manager.h"
20 #include "ipolicy_manager.h"
21 #include "password_policy_utils.h"
22 #include "user_auth_client.h"
23
24 namespace OHOS {
25 namespace EDM {
26 const bool REGISTER_RESULT = IPluginManager::GetInstance()->AddPlugin(PasswordPolicyPlugin::GetPlugin());
27
InitPlugin(std::shared_ptr<IPluginTemplate<PasswordPolicyPlugin,PasswordPolicy>> ptr)28 void PasswordPolicyPlugin::InitPlugin(
29 std::shared_ptr<IPluginTemplate<PasswordPolicyPlugin, PasswordPolicy>> ptr)
30 {
31 EDMLOGI("PasswordPolicyPlugin InitPlugin...");
32 ptr->InitAttribute(EdmInterfaceCode::PASSWORD_POLICY,
33 PolicyName::POLICY_PASSWORD_POLICY, EdmPermission::PERMISSION_ENTERPRISE_MANAGE_SECURITY,
34 IPlugin::PermissionType::SUPER_DEVICE_ADMIN, true);
35 ptr->SetSerializer(PasswordSerializer::GetInstance());
36 ptr->SetOnHandlePolicyListener(&PasswordPolicyPlugin::OnSetPolicy, FuncOperateType::SET);
37 ptr->SetOnAdminRemoveListener(&PasswordPolicyPlugin::OnAdminRemove);
38 ptr->SetOtherServiceStartListener(&PasswordPolicyPlugin::OnOtherServiceStart);
39 }
40
OnSetPolicy(PasswordPolicy & policy,PasswordPolicy & currentData,PasswordPolicy & mergeData,int32_t userId)41 ErrCode PasswordPolicyPlugin::OnSetPolicy(PasswordPolicy &policy, PasswordPolicy ¤tData,
42 PasswordPolicy &mergeData, int32_t userId)
43 {
44 EDMLOGI("PasswordPolicyPlugin OnSetPolicy...");
45 if (!mergeData.complexityReg.empty() || mergeData.validityPeriod != 0 || !mergeData.additionalDescription.empty()) {
46 EDMLOGE("LocationPolicyPlugin set location failed. Other admin has already set policies.");
47 return EdmReturnErrCode::PARAM_ERROR;
48 }
49 SetGlobalConfigParam(policy);
50 currentData = policy;
51 mergeData = policy;
52 PasswordPolicyUtils passwordPolicyUtils;
53 if (!passwordPolicyUtils.UpdatePasswordPolicy(mergeData)) {
54 EDMLOGE("LocationPolicyPlugin set location failed. UpdatePasswordPolicy error.");
55 return EdmReturnErrCode::SYSTEM_ABNORMALLY;
56 }
57 return ERR_OK;
58 }
59
OnAdminRemove(const std::string & adminName,PasswordPolicy & data,PasswordPolicy & mergeData,int32_t userId)60 ErrCode PasswordPolicyPlugin::OnAdminRemove(const std::string &adminName, PasswordPolicy &data,
61 PasswordPolicy &mergeData, int32_t userId)
62 {
63 UserIam::UserAuth::GlobalConfigParam param;
64 param.type = UserIam::UserAuth::GlobalConfigType::PIN_EXPIRED_PERIOD;
65 param.value.pinExpiredPeriod = 0;
66 param.authTypes.push_back(UserIam::UserAuth::AuthType::PIN);
67 int32_t ret = UserIam::UserAuth::UserAuthClient::GetInstance().SetGlobalConfigParam(param);
68 if (ret != ERR_OK) {
69 EDMLOGW("PasswordPolicyPlugin SetGlobalConfigParam failed");
70 return EdmReturnErrCode::SYSTEM_ABNORMALLY;
71 }
72 PasswordPolicyUtils passwordPolicyUtils;
73 if (!passwordPolicyUtils.UpdatePasswordPolicy(mergeData)) {
74 EDMLOGE("LocationPolicyPlugin set location failed. UpdatePasswordPolicy error.");
75 return EdmReturnErrCode::SYSTEM_ABNORMALLY;
76 }
77 return ERR_OK;
78 }
79
OnOtherServiceStart(int32_t systemAbilityId)80 void PasswordPolicyPlugin::OnOtherServiceStart(int32_t systemAbilityId)
81 {
82 PasswordPolicy policy;
83 PasswordPolicyUtils passwordPolicyUtils;
84 if (!passwordPolicyUtils.GetPasswordPolicy(policy)) {
85 EDMLOGE("LocationPolicyPlugin set location failed. GetPasswordPolicy error.");
86 return;
87 }
88 SetGlobalConfigParam(policy);
89 }
90
SetGlobalConfigParam(const PasswordPolicy & policy)91 void PasswordPolicyPlugin::SetGlobalConfigParam(const PasswordPolicy &policy)
92 {
93 UserIam::UserAuth::GlobalConfigParam param;
94 param.type = UserIam::UserAuth::GlobalConfigType::PIN_EXPIRED_PERIOD;
95 param.authTypes.push_back(UserIam::UserAuth::AuthType::PIN);
96 param.value.pinExpiredPeriod = policy.validityPeriod;
97 int32_t ret = UserIam::UserAuth::UserAuthClient::GetInstance().SetGlobalConfigParam(param);
98 if (ret != 0) {
99 EDMLOGW("SetGlobalConfigParam SetPasswordPolicy Error");
100 }
101 }
102 } // namespace EDM
103 } // namespace OHOS