1 /* 2 * Copyright (c) 2022 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 USERAUTH_EXCALLBACK_IMPL_H 17 #define USERAUTH_EXCALLBACK_IMPL_H 18 19 #include <mutex> 20 #include <map> 21 #include <vector> 22 #include "iuserauth_callback.h" 23 #include "userauth_controller.h" 24 #include "coauth_callback.h" 25 #include "set_prop_callback.h" 26 #include "useridm_callback.h" 27 #include "useridm_info.h" 28 #include "userauth_interface.h" 29 30 namespace OHOS { 31 namespace UserIAM { 32 namespace UserAuth { 33 class UserAuthCallbackImplCoAuth : public CoAuth::CoAuthCallback { 34 public: 35 explicit UserAuthCallbackImplCoAuth(const sptr<IUserAuthCallback>& impl, CoAuthInfo coAuthInfo, bool resultFlag); 36 virtual ~UserAuthCallbackImplCoAuth() = default; 37 38 void OnFinish(uint32_t resultCode, std::vector<uint8_t> &scheduleToken) override; 39 void OnAcquireInfo(uint32_t acquire) override; 40 void OnFinishHandle(uint32_t resultCode, std::vector<uint8_t> scheduleToken); 41 void OnAcquireInfoHandle(uint32_t acquire); 42 static int32_t SaveCoauthCallback(uint64_t contextId, std::shared_ptr<CoAuth::CoAuthCallback> coauthCallback); 43 static int32_t DeleteCoauthCallback(uint64_t contextId); 44 private: 45 void OnFinishHandleExtend(int32_t userId, SetPropertyRequest setPropertyRequest, AuthResult authResult, 46 int32_t ret, UserAuthToken authToken); 47 void DealFinishData(std::vector<uint64_t> sessionIds); 48 49 uint32_t callbackCount_ = 0; 50 uint32_t callbackNowCount_ = 0; 51 uint64_t callbackContextId_ = 0; 52 std::string pkgName_ = ""; 53 int32_t userId_ = 0; 54 uint64_t callerUid_ = 0; 55 bool isResultDoneFlag_ = false; 56 sptr<IUserAuthCallback> callback_ { nullptr }; 57 AuthType authType_; 58 std::mutex mutex_; 59 static std::mutex coauthCallbackmutex_; 60 static std::map<uint64_t, std::shared_ptr<CoAuth::CoAuthCallback>> saveCoauthCallback_; 61 }; 62 63 class UserAuthCallbackImplSetProp : public CoAuth::SetPropCallback { 64 public: 65 explicit UserAuthCallbackImplSetProp(const sptr<IUserAuthCallback>& impl); 66 virtual ~UserAuthCallbackImplSetProp() = default; 67 68 void OnResult(uint32_t result, std::vector<uint8_t> &extraInfo) override; 69 70 private: 71 sptr<IUserAuthCallback> callback_ { nullptr }; 72 }; 73 74 class UserAuthCallbackImplSetPropFreez : public CoAuth::SetPropCallback { 75 public: 76 explicit UserAuthCallbackImplSetPropFreez(std::vector<uint64_t> templateIds, 77 UserAuthToken authToken, FreezInfo freezInfo); 78 virtual ~UserAuthCallbackImplSetPropFreez() = default; 79 80 void OnResult(uint32_t result, std::vector<uint8_t> &extraInfo) override; 81 82 private: 83 std::vector<uint64_t> templateIds_; 84 int32_t resultCode_; 85 UserAuthToken authToken_; 86 AuthType authType_; 87 std::string pkgName_; 88 uint64_t callerUid_; 89 }; 90 91 class UserAuthCallbackImplIDMGetPorp : public UserIDM::GetInfoCallback { 92 public: 93 explicit UserAuthCallbackImplIDMGetPorp(const sptr<IUserAuthCallback>& impl, 94 GetPropertyRequest request, uint64_t callerUid, std::string pkgName); 95 virtual ~UserAuthCallbackImplIDMGetPorp() = default; 96 97 void OnGetInfo(std::vector<UserIDM::CredentialInfo>& info) override; 98 99 private: 100 sptr<IUserAuthCallback> callback_ { nullptr }; 101 GetPropertyRequest request_; 102 std::string pkgName_; 103 uint64_t callerUid_; 104 }; 105 106 class UserAuthCallbackImplIDMCothGetPorpFreez : public UserIDM::GetInfoCallback { 107 public: 108 explicit UserAuthCallbackImplIDMCothGetPorpFreez( 109 uint64_t callerUid, std::string pkgName, int32_t resultCode, 110 UserAuthToken authToken, SetPropertyRequest requset); 111 virtual ~UserAuthCallbackImplIDMCothGetPorpFreez() = default; 112 113 void OnGetInfo(std::vector<UserIDM::CredentialInfo>& info) override; 114 115 private: 116 UserAuthToken authToken_; 117 int32_t resultCode_; 118 SetPropertyRequest requset_; 119 std::string pkgName_; 120 uint64_t callerUid_; 121 }; 122 123 class UserAuthCallbackImplIDMGetPorpCoauth : public UserIDM::GetInfoCallback { 124 public: 125 explicit UserAuthCallbackImplIDMGetPorpCoauth(const sptr<IUserAuthCallback>& impl, 126 uint64_t callerUid, std::string pkgName, int32_t resultCode, UserAuthToken authToken, 127 GetPropertyRequest requset); 128 virtual ~UserAuthCallbackImplIDMGetPorpCoauth() = default; 129 130 void OnGetInfo(std::vector<UserIDM::CredentialInfo>& info) override; 131 132 private: 133 sptr<IUserAuthCallback> callback_ { nullptr }; 134 UserAuthToken authToken_; 135 int32_t resultCode_; 136 GetPropertyRequest requset_; 137 std::string pkgName_; 138 uint64_t callerUid_; 139 }; 140 } // namespace UserAuth 141 } // namespace UserIam 142 } // namespace OHOS 143 #endif // USERAUTH_EXCALLBACK_IMPL_H 144