• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 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_OSACCOUNT_OS_ACCOUNT_CONTROL_FILE_MANAGER_H
17 #define OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_OSACCOUNT_OS_ACCOUNT_CONTROL_FILE_MANAGER_H
18 
19 #include <memory>
20 #include <mutex>
21 #include <sys/inotify.h>
22 #ifdef ENABLE_FILE_WATCHER
23 #include "account_file_watcher_manager.h"
24 #endif // ENABLE_FILE_WATCHER
25 #include "ios_account_control.h"
26 #include "os_account_constants.h"
27 #if defined(HAS_KV_STORE_PART) && defined(DISTRIBUTED_FEATURE_ENABLED)
28 #include "os_account_database_operator.h"
29 #endif // defined(HAS_KV_STORE_PART) && defined(DISTRIBUTED_FEATURE_ENABLED)
30 #include "os_account_file_operator.h"
31 #include "os_account_photo_operator.h"
32 namespace OHOS {
33 namespace AccountSA {
34 using CheckNotifyEventCallbackFunc = std::function<bool(const std::string&, int32_t, uint32_t)>;
35 
36 bool GetValidAccountID(const std::string& dirName, std::int32_t& accountID);
37 
38 class OsAccountControlFileManager : public IOsAccountControl {
39 public:
40     OsAccountControlFileManager();
41     virtual ~OsAccountControlFileManager();
42     void Init() override;
43     void FileInit();
44     ErrCode GetOsAccountConfig(OsAccountConfig &config) override;
45     ErrCode GetOsAccountList(std::vector<OsAccountInfo> &osAccountList) override;
46     ErrCode GetOsAccountIdList(std::vector<int32_t> &idList) override;
47     ErrCode GetOsAccountInfoById(const int id, OsAccountInfo &osAccountInfo) override;
48     ErrCode GetConstraintsByType(const OsAccountType type, std::vector<std::string> &constraints) override;
49     ErrCode InsertOsAccount(OsAccountInfo &osAccountInfo) override;
50     ErrCode DelOsAccount(const int id) override;
51     ErrCode UpdateOsAccount(OsAccountInfo &osAccountInfo) override;
52     ErrCode GetAccountIndexFromFile(Json &accountIndexJson) override;
53     ErrCode GetSerialNumber(int64_t &serialNumber) override;
54     ErrCode GetAllowCreateId(int &id) override;
55     ErrCode IsOsAccountExists(const int id, bool &isExists) override;
56     ErrCode GetPhotoById(const int id, std::string &photo) override;
57     ErrCode SetPhotoById(const int id, const std::string &photo) override;
58     ErrCode GetIsMultiOsAccountEnable(bool &isMultiOsAccountEnable) override;
59     ErrCode CheckConstraintsList(const std::vector<std::string> &constraints,
60         bool &isExists, bool &isOverSize) override;
61     ErrCode IsAllowedCreateAdmin(bool &isAllowedCreateAdmin) override;
62 
63     ErrCode GetCreatedOsAccountNumFromDatabase(const std::string& storeID,
64         int &createdOsAccountNum) override;
65     ErrCode GetSerialNumberFromDatabase(const std::string& storeID,
66         int64_t &serialNumber) override;
67     ErrCode GetMaxAllowCreateIdFromDatabase(const std::string& storeID, int &id) override;
68     ErrCode GetOsAccountFromDatabase(const std::string& storeID,
69         const int id, OsAccountInfo& osAccountInfo) override;
70     ErrCode GetOsAccountListFromDatabase(const std::string& storeID,
71         std::vector<OsAccountInfo>& osAccountList) override;
72 
73     ErrCode RemoveOAConstraintsInfo(const int32_t id) override;
74     ErrCode IsFromBaseOAConstraintsList(const int32_t id, const std::string constraint, bool &isExits) override;
75     ErrCode IsFromGlobalOAConstraintsList(const int32_t id, const int32_t deviceOwnerId,
76         const std::string constraint, std::vector<ConstraintSourceTypeInfo> &globalSourceList) override;
77     ErrCode IsFromSpecificOAConstraintsList(const int32_t id, const int32_t deviceOwnerId,
78         const std::string constraint, std::vector<ConstraintSourceTypeInfo> &specificSourceList) override;
79     ErrCode GetGlobalOAConstraintsList(std::vector<std::string> &constraintsList) override;
80     ErrCode GetSpecificOAConstraintsList(const int32_t id, std::vector<std::string> &constraintsList) override;
81     ErrCode UpdateBaseOAConstraints(const std::string& idStr,
82         const std::vector<std::string>& ConstraintStr, bool isAdd) override;
83     ErrCode UpdateGlobalOAConstraints(const std::string& idStr,
84         const std::vector<std::string>& ConstraintStr, bool isAdd) override;
85     ErrCode UpdateSpecificOAConstraints(const std::string& idStr,
86         const std::string& targetIdStr, const std::vector<std::string>& ConstraintStr, bool isAdd) override;
87     ErrCode GetDeviceOwnerId(int32_t &deviceOwnerId) override;
88     ErrCode UpdateDeviceOwnerId(const int32_t deviceOwnerId) override;
89 
90     ErrCode SetDefaultActivatedOsAccount(const int32_t id) override;
91     ErrCode GetDefaultActivatedOsAccount(int32_t &id) override;
92     ErrCode GenerateAccountInfoDigestStr(
93         const std::string &userInfoPath, const std::string &accountInfoStr, std::string &digestStr);
94     ErrCode DeleteAccountInfoDigest(const std::string &userInfoPath);
95     ErrCode UpdateAccountIndex(const OsAccountInfo &osAccountInfo, const bool isDelete) override;
96     ErrCode SetNextLocalId(const int32_t &nextLocalId) override;
97 
98 private:
99     ErrCode GetDefaultOsAccountConfig(OsAccountConfig &config);
100     ErrCode RemoveAccountIndex(const int32_t id);
101     int32_t GetNextLocalId(const std::vector<std::string> &accountIdList, int32_t startId);
102     ErrCode UpdateAccountList(const std::string &idStr, bool isAdd);
103     ErrCode GetAccountListFromFile(Json& accountListJson);
104     ErrCode GetAccountIndexInfo(std::string &accountIndexInfo);
105     ErrCode SaveAccountListToFile(const Json& accountListJson);
106     ErrCode SaveAccountListToFileAndDataBase(const Json& accountListJson);
107     void BuildAndSaveAccountListJsonFile(const std::vector<std::string>& accounts);
108     void RecoverAccountListJsonFile();
109     void RecoverAccountInfoDigestJsonFile();
110     void BuildAndSaveOsAccountIndexJsonFile();
111     void BuildAndSaveBaseOAConstraintsJsonFile();
112     void BuildAndSaveGlobalOAConstraintsJsonFile();
113     void BuildAndSaveSpecificOAConstraintsJsonFile();
114     void GlobalConstraintsDataOperate(const std::string& idStr,
115         const std::vector<std::string>& ConstraintStr, bool isAdd, Json &globalOAConstraintsJson);
116     void SpecificConstraintsDataOperate(const std::string& idStr, const std::string& targetIdStr,
117         const std::vector<std::string>& ConstraintStr, bool isAdd, Json& userPrivateConstraintsDataJson);
118 
119     ErrCode GetBaseOAConstraintsFromFile(Json &baseOAConstraintsJson);
120     ErrCode GetGlobalOAConstraintsFromFile(Json &globalOAConstraintsJson);
121     ErrCode GetSpecificOAConstraintsFromFile(Json &specificOAConstraintsJson);
122     ErrCode SaveBaseOAConstraintsToFile(const Json &baseOAConstraints);
123     ErrCode SaveGlobalOAConstraintsToFile(const Json &globalOAConstraints);
124     ErrCode SaveSpecificOAConstraintsToFile(const Json &specificOAConstraints);
125 
126     ErrCode RemoveOABaseConstraintsInfo(const int32_t id);
127     ErrCode RemoveOAGlobalConstraintsInfo(const int32_t id);
128     ErrCode RemoveOASpecificConstraintsInfo(const int32_t id);
129     ErrCode GetAccountInfoDigestFromFile(const std::string &path, uint8_t *digest, uint32_t size);
130     void GetNotifyEvent();
131     bool DealWithFileModifyEvent(const std::string &fileName, const int32_t id);
132     bool DealWithFileDeleteEvent(const std::string &fileName, const int32_t id);
133     bool DealWithFileMoveEvent(const std::string &fileName, const int32_t id);
134     void InitFileWatcherInfo(std::vector<std::string> &accountIdList);
135     bool RecoverAccountData(const std::string &fileName, const int32_t id);
136 
137 private:
138     std::shared_ptr<AccountFileOperator> accountFileOperator_;
139 #if defined(HAS_KV_STORE_PART) && defined(DISTRIBUTED_FEATURE_ENABLED)
140     std::shared_ptr<OsAccountDatabaseOperator> osAccountDataBaseOperator_;
141 #endif // defined(HAS_KV_STORE_PART) && defined(DISTRIBUTED_FEATURE_ENABLED)
142 #ifdef ENABLE_FILE_WATCHER
143     AccountFileWatcherMgr &accountFileWatcherMgr_;
144     CheckNotifyEventCallbackFunc eventCallbackFunc_;
145 #endif // ENABLE_FILE_WATCHER
146     std::shared_ptr<OsAccountFileOperator> osAccountFileOperator_;
147     std::shared_ptr<OsAccountPhotoOperator> osAccountPhotoOperator_;
148     std::mutex accountListFileLock_;
149     std::mutex accountInfoFileLock_;
150     std::mutex operatingIdMutex_;
151     std::mutex baseOAConstraintsFileLock_;
152     std::mutex globalOAConstraintsFileLock_;
153     std::mutex specificOAConstraintsFileLock_;
154 };
155 }  // namespace AccountSA
156 }  // namespace OHOS
157 
158 #endif  // OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_OSACCOUNT_OS_ACCOUNT_CONTROL_FILE_MANAGER_H
159