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