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