1 /* 2 * Copyright (c) 2023 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_INTERFACES_KITS_NAPI_DOMAIN_ACCOUNT_INCLUDE_NAPI_DOMAIN_ACCOUNT_MANAGER_H 17 #define OS_ACCOUNT_INTERFACES_KITS_NAPI_DOMAIN_ACCOUNT_INCLUDE_NAPI_DOMAIN_ACCOUNT_MANAGER_H 18 19 #include "domain_account_callback.h" 20 #include "domain_account_common.h" 21 #include "domain_account_plugin.h" 22 #include "get_access_token_callback.h" 23 #include "napi/native_api.h" 24 #include "napi_account_common.h" 25 26 namespace OHOS { 27 namespace AccountJsKit { 28 namespace { 29 const int32_t INVALID_PARAMETER = -1; 30 } 31 32 struct JsDomainPlugin { 33 napi_ref auth = nullptr; 34 napi_ref authWithPopup = nullptr; 35 napi_ref authWithToken = nullptr; 36 napi_ref getAuthStatusInfo = nullptr; 37 napi_ref getDomainAccountInfo = nullptr; 38 napi_ref onAccountBound = nullptr; 39 napi_ref onAccountUnbound = nullptr; 40 napi_ref isAccountTokenValid = nullptr; 41 napi_ref getAccessToken = nullptr; 42 }; 43 44 struct HasDomainAccountAsyncContext : public CommonAsyncContext { HasDomainAccountAsyncContextHasDomainAccountAsyncContext45 HasDomainAccountAsyncContext(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 46 AccountSA::DomainAccountInfo domainInfo; 47 bool isHasDomainAccount = false; 48 }; 49 50 struct UpdateAccountTokenAsyncContext : public CommonAsyncContext { UpdateAccountTokenAsyncContextUpdateAccountTokenAsyncContext51 UpdateAccountTokenAsyncContext(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 52 AccountSA::DomainAccountInfo domainInfo; 53 std::vector<uint8_t> token; 54 }; 55 56 struct IsAuthenticationExpiredAsyncContext : public CommonAsyncContext { IsAuthenticationExpiredAsyncContextIsAuthenticationExpiredAsyncContext57 IsAuthenticationExpiredAsyncContext(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 58 AccountSA::DomainAccountInfo domainInfo; 59 bool isExpired = false; 60 }; 61 62 struct GetAccessTokenAsyncContext : public CommonAsyncContext { GetAccessTokenAsyncContextGetAccessTokenAsyncContext63 GetAccessTokenAsyncContext(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 64 AccountSA::DomainAccountInfo domainInfo; 65 AAFwk::WantParams getTokenParams; 66 std::vector<uint8_t> accessToken; 67 }; 68 69 struct GetAccountInfoAsyncContext : public CommonAsyncContext { GetAccountInfoAsyncContextGetAccountInfoAsyncContext70 GetAccountInfoAsyncContext(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 71 AccountSA::DomainAccountInfo domainInfo; 72 AAFwk::WantParams getAccountInfoParams; 73 }; 74 75 struct UpdateAccountInfoAsyncContext : public CommonAsyncContext { UpdateAccountInfoAsyncContextUpdateAccountInfoAsyncContext76 UpdateAccountInfoAsyncContext(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 77 AccountSA::DomainAccountInfo oldAccountInfo; 78 AccountSA::DomainAccountInfo newAccountInfo; 79 }; 80 81 struct JsDomainPluginParam : public CommonAsyncContext { JsDomainPluginParamJsDomainPluginParam82 JsDomainPluginParam(napi_env napiEnv) : CommonAsyncContext(napiEnv) {}; 83 napi_ref func = nullptr; 84 AccountSA::DomainAccountInfo domainAccountInfo; 85 std::shared_ptr<AccountSA::DomainAccountCallback> callback = nullptr; 86 AccountSA::GetAccessTokenOptions option; 87 ThreadLockInfo *lockInfo = nullptr; 88 int32_t userId = 0; 89 AccountSA::AuthMode authMode = AccountSA::AUTH_INVALID_MODE; 90 std::vector<uint8_t> authData; 91 std::string accountId = ""; 92 int32_t remainingTimes = INVALID_PARAMETER; 93 int32_t freezingTime = INVALID_PARAMETER; 94 int32_t callingUid = INVALID_PARAMETER; 95 }; 96 97 class NapiDomainAccountPlugin final: public AccountSA::DomainAccountPlugin { 98 public: 99 NapiDomainAccountPlugin(napi_env env, const JsDomainPlugin &jsPlugin); 100 ~NapiDomainAccountPlugin(); 101 void Auth(const AccountSA::DomainAccountInfo &info, const std::vector<uint8_t> &credential, 102 const std::shared_ptr<AccountSA::DomainAccountCallback> &callback) override; 103 void AuthWithPopup(const AccountSA::DomainAccountInfo &info, 104 const std::shared_ptr<AccountSA::DomainAccountCallback> &callback) override; 105 void AuthWithToken(const AccountSA::DomainAccountInfo &info, const std::vector<uint8_t> &token, 106 const std::shared_ptr<AccountSA::DomainAccountCallback> &callback) override; 107 void GetAuthStatusInfo(const AccountSA::DomainAccountInfo &info, 108 const std::shared_ptr<AccountSA::DomainAccountCallback> &callback) override; 109 void GetDomainAccountInfo(const AccountSA::GetDomainAccountInfoOptions &options, 110 const std::shared_ptr<AccountSA::DomainAccountCallback> &callback) override; 111 void OnAccountBound(const AccountSA::DomainAccountInfo &info, const int32_t localId, 112 const std::shared_ptr<AccountSA::DomainAccountCallback> &callback) override; 113 void OnAccountUnBound(const AccountSA::DomainAccountInfo &info, 114 const std::shared_ptr<AccountSA::DomainAccountCallback> &callback) override; 115 void IsAccountTokenValid(const AccountSA::DomainAccountInfo &info, const std::vector<uint8_t> &token, 116 const std::shared_ptr<AccountSA::DomainAccountCallback> &callback) override; 117 void GetAccessToken(const AccountSA::DomainAccountInfo &domainInfo, const std::vector<uint8_t> &accountToken, 118 const AccountSA::GetAccessTokenOptions &option, 119 const std::shared_ptr<AccountSA::DomainAccountCallback> &callback) override; 120 121 private: 122 void AuthCommon(AccountSA::AuthMode authMode, const AccountSA::DomainAccountInfo &info, 123 const std::vector<uint8_t> &authData, const std::shared_ptr<AccountSA::DomainAccountCallback> &callback); 124 125 private: 126 napi_env env_; 127 JsDomainPlugin jsPlugin_; 128 ThreadLockInfo lockInfo_; 129 }; 130 131 class NapiHasDomainInfoCallback final : public AccountSA::DomainAccountCallback { 132 public: 133 NapiHasDomainInfoCallback(napi_env env, napi_ref callbackRef, napi_deferred deferred); 134 void OnResult(const int32_t errCode, Parcel &parcel) override; 135 136 private: 137 AccountJsKit::ThreadLockInfo lockInfo_; 138 napi_env env_; 139 napi_ref callbackRef_ = nullptr; 140 napi_deferred deferred_ = nullptr; 141 }; 142 143 class NapiGetAccessTokenCallback final : public AccountSA::GetAccessTokenCallback { 144 public: 145 NapiGetAccessTokenCallback(napi_env env, napi_ref callbackRef, napi_deferred deferred); 146 void OnResult(const int32_t errCode, const std::vector<uint8_t> &accessToken) override; 147 148 private: 149 AccountJsKit::ThreadLockInfo lockInfo_; 150 napi_env env_ = nullptr; 151 napi_ref callbackRef_ = nullptr; 152 napi_deferred deferred_ = nullptr; 153 }; 154 155 class NapiGetAccountInfoCallback final : public AccountSA::DomainAccountCallback { 156 public: 157 NapiGetAccountInfoCallback(napi_env env, napi_ref callbackRef, napi_deferred deferred); 158 void OnResult(int32_t errCode, Parcel &parcel) override; 159 160 private: 161 AccountJsKit::ThreadLockInfo lockInfo_; 162 napi_env env_ = nullptr; 163 napi_ref callbackRef_ = nullptr; 164 napi_deferred deferred_ = nullptr; 165 }; 166 167 class NapiDomainAccountManager { 168 public: 169 static napi_value Init(napi_env env, napi_value exports); 170 171 private: 172 static napi_value JsConstructor(napi_env env, napi_callback_info cbInfo); 173 static napi_value RegisterPlugin(napi_env env, napi_callback_info cbInfo); 174 static napi_value UnregisterPlugin(napi_env env, napi_callback_info cbInfo); 175 static napi_value Auth(napi_env env, napi_callback_info cbInfo); 176 static napi_value AuthWithPopup(napi_env env, napi_callback_info cbInfo); 177 static napi_value HasAccount(napi_env env, napi_callback_info cbInfo); 178 static napi_value UpdateAccountToken(napi_env env, napi_callback_info cbInfo); 179 static napi_value IsAuthenticationExpired(napi_env env, napi_callback_info cbInfo); 180 static napi_value GetAccessToken(napi_env env, napi_callback_info cbInfo); 181 static napi_value GetDomainAccountInfo(napi_env env, napi_callback_info cbInfo); 182 static napi_value UpdateAccountInfo(napi_env env, napi_callback_info cbInfo); 183 }; 184 } // namespace AccountJsKit 185 } // namespace OHOS 186 #endif // OS_ACCOUNT_INTERFACES_KITS_NAPI_DOMAIN_ACCOUNT_INCLUDE_NAPI_DOMAIN_ACCOUNT_MANAGER_H