• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, bool isDelete = false);
73 
74     ErrCode GetOAuthToken(const AuthenticatorSessionRequest &request,
75         std::string &token, const uint32_t apiVersion = Constants::API_VERSION8);
76     ErrCode SetOAuthToken(const AuthenticatorSessionRequest &request);
77     ErrCode DeleteOAuthToken(
78         const AuthenticatorSessionRequest &request, const uint32_t apiVersion = Constants::API_VERSION8);
79     ErrCode SetOAuthTokenVisibility(
80         const AuthenticatorSessionRequest &request, const uint32_t apiVersion = Constants::API_VERSION8);
81     ErrCode CheckOAuthTokenVisibility(const AuthenticatorSessionRequest &request,
82         bool &isVisible, const uint32_t apiVersion = Constants::API_VERSION8);
83     ErrCode GetAllOAuthTokens(const AuthenticatorSessionRequest &request, std::vector<OAuthTokenInfo> &tokenInfos);
84     ErrCode GetOAuthList(const AuthenticatorSessionRequest &request,
85         std::set<std::string> &oauthList, const uint32_t apiVersion = Constants::API_VERSION8);
86 
87     ErrCode GetAllAccounts(const std::string &owner, std::vector<AppAccountInfo> &appAccounts, const uid_t &uid,
88         const std::string &bundleName, const uint32_t &appIndex);
89     ErrCode GetAllAccessibleAccounts(std::vector<AppAccountInfo> &appAccounts,
90         const uid_t &uid, const std::string &bundleName, const uint32_t &appIndex);
91 
92     ErrCode SelectAccountsByOptions(
93         const SelectAccountsOptions &options, const sptr<IAppAccountAuthenticatorCallback> &callback,
94         const uid_t &uid, const std::string &bundleName, const uint32_t &appIndex);
95 
96     ErrCode OnPackageRemoved(const uid_t &uid, const std::string &bundleName, const uint32_t &appIndex);
97     ErrCode OnUserRemoved(int32_t userId);
98 
99     ErrCode GetAllAccountsFromDataStorage(const std::string &owner, std::vector<AppAccountInfo> &appAccounts,
100         const std::string &bundleName, const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr);
101     ErrCode GetAllAccessibleAccountsFromDataStorage(std::vector<AppAccountInfo> &appAccounts,
102         const std::string &bundleName, const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr,
103         const uint32_t &appIndex);
104     std::shared_ptr<AppAccountDataStorage> GetDataStorage(const uid_t &uid, const bool &autoSync = false,
105         DistributedKv::SecurityLevel securityLevel = DistributedKv::SecurityLevel::S1);
106 
107     void OnAbilityStateChanged(const AppExecFwk::AbilityStateData &abilityStateData);
108 
109 private:
110     AppAccountControlManager() = default;
111     ~AppAccountControlManager() = default;
112     DISALLOW_COPY_AND_MOVE(AppAccountControlManager);
113     bool RegisterApplicationStateObserver();
114     void UnregisterApplicationStateObserver();
115     void PopDataFromAssociatedDataCache();
116     void RemoveAssociatedDataCacheByUid(const uid_t &uid);
117     void RemoveAssociatedDataCacheByAccount(const uid_t &uid, const std::string &name);
118     ErrCode GetAssociatedDataFromStorage(const std::string &name, const std::string &key, std::string &value,
119         const uid_t &uid, const uint32_t &appIndex);
120     std::shared_ptr<AppAccountDataStorage> GetDataStorageByUserId(int32_t userId, const bool &autoSync = false,
121         DistributedKv::SecurityLevel securityLevel = DistributedKv::SecurityLevel::S1);
122     bool NeedSyncDataStorage(const AppAccountInfo &appAccountInfo);
123     ErrCode GetAccountInfoFromDataStorage(
124         AppAccountInfo &appAccountInfo, std::shared_ptr<AppAccountDataStorage> &dataStoragePtr);
125     ErrCode AddAccountInfoIntoDataStorage(AppAccountInfo &appAccountInfo,
126         const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr, const uid_t &uid);
127     ErrCode SaveAccountInfoIntoDataStorage(AppAccountInfo &appAccountInfo,
128         const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr, const uid_t &uid);
129     ErrCode DeleteAccountInfoFromDataStorage(
130         AppAccountInfo &appAccountInfo, std::shared_ptr<AppAccountDataStorage> &dataStoragePtr, const uid_t &uid);
131 
132     ErrCode SaveAuthorizedAccount(const std::string &authorizedApp, AppAccountInfo &appAccountInfo,
133         const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr, const uid_t &uid);
134     ErrCode RemoveAuthorizedAccount(const std::string &authorizedApp, AppAccountInfo &appAccountInfo,
135         const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr, const uid_t &uid);
136     ErrCode SaveAuthorizedAccountIntoDataStorage(const std::string &authorizedApp, AppAccountInfo &appAccountInfo,
137         const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr);
138     ErrCode RemoveAuthorizedAccountFromDataStorage(const std::string &authorizedApp, AppAccountInfo &appAccountInfo,
139         const std::shared_ptr<AppAccountDataStorage> &dataStoragePtr);
140 
141 private:
142     std::mutex mutex_;
143     std::mutex storePtrMutex_;
144     std::mutex associatedDataMutex_;
145     std::map<uid_t, AssociatedDataCacheItem> associatedDataCache_;
146     std::map<std::string, std::shared_ptr<AppAccountDataStorage>> storePtrMap_;
147     sptr<AppExecFwk::IAppMgr> iAppMgr_;
148     sptr<AppAccountAppStateObserver> appStateObserver_;
149     std::size_t ACCOUNT_MAX_SIZE = 1000;
150     std::size_t ASSOCIATED_DATA_CACHE_MAX_SIZE = 5;
151 };
152 }  // namespace AccountSA
153 }  // namespace OHOS
154 
155 #endif  // OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_APPACCOUNT_APP_ACCOUNT_CONTROL_MANAGER_H
156