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 private: 84 std::uint32_t userId_; 85 CredentialParameters credInfo_; 86 sptr<IDMCallbackDeathRecipient> deathRecipient_ = nullptr; 87 sptr<IIDMCallback> innerCallback_ = nullptr; 88 }; 89 90 class UpdateCredCallback : public UserIdmClientCallback { 91 public: 92 UpdateCredCallback(uint32_t userId, const CredentialParameters &credInfo, 93 const sptr<IIDMCallback> &callback); 94 virtual ~UpdateCredCallback() = default; 95 96 void SetDeathRecipient(const sptr<IDMCallbackDeathRecipient> &deathRecipient); 97 void OnResult(int32_t result, const Attributes &extraInfo) override; 98 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 99 100 private: 101 std::uint32_t userId_; 102 CredentialParameters credInfo_; 103 sptr<IDMCallbackDeathRecipient> deathRecipient_ = nullptr; 104 const sptr<IIDMCallback> innerCallback_ = nullptr; 105 }; 106 107 #ifdef HAS_PIN_AUTH_PART 108 class DelUserInputer : public IInputer { 109 public: 110 DelUserInputer() = default; 111 virtual ~DelUserInputer() = default; 112 113 void OnGetData(int32_t authSubType, std::vector<uint8_t> challenge, 114 std::shared_ptr<IInputerData> inputerData) override; 115 }; 116 117 class DelUserCallback : public UserIdmClientCallback { 118 public: 119 DelUserCallback(uint32_t userId, const sptr<IIDMCallback> &callback); 120 virtual ~DelUserCallback(); 121 122 void OnResult(int32_t result, const Attributes &extraInfo) override; OnAcquireInfo(int32_t module,uint32_t acquireInfo,const Attributes & extraInfo)123 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override {}; 124 125 private: 126 std::uint32_t userId_; 127 const sptr<IIDMCallback> innerCallback_ = nullptr; 128 }; 129 #endif // HAS_PIN_AUTH_PART 130 131 struct UpdateCredInfo { 132 uint64_t credentialId = 0; 133 uint64_t secureUid = 0; 134 std::vector<uint8_t> token; 135 std::vector<uint8_t> newSecret; 136 }; 137 138 class CommitCredUpdateCallback : public UserIdmClientCallback { 139 public: 140 CommitCredUpdateCallback(int32_t userId, const UpdateCredInfo &extraUpdateInfo, const sptr<IIDMCallback> &callback); 141 virtual ~CommitCredUpdateCallback() = default; 142 143 void OnResult(int32_t result, const Attributes &extraInfo) override; 144 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 145 146 private: 147 int32_t userId_; 148 UpdateCredInfo extraUpdateInfo_; 149 sptr<IIDMCallback> innerCallback_ = nullptr; 150 }; 151 152 class DelCredCallback : public UserIdmClientCallback { 153 public: 154 DelCredCallback(int32_t userId, bool isPIN, std::vector<uint8_t> token, const sptr<IIDMCallback> &callback); 155 virtual ~DelCredCallback() = default; 156 157 void OnResult(int32_t result, const Attributes &extraInfo) override; 158 void OnAcquireInfo(int32_t module, uint32_t acquireInfo, const Attributes &extraInfo) override; 159 160 private: 161 int32_t userId_; 162 bool isPIN_; 163 std::vector<uint8_t> token_; 164 sptr<IIDMCallback> innerCallback_ = nullptr; 165 }; 166 167 class GetCredInfoCallbackWrapper : public GetCredentialInfoCallback { 168 public: 169 GetCredInfoCallbackWrapper(int32_t userId, int32_t authType, const sptr<IGetCredInfoCallback> &callback); 170 virtual ~GetCredInfoCallbackWrapper() = default; 171 172 void OnCredentialInfo(const std::vector<CredentialInfo> &infoList) override; 173 174 private: 175 int32_t userId_; 176 int32_t authType_; 177 sptr<IGetCredInfoCallback> innerCallback_ = nullptr; 178 }; 179 180 class GetPropCallbackWrapper : public GetPropCallback { 181 public: 182 GetPropCallbackWrapper(int32_t userId, const sptr<IGetSetPropCallback> &callback); 183 virtual ~GetPropCallbackWrapper() = default; 184 185 void OnResult(int32_t result, const Attributes &extraInfo) override; 186 187 private: 188 int32_t userId_; 189 sptr<IGetSetPropCallback> innerCallback_; 190 }; 191 192 class SetPropCallbackWrapper : public SetPropCallback { 193 public: 194 SetPropCallbackWrapper(int32_t userId, const sptr<IGetSetPropCallback> &callback); 195 virtual ~SetPropCallbackWrapper() = default; 196 197 void OnResult(int32_t result, const Attributes &extraInfo) override; 198 199 private: 200 int32_t userId_; 201 sptr<IGetSetPropCallback> innerCallback_; 202 }; 203 204 class GetSecUserInfoCallbackWrapper : public GetSecUserInfoCallback { 205 public: 206 GetSecUserInfoCallbackWrapper(AuthType authType, const sptr<IGetEnrolledIdCallback> &callback); 207 virtual ~GetSecUserInfoCallbackWrapper() = default; 208 209 void OnSecUserInfo(const SecUserInfo &info) override; 210 211 private: 212 AuthType authType_; 213 sptr<IGetEnrolledIdCallback> innerCallback_; 214 }; 215 216 class GetSecureUidCallback final : public GetSecUserInfoCallback { 217 public: 218 GetSecureUidCallback(int32_t userId); 219 220 void OnSecUserInfo(const SecUserInfo &info) override; 221 222 public: 223 int32_t userId_; 224 uint64_t secureUid_ = 0; 225 std::mutex secureMtx_; 226 std::condition_variable secureCv_; 227 }; 228 229 class PrepareRemoteAuthCallbackWrapper : public PrepareRemoteAuthCallback { 230 public: 231 PrepareRemoteAuthCallbackWrapper(const sptr<IPreRemoteAuthCallback> &callback); 232 virtual ~PrepareRemoteAuthCallbackWrapper() = default; 233 234 void OnResult(int32_t result) override; 235 236 private: 237 sptr<IPreRemoteAuthCallback> innerCallback_; 238 }; 239 240 class GetDomainAuthStatusInfoCallback final : public DomainAccountCallback { 241 public: 242 GetDomainAuthStatusInfoCallback(const GetPropertyRequest &request, const sptr<IGetSetPropCallback> &callback); 243 244 void OnResult(int32_t result, Parcel &parcel) override; 245 246 private: 247 GetPropertyRequest request_; 248 sptr<IGetSetPropCallback> innerCallback_; 249 }; 250 } // namespace AccountSA 251 } // namespace OHOS 252 #endif // OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_ACCOUNT_IAM_CALLBACK_H 253