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 <condition_variable> 20 #include <map> 21 #include <vector> 22 #include "access_token.h" 23 #include "account_file_operator.h" 24 #include "account_iam_info.h" 25 #include "domain_account_callback.h" 26 #include "iaccount_iam_callback.h" 27 #include "iremote_object.h" 28 #include "iremote_stub.h" 29 30 namespace OHOS { 31 namespace AccountSA { 32 class AuthCallbackDeathRecipient : public IRemoteObject::DeathRecipient { 33 public: 34 AuthCallbackDeathRecipient() = default; 35 ~AuthCallbackDeathRecipient() override = default; 36 37 void SetContextId(uint16_t context); 38 void OnRemoteDied(const wptr<IRemoteObject> &remote) override; 39 40 private: 41 uint64_t contextId_ = 0; 42 }; 43 44 class AuthCallback : public AuthenticationCallback { 45 public: 46 AuthCallback(uint32_t userId, AuthType authType, AuthIntent authIntent, const sptr<IIDMCallback> &callback); 47 AuthCallback(uint32_t userId, AuthType authType, AuthIntent authIntent, 48 bool isRemoteAuth, const sptr<IIDMCallback> &callback); 49 virtual ~AuthCallback() = default; 50 51 void SetDeathRecipient(const sptr<AuthCallbackDeathRecipient> &deathRecipient); 52 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 53 void OnResult(int32_t result, const Attributes &extraInfo) override; 54 55 private: 56 ErrCode UnlockAccount(int32_t accountId, const std::vector<uint8_t> &token, 57 const std::vector<uint8_t> &secret, bool &isUpdateVerifiedStatus); 58 ErrCode HandleAuthResult(const Attributes &extraInfo, int32_t accountId, bool &isUpdateVerifiedStatus); 59 void HandleReEnroll(const Attributes &extraInfo, int32_t accountId, const std::vector<uint8_t> &token); 60 ErrCode InnerHandleReEnroll(const std::vector<uint8_t> &token); 61 ErrCode UnlockUserScreen(int32_t accountId, const std::vector<uint8_t> &token, 62 const std::vector<uint8_t> &secret, bool &isUpdateVerifiedStatus); 63 64 private: 65 uint32_t userId_; 66 uint32_t callerTokenId_ = 0; 67 AuthType authType_; 68 AuthIntent authIntent_; 69 bool isRemoteAuth_ = false; 70 sptr<IIDMCallback> innerCallback_ = nullptr; 71 sptr<AuthCallbackDeathRecipient> deathRecipient_ = nullptr; 72 }; 73 74 class IDMCallbackDeathRecipient : public IRemoteObject::DeathRecipient { 75 public: 76 IDMCallbackDeathRecipient(uint32_t userId); 77 void OnRemoteDied(const wptr<IRemoteObject> &remote) override; 78 79 private: 80 uint32_t userId_ = 0; 81 }; 82 83 class AddCredCallback : public UserIdmClientCallback { 84 public: 85 AddCredCallback(uint32_t userId, const CredentialParameters &credInfo, 86 const sptr<IIDMCallback> &callback); 87 virtual ~AddCredCallback() = default; 88 89 void SetDeathRecipient(const sptr<IDMCallbackDeathRecipient> &deathRecipient); 90 void OnResult(int32_t result, const Attributes &extraInfo) override; 91 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 92 93 public: 94 std::mutex mutex_; 95 bool isCalled_ = false; 96 std::condition_variable onResultCondition_; 97 98 private: 99 std::uint32_t userId_; 100 CredentialParameters credInfo_; 101 sptr<IDMCallbackDeathRecipient> deathRecipient_ = nullptr; 102 sptr<IIDMCallback> innerCallback_ = nullptr; 103 }; 104 105 class UpdateCredCallback : public UserIdmClientCallback { 106 public: 107 UpdateCredCallback(uint32_t userId, const CredentialParameters &credInfo, 108 const sptr<IIDMCallback> &callback); 109 virtual ~UpdateCredCallback() = default; 110 111 void SetDeathRecipient(const sptr<IDMCallbackDeathRecipient> &deathRecipient); 112 void OnResult(int32_t result, const Attributes &extraInfo) override; 113 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 114 115 private: 116 void InnerOnResult(int32_t result, const Attributes &extraInfo); 117 118 public: 119 std::mutex mutex_; 120 bool isCalled_ = false; 121 std::condition_variable onResultCondition_; 122 123 private: 124 std::uint32_t userId_; 125 CredentialParameters credInfo_; 126 sptr<IDMCallbackDeathRecipient> deathRecipient_ = nullptr; 127 const sptr<IIDMCallback> innerCallback_ = nullptr; 128 }; 129 130 #ifdef HAS_PIN_AUTH_PART 131 class DelUserInputer : public IInputer { 132 public: 133 DelUserInputer() = default; 134 virtual ~DelUserInputer() = default; 135 136 void OnGetData(int32_t authSubType, std::vector<uint8_t> challenge, 137 std::shared_ptr<IInputerData> inputerData) override; 138 }; 139 140 class DelUserCallback : public UserIdmClientCallback { 141 public: 142 DelUserCallback(uint32_t userId, const std::vector<uint8_t> &token, const sptr<IIDMCallback> &callback); 143 virtual ~DelUserCallback(); 144 145 void OnResult(int32_t result, const Attributes &extraInfo) override; OnAcquireInfo(int32_t module,uint32_t acquireInfo,const Attributes & extraInfo)146 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override {}; 147 148 private: 149 void InnerOnResult(int32_t result, const Attributes &extraInfo); 150 151 public: 152 std::mutex mutex_; 153 bool isCalled_ = false; 154 std::condition_variable onResultCondition_; 155 156 private: 157 std::uint32_t userId_; 158 std::vector<uint8_t> token_; 159 const sptr<IIDMCallback> innerCallback_ = nullptr; 160 }; 161 #endif // HAS_PIN_AUTH_PART 162 163 class VerifyTokenCallbackWrapper : public VerifyTokenCallback { 164 public: 165 VerifyTokenCallbackWrapper(uint32_t userId, const std::vector<uint8_t> &token, 166 Security::AccessToken::AccessTokenID callerTokenId, const sptr<IIDMCallback> &callback); 167 virtual ~VerifyTokenCallbackWrapper() = default; 168 void OnResult(int32_t result, const Attributes &extraInfo) override; 169 170 private: 171 void InnerOnResult(int32_t result, const Attributes &extraInfo); 172 173 public: 174 std::mutex mutex_; 175 bool isCalled_ = false; 176 std::condition_variable onResultCondition_; 177 178 private: 179 std::uint32_t userId_; 180 std::vector<uint8_t> token_; 181 Security::AccessToken::AccessTokenID callerTokenId_; 182 const sptr<IIDMCallback> innerCallback_ = nullptr; 183 }; 184 185 class CommitDelCredCallback : public UserIdmClientCallback { 186 public: 187 CommitDelCredCallback(uint32_t userId, const sptr<IIDMCallback> callback); 188 virtual ~CommitDelCredCallback() = default; 189 190 void OnResult(int32_t result, const UserIam::UserAuth::Attributes &extraInfo) override; 191 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const UserIam::UserAuth::Attributes &extraInfo) override; 192 193 public: 194 bool isCalled_ = false; 195 std::mutex mutex_; 196 std::condition_variable onResultCondition_; 197 198 private: 199 std::uint32_t userId_; 200 const sptr<IIDMCallback> innerCallback_ = nullptr; 201 }; 202 203 struct UpdateCredInfo { 204 uint64_t credentialId = 0; 205 uint64_t secureUid = 0; 206 std::vector<uint8_t> token; 207 std::vector<uint8_t> newSecret; 208 std::vector<uint8_t> oldSecret; 209 210 UpdateCredInfo() = default; 211 UpdateCredInfo(const Attributes &extraInfo); 212 }; 213 214 class CommitCredUpdateCallback : public UserIdmClientCallback { 215 public: 216 CommitCredUpdateCallback(int32_t userId, const UpdateCredInfo &extraUpdateInfo, const sptr<IIDMCallback> &callback); 217 virtual ~CommitCredUpdateCallback() = default; 218 219 void OnResult(int32_t result, const Attributes &extraInfo) override; 220 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 221 222 private: 223 void InnerOnResult(int32_t result, const Attributes &extraInfo); 224 225 public: 226 std::mutex mutex_; 227 bool isCalled_ = false; 228 std::condition_variable onResultCondition_; 229 230 private: 231 int32_t userId_; 232 UpdateCredInfo extraUpdateInfo_; 233 sptr<IIDMCallback> innerCallback_ = nullptr; 234 }; 235 236 class DelCredCallback : public UserIdmClientCallback { 237 public: 238 DelCredCallback(int32_t userId, bool isPIN, std::vector<uint8_t> token, const sptr<IIDMCallback> &callback); 239 virtual ~DelCredCallback() = default; 240 241 void OnResult(int32_t result, const Attributes &extraInfo) override; 242 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 243 244 private: 245 int32_t userId_; 246 bool isPIN_; 247 std::vector<uint8_t> token_; 248 sptr<IIDMCallback> innerCallback_ = nullptr; 249 }; 250 251 class GetCredInfoCallbackWrapper : public GetCredentialInfoCallback { 252 public: 253 GetCredInfoCallbackWrapper(int32_t userId, int32_t authType, const sptr<IGetCredInfoCallback> &callback); 254 virtual ~GetCredInfoCallbackWrapper() = default; 255 256 void OnCredentialInfo(int32_t result, const std::vector<CredentialInfo> &infoList) override; 257 258 private: 259 int32_t userId_; 260 int32_t authType_; 261 sptr<IGetCredInfoCallback> innerCallback_ = nullptr; 262 }; 263 264 class GetPropCallbackWrapper : public GetPropCallback { 265 public: 266 GetPropCallbackWrapper(int32_t userId, const sptr<IGetSetPropCallback> &callback); 267 virtual ~GetPropCallbackWrapper() = default; 268 269 void OnResult(int32_t result, const Attributes &extraInfo) override; 270 271 private: 272 int32_t userId_; 273 sptr<IGetSetPropCallback> innerCallback_; 274 }; 275 276 class SetPropCallbackWrapper : public SetPropCallback { 277 public: 278 SetPropCallbackWrapper(int32_t userId, const sptr<IGetSetPropCallback> &callback); 279 virtual ~SetPropCallbackWrapper() = default; 280 281 void OnResult(int32_t result, const Attributes &extraInfo) override; 282 283 private: 284 int32_t userId_; 285 sptr<IGetSetPropCallback> innerCallback_; 286 }; 287 288 class GetSecUserInfoCallbackWrapper : public GetSecUserInfoCallback { 289 public: 290 GetSecUserInfoCallbackWrapper(int32_t userId, AuthType authType, const sptr<IGetEnrolledIdCallback> &callback); 291 virtual ~GetSecUserInfoCallbackWrapper() = default; 292 293 void OnSecUserInfo(int32_t result, const SecUserInfo &info) override; 294 295 private: 296 int32_t userId_; 297 AuthType authType_; 298 sptr<IGetEnrolledIdCallback> innerCallback_; 299 }; 300 301 class GetSecureUidCallback final : public GetSecUserInfoCallback { 302 public: 303 GetSecureUidCallback(int32_t userId); 304 305 void OnSecUserInfo(int32_t result, const SecUserInfo &info) override; 306 307 public: 308 int32_t userId_; 309 uint64_t secureUid_ = 0; 310 bool isCalled_ = false; 311 std::mutex secureMtx_; 312 std::condition_variable secureCv_; 313 }; 314 315 class PrepareRemoteAuthCallbackWrapper : public PrepareRemoteAuthCallback { 316 public: 317 PrepareRemoteAuthCallbackWrapper(const sptr<IPreRemoteAuthCallback> &callback); 318 virtual ~PrepareRemoteAuthCallbackWrapper() = default; 319 320 void OnResult(int32_t result) override; 321 322 private: 323 sptr<IPreRemoteAuthCallback> innerCallback_; 324 }; 325 326 #ifdef SUPPORT_DOMAIN_ACCOUNTS 327 class GetDomainAuthStatusInfoCallback final : public DomainAccountCallback { 328 public: 329 GetDomainAuthStatusInfoCallback(const GetPropertyRequest &request, const sptr<IGetSetPropCallback> &callback); 330 331 void OnResult(int32_t result, Parcel &parcel) override; 332 333 private: 334 GetPropertyRequest request_; 335 sptr<IGetSetPropCallback> innerCallback_; 336 }; 337 #endif // SUPPORT_DOMAIN_ACCOUNTS 338 339 class ReEnrollCallback final : public IRemoteStub<IIDMCallback> { 340 public: 341 bool isCalled_ = false; 342 ErrCode result_ = ERR_ACCOUNT_COMMON_NOT_INIT_ERROR; 343 std::mutex mutex_; 344 std::condition_variable onResultCondition_; 345 346 ReEnrollCallback(const sptr<IIDMCallback> &innerCallback); 347 void OnResult(int32_t result, const Attributes &extraInfo) override; 348 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 349 private: 350 sptr<IIDMCallback> innerCallback_; 351 }; 352 } // namespace AccountSA 353 } // namespace OHOS 354 #endif // OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_IAM_CALLBACK_H 355