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