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