• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &currentData,
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