1 /* 2 * Copyright (c) 2022 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 UDMF_SERVICE_IMPL_H 17 #define UDMF_SERVICE_IMPL_H 18 19 #include "store_cache.h" 20 #include "udmf_service_stub.h" 21 #include "kv_store_delegate_manager.h" 22 #include "metadata/store_meta_data.h" 23 #include "checker_manager.h" 24 #include "udmf_notifier_proxy.h" 25 namespace OHOS { 26 namespace UDMF { 27 /* 28 * UDMF server implementation 29 */ 30 class UdmfServiceImpl final : public UdmfServiceStub { 31 public: 32 UdmfServiceImpl(); 33 ~UdmfServiceImpl() = default; 34 using DBLaunchParam = DistributedDB::AutoLaunchParam; 35 int32_t SetData(CustomOption &option, UnifiedData &unifiedData, std::string &key) override; 36 int32_t GetData(const QueryOption &query, UnifiedData &unifiedData) override; 37 int32_t GetBatchData(const QueryOption &query, std::vector<UnifiedData> &unifiedDataSet) override; 38 int32_t UpdateData(const QueryOption &query, UnifiedData &unifiedData) override; 39 int32_t DeleteData(const QueryOption &query, std::vector<UnifiedData> &unifiedDataSet) override; 40 int32_t GetSummary(const QueryOption &query, Summary &summary) override; 41 int32_t AddPrivilege(const QueryOption &query, Privilege &privilege) override; 42 int32_t Sync(const QueryOption &query, const std::vector<std::string> &devices) override; 43 int32_t IsRemoteData(const QueryOption &query, bool &result) override; 44 int32_t SetAppShareOption(const std::string &intention, int32_t shareOption) override; 45 int32_t GetAppShareOption(const std::string &intention, int32_t &shareOption) override; 46 int32_t RemoveAppShareOption(const std::string &intention) override; 47 int32_t OnInitialize() override; 48 int32_t OnBind(const BindInfo &bindInfo) override; 49 int32_t ObtainAsynProcess(AsyncProcessInfo &processInfo) override; 50 int32_t ClearAsynProcessByKey(const std::string &businessUdKey) override; 51 int32_t ResolveAutoLaunch(const std::string &identifier, DBLaunchParam ¶m) override; 52 int32_t OnUserChange(uint32_t code, const std::string &user, const std::string &account) override; 53 int32_t SetDelayInfo(const DataLoadInfo &dataLoadInfo, sptr<IRemoteObject> iUdmfNotifier, 54 std::string &key) override; 55 int32_t PushDelayData(const std::string &key, UnifiedData &unifiedData) override; 56 int32_t GetDataIfAvailable(const std::string &key, const DataLoadInfo &dataLoadInfo, 57 sptr<IRemoteObject> iUdmfNotifier, std::shared_ptr<UnifiedData> unifiedData) override; 58 private: 59 bool IsNeedMetaSync(const DistributedData::StoreMetaData &meta, const std::vector<std::string> &uuids); 60 int32_t StoreSync(const UnifiedKey &key, const QueryOption &query, const std::vector<std::string> &devices); 61 int32_t SaveData(CustomOption &option, UnifiedData &unifiedData, std::string &key); 62 int32_t RetrieveData(const QueryOption &query, UnifiedData &unifiedData); 63 int32_t QueryDataCommon(const QueryOption &query, std::vector<UnifiedData> &dataSet, std::shared_ptr<Store> &store); 64 int32_t ProcessUri(const QueryOption &query, UnifiedData &unifiedData); 65 bool IsPermissionInCache(const QueryOption &query); 66 bool IsReadAndKeep(const std::vector<Privilege> &privileges, const QueryOption &query); 67 int32_t ProcessCrossDeviceData(uint32_t tokenId, UnifiedData &unifiedData, std::vector<Uri> &uris); 68 bool VerifyPermission(const std::string &permission, uint32_t callerTokenId); 69 bool HasDatahubPriviledge(const std::string &bundleName); 70 void RegisterAsyncProcessInfo(const std::string &businessUdKey); 71 void TransferToEntriesIfNeed(const QueryOption &query, UnifiedData &unifiedData); 72 bool IsNeedTransferDeviceType(const QueryOption &query); 73 bool CheckDragParams(UnifiedKey &key, const QueryOption &query); 74 int32_t CheckAddPrivilegePermission(UnifiedKey &key, std::string &processName, const QueryOption &query); 75 int32_t ProcessData(const QueryOption &query, std::vector<UnifiedData> &dataSet); 76 int32_t VerifyIntentionPermission(const QueryOption &query, UnifiedData &dataSet, 77 UnifiedKey &key, CheckerManager::CheckInfo &info); 78 bool IsFileMangerSa(); 79 bool IsFileMangerIntention(const std::string &intention); 80 std::string FindIntentionMap(const Intention &queryintention); 81 bool IsValidOptionsNonDrag(UnifiedKey &key, const std::string &intention); 82 bool IsValidInput(const QueryOption &query, UnifiedData &unifiedData, UnifiedKey &key); 83 bool CheckDeleteDataPermission(std::string &appId, const std::shared_ptr<Runtime> &runtime, 84 const QueryOption &query); 85 int32_t CheckAppId(std::shared_ptr<Runtime> runtime, const std::string &bundleName); 86 void CloseStoreWhenCorrupted(const std::string &intention, int32_t status); 87 void HandleDbError(const std::string &intention, int32_t &status); 88 int32_t HandleDelayDataCallback(DelayGetDataInfo &delayGetDataInfo, UnifiedData &unifiedData, 89 const std::string &key); 90 int32_t VerifyDataAccessPermission(std::shared_ptr<Runtime> runtime, const QueryOption &query, 91 const UnifiedData &unifiedData); 92 std::vector<std::string> ProcessResult(const std::map<std::string, int32_t> &results); 93 DistributedData::StoreMetaData BuildMeta(const std::string &storeId, int userId); 94 int32_t VerifyUpdatePermission(const QueryOption &query, UnifiedData &unifiedData, std::string &bundleName); 95 96 class Factory { 97 public: 98 Factory(); 99 ~Factory(); 100 101 private: 102 std::shared_ptr<UdmfServiceImpl> product_; 103 }; 104 static Factory factory_; 105 mutable std::recursive_mutex cacheMutex_; 106 std::map<std::string, Privilege> privilegeCache_ {}; 107 std::shared_ptr<ExecutorPool> executors_; 108 109 std::mutex mutex_; 110 std::unordered_map<std::string, AsyncProcessInfo> asyncProcessInfoMap_ {}; 111 ConcurrentMap<std::string, sptr<UdmfNotifierProxy>> dataLoadCallback_ {}; 112 ConcurrentMap<std::string, DelayGetDataInfo> delayDataCallback_ {}; 113 }; 114 } // namespace UDMF 115 } // namespace OHOS 116 #endif // UDMF_SERVICE_IMPL_H 117