1 /* 2 * Copyright (c) 2022-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 #ifndef OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_IAM_CALLBACK_H 17 #define OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_IAM_CALLBACK_H 18 19 #include <map> 20 #include <vector> 21 #include "account_file_operator.h" 22 #include "account_iam_info.h" 23 #include "domain_account_callback.h" 24 #include "iaccount_iam_callback.h" 25 #include "iremote_object.h" 26 27 namespace OHOS { 28 namespace AccountSA { 29 class AuthCallbackDeathRecipient : public IRemoteObject::DeathRecipient { 30 public: 31 AuthCallbackDeathRecipient() = default; 32 ~AuthCallbackDeathRecipient() override = default; 33 34 void SetContextId(uint16_t context); 35 void OnRemoteDied(const wptr<IRemoteObject> &remote) override; 36 37 private: 38 uint64_t contextId_ = 0; 39 }; 40 41 class AuthCallback : public AuthenticationCallback { 42 public: 43 AuthCallback(uint32_t userId, AuthType authType, AuthIntent authIntent, const sptr<IIDMCallback> &callback); 44 AuthCallback(uint32_t userId, AuthType authType, AuthIntent authIntent, 45 bool isRemoteAuth, const sptr<IIDMCallback> &callback); 46 virtual ~AuthCallback() = default; 47 48 void SetDeathRecipient(const sptr<AuthCallbackDeathRecipient> &deathRecipient); 49 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 50 void OnResult(int32_t result, const Attributes &extraInfo) override; 51 52 private: 53 ErrCode UnlockAccount(int32_t accountId, const std::vector<uint8_t> &token, 54 const std::vector<uint8_t> &secret, bool &isUpdateVerifiedStatus); 55 ErrCode HandleAuthResult(const Attributes &extraInfo, int32_t accountId, bool &isUpdateVerifiedStatus); 56 ErrCode UnlockUserScreen(int32_t accountId, const std::vector<uint8_t> &token, 57 const std::vector<uint8_t> &secret, bool &isUpdateVerifiedStatus); 58 59 private: 60 uint32_t userId_; 61 AuthType authType_; 62 AuthIntent authIntent_; 63 bool isRemoteAuth_ = false; 64 sptr<IIDMCallback> innerCallback_ = nullptr; 65 sptr<AuthCallbackDeathRecipient> deathRecipient_ = nullptr; 66 }; 67 68 class IDMCallbackDeathRecipient : public IRemoteObject::DeathRecipient { 69 public: 70 IDMCallbackDeathRecipient(uint32_t userId); 71 void OnRemoteDied(const wptr<IRemoteObject> &remote) override; 72 73 private: 74 uint32_t userId_ = 0; 75 }; 76 77 class AddCredCallback : public UserIdmClientCallback { 78 public: 79 AddCredCallback(uint32_t userId, const CredentialParameters &credInfo, 80 const sptr<IIDMCallback> &callback); 81 virtual ~AddCredCallback() = default; 82 83 void SetDeathRecipient(const sptr<IDMCallbackDeathRecipient> &deathRecipient); 84 void OnResult(int32_t result, const Attributes &extraInfo) override; 85 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 86 87 private: 88 std::uint32_t userId_; 89 CredentialParameters credInfo_; 90 sptr<IDMCallbackDeathRecipient> deathRecipient_ = nullptr; 91 sptr<IIDMCallback> innerCallback_ = nullptr; 92 }; 93 94 class UpdateCredCallback : public UserIdmClientCallback { 95 public: 96 UpdateCredCallback(uint32_t userId, const CredentialParameters &credInfo, 97 const sptr<IIDMCallback> &callback); 98 virtual ~UpdateCredCallback() = default; 99 100 void SetDeathRecipient(const sptr<IDMCallbackDeathRecipient> &deathRecipient); 101 void OnResult(int32_t result, const Attributes &extraInfo) override; 102 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 103 104 private: 105 std::uint32_t userId_; 106 CredentialParameters credInfo_; 107 sptr<IDMCallbackDeathRecipient> deathRecipient_ = nullptr; 108 const sptr<IIDMCallback> innerCallback_ = nullptr; 109 }; 110 111 #ifdef HAS_PIN_AUTH_PART 112 class DelUserInputer : public IInputer { 113 public: 114 DelUserInputer() = default; 115 virtual ~DelUserInputer() = default; 116 117 void OnGetData(int32_t authSubType, std::vector<uint8_t> challenge, 118 std::shared_ptr<IInputerData> inputerData) override; 119 }; 120 121 class CommitDelCredCallback : public UserIdmClientCallback { 122 public: CommitDelCredCallback()123 CommitDelCredCallback() {} ~CommitDelCredCallback()124 virtual ~CommitDelCredCallback() {} 125 126 void OnResult(int32_t result, const UserIam::UserAuth::Attributes &extraInfo) override; 127 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const UserIam::UserAuth::Attributes &extraInfo) override; 128 129 public: 130 bool isCalled_ = false; 131 int32_t resultCode_ = -1; 132 std::mutex mutex_; 133 std::condition_variable onResultCondition_; 134 }; 135 136 class DelUserCallback : public UserIdmClientCallback { 137 public: 138 DelUserCallback(uint32_t userId, const std::vector<uint8_t> &token, const sptr<IIDMCallback> &callback); 139 virtual ~DelUserCallback(); 140 141 void OnResult(int32_t result, const Attributes &extraInfo) override; OnAcquireInfo(int32_t module,uint32_t acquireInfo,const Attributes & extraInfo)142 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override {}; 143 144 private: 145 std::uint32_t userId_; 146 std::vector<uint8_t> token_; 147 const sptr<IIDMCallback> innerCallback_ = nullptr; 148 }; 149 #endif // HAS_PIN_AUTH_PART 150 151 struct UpdateCredInfo { 152 uint64_t credentialId = 0; 153 uint64_t secureUid = 0; 154 std::vector<uint8_t> token; 155 std::vector<uint8_t> newSecret; 156 }; 157 158 class CommitCredUpdateCallback : public UserIdmClientCallback { 159 public: 160 CommitCredUpdateCallback(int32_t userId, const UpdateCredInfo &extraUpdateInfo, const sptr<IIDMCallback> &callback); 161 virtual ~CommitCredUpdateCallback() = default; 162 163 void OnResult(int32_t result, const Attributes &extraInfo) override; 164 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 165 166 private: 167 int32_t userId_; 168 UpdateCredInfo extraUpdateInfo_; 169 sptr<IIDMCallback> innerCallback_ = nullptr; 170 }; 171 172 class DelCredCallback : public UserIdmClientCallback { 173 public: 174 DelCredCallback(int32_t userId, bool isPIN, std::vector<uint8_t> token, const sptr<IIDMCallback> &callback); 175 virtual ~DelCredCallback() = default; 176 177 void OnResult(int32_t result, const Attributes &extraInfo) override; 178 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 179 180 private: 181 int32_t userId_; 182 bool isPIN_; 183 std::vector<uint8_t> token_; 184 sptr<IIDMCallback> innerCallback_ = nullptr; 185 }; 186 187 class GetCredInfoCallbackWrapper : public GetCredentialInfoCallback { 188 public: 189 GetCredInfoCallbackWrapper(int32_t userId, int32_t authType, const sptr<IGetCredInfoCallback> &callback); 190 virtual ~GetCredInfoCallbackWrapper() = default; 191 192 void OnCredentialInfo(const std::vector<CredentialInfo> &infoList) override; 193 194 private: 195 int32_t userId_; 196 int32_t authType_; 197 sptr<IGetCredInfoCallback> innerCallback_ = nullptr; 198 }; 199 200 class GetPropCallbackWrapper : public GetPropCallback { 201 public: 202 GetPropCallbackWrapper(int32_t userId, const sptr<IGetSetPropCallback> &callback); 203 virtual ~GetPropCallbackWrapper() = default; 204 205 void OnResult(int32_t result, const Attributes &extraInfo) override; 206 207 private: 208 int32_t userId_; 209 sptr<IGetSetPropCallback> innerCallback_; 210 }; 211 212 class SetPropCallbackWrapper : public SetPropCallback { 213 public: 214 SetPropCallbackWrapper(int32_t userId, const sptr<IGetSetPropCallback> &callback); 215 virtual ~SetPropCallbackWrapper() = default; 216 217 void OnResult(int32_t result, const Attributes &extraInfo) override; 218 219 private: 220 int32_t userId_; 221 sptr<IGetSetPropCallback> innerCallback_; 222 }; 223 224 class GetSecUserInfoCallbackWrapper : public GetSecUserInfoCallback { 225 public: 226 GetSecUserInfoCallbackWrapper(AuthType authType, const sptr<IGetEnrolledIdCallback> &callback); 227 virtual ~GetSecUserInfoCallbackWrapper() = default; 228 229 void OnSecUserInfo(const SecUserInfo &info) override; 230 231 private: 232 AuthType authType_; 233 sptr<IGetEnrolledIdCallback> innerCallback_; 234 }; 235 236 class GetSecureUidCallback final : public GetSecUserInfoCallback { 237 public: 238 GetSecureUidCallback(int32_t userId); 239 240 void OnSecUserInfo(const SecUserInfo &info) override; 241 242 public: 243 int32_t userId_; 244 uint64_t secureUid_ = 0; 245 std::mutex secureMtx_; 246 std::condition_variable secureCv_; 247 }; 248 249 class PrepareRemoteAuthCallbackWrapper : public PrepareRemoteAuthCallback { 250 public: 251 PrepareRemoteAuthCallbackWrapper(const sptr<IPreRemoteAuthCallback> &callback); 252 virtual ~PrepareRemoteAuthCallbackWrapper() = default; 253 254 void OnResult(int32_t result) override; 255 256 private: 257 sptr<IPreRemoteAuthCallback> innerCallback_; 258 }; 259 260 class GetDomainAuthStatusInfoCallback final : public DomainAccountCallback { 261 public: 262 GetDomainAuthStatusInfoCallback(const GetPropertyRequest &request, const sptr<IGetSetPropCallback> &callback); 263 264 void OnResult(int32_t result, Parcel &parcel) override; 265 266 private: 267 GetPropertyRequest request_; 268 sptr<IGetSetPropCallback> innerCallback_; 269 }; 270 } // namespace AccountSA 271 } // namespace OHOS 272 #endif // OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_IAM_CALLBACK_H 273