• 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(CJsonUnique &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     bool CheckConstraints(const std::vector<std::string> &constraints) override;
60     ErrCode IsAllowedCreateAdmin(bool &isAllowedCreateAdmin) override;
61 
62     ErrCode GetCreatedOsAccountNumFromDatabase(const std::string& storeID,
63         int &createdOsAccountNum) override;
64     ErrCode GetSerialNumberFromDatabase(const std::string& storeID,
65         int64_t &serialNumber) override;
66     ErrCode GetMaxAllowCreateIdFromDatabase(const std::string& storeID, int &id) override;
67     ErrCode GetOsAccountFromDatabase(const std::string& storeID,
68         const int id, OsAccountInfo& osAccountInfo) override;
69     ErrCode GetOsAccountListFromDatabase(const std::string& storeID,
70         std::vector<OsAccountInfo>& osAccountList) override;
71 
72     ErrCode RemoveOAConstraintsInfo(const int32_t id) override;
73     ErrCode IsFromBaseOAConstraintsList(const int32_t id, const std::string constraint, bool &isExits) override;
74     ErrCode IsFromGlobalOAConstraintsList(const int32_t id, const int32_t deviceOwnerId,
75         const std::string constraint, std::vector<ConstraintSourceTypeInfo> &globalSourceList) override;
76     ErrCode IsFromSpecificOAConstraintsList(const int32_t id, const int32_t deviceOwnerId,
77         const std::string constraint, std::vector<ConstraintSourceTypeInfo> &specificSourceList) override;
78     ErrCode GetGlobalOAConstraintsList(std::vector<std::string> &constraintsList) override;
79     ErrCode GetSpecificOAConstraintsList(const int32_t id, std::vector<std::string> &constraintsList) override;
80     ErrCode UpdateBaseOAConstraints(const std::string& idStr,
81         const std::vector<std::string>& ConstraintStr, bool isAdd) override;
82     ErrCode UpdateGlobalOAConstraints(const std::string& idStr,
83         const std::vector<std::string>& ConstraintStr, bool isAdd) override;
84     ErrCode UpdateSpecificOAConstraints(const std::string& idStr,
85         const std::string& targetIdStr, const std::vector<std::string>& ConstraintStr, bool isAdd) override;
86     ErrCode GetDeviceOwnerId(int32_t &deviceOwnerId) override;
87     ErrCode UpdateDeviceOwnerId(const int32_t deviceOwnerId) override;
88 
89     ErrCode SetDefaultActivatedOsAccount(const int32_t id) override;
90     ErrCode GetDefaultActivatedOsAccount(int32_t &id) override;
91     ErrCode GenerateAccountInfoDigestStr(
92         const std::string &userInfoPath, const std::string &accountInfoStr, std::string &digestStr);
93     ErrCode DeleteAccountInfoDigest(const std::string &userInfoPath);
94     ErrCode UpdateAccountIndex(const OsAccountInfo &osAccountInfo, const bool isDelete) override;
95     ErrCode SetNextLocalId(const int32_t &nextLocalId) override;
96     ErrCode SetDomainBoundFlag(
97         const int32_t localId, const bool isBoundCompleted, const DomainAccountInfo domainInfo = {}) override;
98     ErrCode GetDomainBoundFlag(const int32_t localId, bool &isBoundCompleted, DomainAccountInfo &domainInfo) override;
99 private:
100     ErrCode GetDefaultOsAccountConfig(OsAccountConfig &config);
101     ErrCode RemoveAccountIndex(const int32_t id);
102     int32_t GetNextLocalId(const std::vector<std::string> &accountIdList, int32_t startId);
103     ErrCode UpdateAccountList(const std::string &idStr, bool isAdd);
104     ErrCode GetAccountListFromFile(CJsonUnique &accountListJson);
105     ErrCode GetAccountIndexInfo(std::string &accountIndexInfo);
106     ErrCode SaveAccountListToFile(const CJsonUnique &accountListJson);
107     ErrCode SaveAccountListToFileAndDataBase(const CJsonUnique &accountListJson);
108     void BuildAndSaveAccountListJsonFile(const std::vector<std::string>& accounts);
109     void RecoverAccountListJsonFile();
110     void RecoverAccountInfoDigestJsonFile();
111     void BuildAndSaveOsAccountIndexJsonFile();
112     void BuildAndSaveBaseOAConstraintsJsonFile();
113     void BuildAndSaveGlobalOAConstraintsJsonFile();
114     void BuildAndSaveSpecificOAConstraintsJsonFile();
115     void GlobalConstraintsDataOperate(const std::string& idStr,
116         const std::vector<std::string>& ConstraintStr, bool isAdd, CJsonUnique &globalOAConstraintsJson);
117     void SpecificConstraintsDataOperate(const std::string& idStr, const std::string& targetIdStr,
118         const std::vector<std::string>& ConstraintStr, bool isAdd, cJSON *userPrivateConstraintsDataJson);
119 
120     ErrCode GetBaseOAConstraintsFromFile(CJsonUnique &baseOAConstraintsJson);
121     ErrCode GetGlobalOAConstraintsFromFile(CJsonUnique &globalOAConstraintsJson);
122     ErrCode GetSpecificOAConstraintsFromFile(CJsonUnique &specificOAConstraintsJson);
123     ErrCode SaveBaseOAConstraintsToFile(const CJsonUnique &baseOAConstraints);
124     ErrCode SaveGlobalOAConstraintsToFile(const CJsonUnique &globalOAConstraints);
125     ErrCode SaveSpecificOAConstraintsToFile(const CJsonUnique &specificOAConstraints);
126     void RemoveAllUsersConstraintsInfo(CJsonUnique &specificOAConstraintsJson, const int32_t id);
127 
128     ErrCode RemoveOABaseConstraintsInfo(const int32_t id);
129     ErrCode RemoveOAGlobalConstraintsInfo(const int32_t id);
130     ErrCode RemoveOASpecificConstraintsInfo(const int32_t id);
131     ErrCode GetAccountInfoDigestFromFile(const std::string &path, uint8_t *digest, uint32_t size);
132     void GetNotifyEvent();
133     bool DealWithFileModifyEvent(const std::string &fileName, const int32_t id);
134     bool DealWithFileDeleteEvent(const std::string &fileName, const int32_t id);
135     bool DealWithFileMoveEvent(const std::string &fileName, const int32_t id);
136     void InitFileWatcherInfo(std::vector<std::string> &accountIdList);
137     bool RecoverAccountData(const std::string &fileName, const int32_t id);
138 #ifdef ENABLE_U1_ACCOUNT
139     void GetU1Config(const CJsonUnique &configJson, OsAccountConfig &config);
140 #endif // ENABLE_U1_ACCOUNT
141 private:
142     std::shared_ptr<AccountFileOperator> accountFileOperator_;
143 #if defined(HAS_KV_STORE_PART) && defined(DISTRIBUTED_FEATURE_ENABLED)
144     std::shared_ptr<OsAccountDatabaseOperator> osAccountDataBaseOperator_;
145 #endif // defined(HAS_KV_STORE_PART) && defined(DISTRIBUTED_FEATURE_ENABLED)
146 #ifdef ENABLE_FILE_WATCHER
147     AccountFileWatcherMgr &accountFileWatcherMgr_;
148     CheckNotifyEventCallbackFunc eventCallbackFunc_;
149 #endif // ENABLE_FILE_WATCHER
150     std::shared_ptr<OsAccountFileOperator> osAccountFileOperator_;
151     std::shared_ptr<OsAccountPhotoOperator> osAccountPhotoOperator_;
152     std::mutex accountListFileLock_;
153     std::mutex accountInfoFileLock_;
154     std::mutex operatingIdMutex_;
155     std::mutex baseOAConstraintsFileLock_;
156     std::mutex globalOAConstraintsFileLock_;
157     std::mutex specificOAConstraintsFileLock_;
158 };
159 }  // namespace AccountSA
160 }  // namespace OHOS
161 
162 #endif  // OS_ACCOUNT_SERVICES_ACCOUNTMGR_INCLUDE_OSACCOUNT_OS_ACCOUNT_CONTROL_FILE_MANAGER_H
163