• 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);
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