1 /* 2 * Copyright (c) 2021-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 OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_APPACCOUNT_APP_ACCOUNT_CONTROL_MANAGER_H 17 #define OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_APPACCOUNT_APP_ACCOUNT_CONTROL_MANAGER_H 18 19 #include "app_account_app_state_observer.h" 20 #include "app_mgr_interface.h" 21 #include "app_mgr_proxy.h" 22 #include "app_account_authenticator_manager.h" 23 #include "app_account_data_storage.h" 24 #include "iapp_account_authenticator_callback.h" 25 #include "iremote_object.h" 26 #include "want_params.h" 27 28 namespace OHOS { 29 namespace AccountSA { 30 struct AssociatedDataCacheItem { 31 std::map<std::string, std::string> data; 32 std::string name; 33 int32_t freq; 34 }; 35 36 class AppAccountControlManager { 37 public: 38 static AppAccountControlManager &GetInstance(); 39 ErrCode AddAccount(const std::string &name, const std::string &extraInfo, const uid_t &uid, 40 const std::string &bundleName, AppAccountInfo &appAccountInfo); 41 ErrCode CreateAccount(const std::string &name, const CreateAccountOptions &options, const uid_t &uid, 42 const std::string &bundleName, AppAccountInfo &appAccountInfo); 43 ErrCode DeleteAccount( 44 const std::string &name, const uid_t &uid, const std::string &bundleName, AppAccountInfo &appAccountInfo); 45 46 ErrCode GetAccountExtraInfo(const std::string &name, std::string &extraInfo, 47 const uid_t &uid, const std::string &bundleName, const uint32_t &appIndex); 48 ErrCode SetAccountExtraInfo(const std::string &name, const std::string &extraInfo, const uid_t &uid, 49 const std::string &bundleName, AppAccountInfo &appAccountInfo); 50 51 ErrCode EnableAppAccess(const std::string &name, const std::string &authorizedApp, 52 AppAccountCallingInfo &appAccountCallingInfo, AppAccountInfo &appAccountInfo, 53 const uint32_t apiVersion = Constants::API_VERSION7); 54 ErrCode DisableAppAccess(const std::string &name, const std::string &authorizedApp, 55 AppAccountCallingInfo &appAccountCallingInfo, AppAccountInfo &appAccountInfo, 56 const uint32_t apiVersion = Constants::API_VERSION7); 57 ErrCode CheckAppAccess(const std::string &name, const std::string &authorizedApp, bool &isAccessible, 58 const AppAccountCallingInfo &appAccountCallingInfo); 59 60 ErrCode CheckAppAccountSyncEnable(const std::string &name, bool &syncEnable, 61 const uid_t &uid, const std::string &bundleName, const uint32_t &appIndex); 62 ErrCode SetAppAccountSyncEnable(const std::string &name, const bool &syncEnable, const uid_t &uid, 63 const std::string &bundleName, AppAccountInfo &appAccountInfo); 64 ErrCode GetAssociatedData(const std::string &name, const std::string &key, 65 std::string &value, const uid_t &uid); 66 ErrCode SetAssociatedData(const std::string &name, const std::string &key, const std::string &value, 67 const AppAccountCallingInfo &appAccountCallingInfo); 68 69 ErrCode GetAccountCredential(const std::string &name, const std::string &credentialType, std::string &credential, 70 const AppAccountCallingInfo &appAccountCallingInfo); 71 ErrCode SetAccountCredential(const std::string &name, const std::string &credentialType, 72 const std::string &credential, const AppAccountCallingInfo &appAccountCallingInfo); 73 ErrCode DeleteAccountCredential(const std::string &name, const std::string &credentialType, 74 const AppAccountCallingInfo &callingInfo); 75 76 ErrCode GetOAuthToken(const AuthenticatorSessionRequest &request, 77 std::string &token, const uint32_t apiVersion = Constants::API_VERSION8); 78 ErrCode SetOAuthToken(const AuthenticatorSessionRequest &request); 79 ErrCode DeleteOAuthToken( 80 const AuthenticatorSessionRequest &request, const uint32_t apiVersion = Constants::API_VERSION8); 81 ErrCode SetOAuthTokenVisibility( 82 const AuthenticatorSessionRequest &request, const uint32_t apiVersion = Constants::API_VERSION8); 83 ErrCode CheckOAuthTokenVisibility(const AuthenticatorSessionRequest &request, 84 bool &isVisible, const uint32_t apiVersion = Constants::API_VERSION8); 85 ErrCode GetAllOAuthTokens(const AuthenticatorSessionRequest &request, std::vector<OAuthTokenInfo> &tokenInfos); 86 ErrCode GetOAuthList(const AuthenticatorSessionRequest &request, 87 std::set<std::string> &oauthList, const uint32_t apiVersion = Constants::API_VERSION8); 88 89 ErrCode GetAllAccounts(const std::string &owner, std::vector<AppAccountInfo> &appAccounts, const uid_t &uid, 90 const std::string &bundleName, const uint32_t &appIndex); 91 ErrCode GetAllAccessibleAccounts(std::vector<AppAccountInfo> &appAccounts, 92 const uid_t &uid, const std::string &bundleName, const uint32_t &appIndex); 93 94 ErrCode SelectAccountsByOptions( 95 const SelectAccountsOptions &options, const sptr<IAppAccountAuthenticatorCallback> &callback, 96 const uid_t &uid, const std::string &bundleName, const uint32_t &appIndex); 97 98 ErrCode OnPackageRemoved(const uid_t &uid, const std::string &bundleName, const uint32_t &appIndex); 99 ErrCode OnUserRemoved(int32_t userId); 100 101 ErrCode GetAllAccountsFromDataStorage(const std::string &owner, std::vector<AppAccountInfo> &appAccounts, 102 const std::string &bundleName, const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr); 103 ErrCode GetAllAccessibleAccountsFromDataStorage(std::vector<AppAccountInfo> &appAccounts, 104 const std::string &bundleName, const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr, 105 const uint32_t &appIndex); 106 std::shared_ptr<AppAccountDataStorage> GetDataStorage(const uid_t &uid, const bool &autoSync = false, 107 DistributedKv::SecurityLevel securityLevel = DistributedKv::SecurityLevel::S1); 108 109 void OnAbilityStateChanged(const AppExecFwk::AbilityStateData &abilityStateData); 110 111 private: 112 AppAccountControlManager() = default; 113 ~AppAccountControlManager() = default; 114 DISALLOW_COPY_AND_MOVE(AppAccountControlManager); 115 bool RegisterApplicationStateObserver(); 116 void UnregisterApplicationStateObserver(); 117 void PopDataFromAssociatedDataCache(); 118 void RemoveAssociatedDataCacheByUid(const uid_t &uid); 119 void RemoveAssociatedDataCacheByAccount(const uid_t &uid, const std::string &name); 120 ErrCode GetAssociatedDataFromStorage(const std::string &name, const std::string &key, std::string &value, 121 const uid_t &uid, const uint32_t &appIndex); 122 std::shared_ptr<AppAccountDataStorage> GetDataStorageByUserId(int32_t userId, const bool &autoSync = false, 123 DistributedKv::SecurityLevel securityLevel = DistributedKv::SecurityLevel::S1); 124 bool NeedSyncDataStorage(const AppAccountInfo &appAccountInfo); 125 ErrCode GetAccountInfoFromDataStorage( 126 AppAccountInfo &appAccountInfo, std::shared_ptr<AppAccountDataStorage> &dataStoragePtr); 127 ErrCode AddAccountInfoIntoDataStorage(AppAccountInfo &appAccountInfo, 128 const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr, const uid_t &uid); 129 ErrCode SaveAccountInfoIntoDataStorage(AppAccountInfo &appAccountInfo, 130 const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr, const uid_t &uid); 131 ErrCode DeleteAccountInfoFromDataStorage( 132 AppAccountInfo &appAccountInfo, std::shared_ptr<AppAccountDataStorage> &dataStoragePtr, const uid_t &uid); 133 134 ErrCode SaveAuthorizedAccount(const std::string &authorizedApp, AppAccountInfo &appAccountInfo, 135 const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr, const uid_t &uid); 136 ErrCode RemoveAuthorizedAccount(const std::string &authorizedApp, AppAccountInfo &appAccountInfo, 137 const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr, const uid_t &uid); 138 ErrCode SaveAuthorizedAccountIntoDataStorage(const std::string &authorizedApp, AppAccountInfo &appAccountInfo, 139 const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr); 140 ErrCode RemoveAuthorizedAccountFromDataStorage(const std::string &authorizedApp, AppAccountInfo &appAccountInfo, 141 const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr); 142 143 private: 144 std::mutex mutex_; 145 std::mutex storePtrMutex_; 146 std::mutex associatedDataMutex_; 147 std::map<uid_t, AssociatedDataCacheItem> associatedDataCache_; 148 std::map<std::string, std::shared_ptr<AppAccountDataStorage>> storePtrMap_; 149 sptr<AppExecFwk::IAppMgr> iAppMgr_; 150 sptr<AppAccountAppStateObserver> appStateObserver_; 151 std::size_t ACCOUNT_MAX_SIZE = 1000; 152 std::size_t ASSOCIATED_DATA_CACHE_MAX_SIZE = 5; 153 }; 154 } // namespace AccountSA 155 } // namespace OHOS 156 157 #endif // OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_APPACCOUNT_APP_ACCOUNT_CONTROL_MANAGER_H 158