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