1 /* 2 * Copyright (c) 2023 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 DATASHARESERVICE_DATA_SERVICE_IMPL_H 17 #define DATASHARESERVICE_DATA_SERVICE_IMPL_H 18 19 #include <cstdint> 20 #include <functional> 21 #include <string> 22 23 #include "accesstoken_kit.h" 24 #include "bundle_mgr_proxy.h" 25 #include "changeevent/remote_change_event.h" 26 #include "common_event_subscribe_info.h" 27 #include "common_event_subscriber.h" 28 #include "data_provider_config.h" 29 #include "data_proxy_observer.h" 30 #include "data_share_db_config.h" 31 #include "data_share_service_stub.h" 32 #include "data_share_silent_config.h" 33 #include "datashare_template.h" 34 #include "db_delegate.h" 35 #include "eventcenter/event.h" 36 #include "feature/static_acts.h" 37 #include "get_data_strategy.h" 38 #include "publish_strategy.h" 39 #include "rdb_notify_strategy.h" 40 #include "subscribe_strategy.h" 41 #include "template_strategy.h" 42 #include "utils.h" 43 #include "visibility.h" 44 45 namespace OHOS::DataShare { 46 class DataShareServiceImpl : public DataShareServiceStub { 47 public: 48 using Handler = std::function<void(int, std::map<std::string, std::vector<std::string>> &)>; 49 using ExecuteCallbackEx = std::function<std::pair<int32_t, int32_t>(DataProviderConfig::ProviderInfo &, 50 DistributedData::StoreMetaData &, std::shared_ptr<DBDelegate>)>; 51 DataShareServiceImpl() = default; 52 virtual ~DataShareServiceImpl(); 53 std::shared_ptr<DataShareResultSet> Query(const std::string &uri, const std::string &extUri, 54 const DataSharePredicates &predicates, const std::vector<std::string> &columns, int &errCode) override; 55 int32_t AddTemplate(const std::string &uri, const int64_t subscriberId, const Template &tplt) override; 56 int32_t DelTemplate(const std::string &uri, const int64_t subscriberId) override; 57 std::vector<OperationResult> Publish(const Data &data, const std::string &bundleNameOfProvider) override; 58 Data GetData(const std::string &bundleNameOfProvider, int &errorCode) override; 59 std::vector<OperationResult> SubscribeRdbData(const std::vector<std::string> &uris, 60 const TemplateId &id, const sptr<IDataProxyRdbObserver> observer) override; 61 std::vector<OperationResult> UnsubscribeRdbData( 62 const std::vector<std::string> &uris, const TemplateId &id) override; 63 std::vector<OperationResult> EnableRdbSubs( 64 const std::vector<std::string> &uris, const TemplateId &id) override; 65 std::vector<OperationResult> DisableRdbSubs( 66 const std::vector<std::string> &uris, const TemplateId &id) override; 67 std::vector<OperationResult> SubscribePublishedData(const std::vector<std::string> &uris, 68 const int64_t subscriberId, const sptr<IDataProxyPublishedDataObserver> observer) override; 69 std::vector<OperationResult> UnsubscribePublishedData(const std::vector<std::string> &uris, 70 const int64_t subscriberId) override; 71 std::vector<OperationResult> EnablePubSubs(const std::vector<std::string> &uris, 72 const int64_t subscriberId) override; 73 std::vector<OperationResult> DisablePubSubs(const std::vector<std::string> &uris, 74 const int64_t subscriberId) override; 75 void OnConnectDone() override; 76 int32_t OnBind(const BindInfo &binderInfo) override; 77 int32_t OnAppExit(pid_t uid, pid_t pid, uint32_t tokenId, const std::string &bundleName) override; 78 int32_t OnAppUninstall(const std::string &bundleName, int32_t user, int32_t index) override; 79 int32_t OnAppUpdate(const std::string &bundleName, int32_t user, int32_t index) override; 80 int32_t OnUserChange(uint32_t code, const std::string &user, const std::string &account) override; 81 void NotifyObserver(const std::string &uri) override; 82 static void DumpDataShareServiceInfo(int fd, std::map<std::string, std::vector<std::string>> ¶ms); 83 int32_t OnInitialize() override; 84 int32_t EnableSilentProxy(const std::string &uri, bool enable) override; 85 int32_t GetSilentProxyStatus(const std::string &uri, bool isCreateHelper) override; 86 int32_t RegisterObserver(const std::string &uri, const sptr<OHOS::IRemoteObject> &remoteObj) override; 87 int32_t UnregisterObserver(const std::string &uri, const sptr<OHOS::IRemoteObject> &remoteObj) override; 88 std::pair<int32_t, int32_t> InsertEx(const std::string &uri, const std::string &extUri, 89 const DataShareValuesBucket &valuesBucket) override; 90 std::pair<int32_t, int32_t> UpdateEx(const std::string &uri, const std::string &extUri, 91 const DataSharePredicates &predicate, const DataShareValuesBucket &valuesBucket) override; 92 std::pair<int32_t, int32_t> DeleteEx(const std::string &uri, const std::string &extUri, 93 const DataSharePredicates &predicate) override; 94 std::vector<DataProxyResult> PublishProxyData(const std::vector<DataShareProxyData> &proxyData, 95 const DataProxyConfig &proxyConfig) override; 96 std::vector<DataProxyResult> DeleteProxyData(const std::vector<std::string> &uris, 97 const DataProxyConfig &proxyConfig) override; 98 std::vector<DataProxyGetResult> GetProxyData(const std::vector<std::string> &uris, 99 const DataProxyConfig &proxyConfig) override; 100 std::vector<DataProxyResult> SubscribeProxyData(const std::vector<std::string> &uris, 101 const DataProxyConfig &proxyConfig, const sptr<IProxyDataObserver> observer) override; 102 std::vector<DataProxyResult> UnsubscribeProxyData(const std::vector<std::string> &uris, 103 const DataProxyConfig &proxyConfig) override; 104 static void UpdateLaunchInfo(); 105 private: 106 class SystemAbilityStatusChangeListener; 107 using StaticActs = DistributedData::StaticActs; 108 class DataShareStatic : public StaticActs { 109 public: ~DataShareStatic()110 ~DataShareStatic() override {}; 111 int32_t OnAppUninstall(const std::string &bundleName, int32_t user, int32_t index) override; 112 int32_t OnAppUpdate(const std::string &bundleName, int32_t user, int32_t index) override; 113 int32_t OnClearAppStorage(const std::string &bundleName, int32_t user, int32_t index, int32_t tokenId) override; 114 }; 115 class Factory { 116 public: 117 Factory(); 118 ~Factory(); 119 private: 120 std::shared_ptr<DataShareStatic> staticActs_; 121 }; 122 class TimerReceiver : public EventFwk::CommonEventSubscriber { 123 public: 124 TimerReceiver() = default; 125 explicit TimerReceiver(const EventFwk::CommonEventSubscribeInfo &subscriberInfo); 126 virtual ~TimerReceiver() = default; 127 void OnReceiveEvent(const EventFwk::CommonEventData &eventData) override; 128 }; 129 void RegisterDataShareServiceInfo(); 130 void RegisterHandler(); 131 bool SubscribeTimeChanged(); 132 bool NotifyChange(const std::string &uri, int32_t userId); 133 bool GetCallerBundleName(std::string &bundleName); 134 std::pair<int32_t, int32_t> ExecuteEx(const std::string &uri, const std::string &extUri, const int32_t tokenId, 135 bool isRead, ExecuteCallbackEx callback); 136 std::pair<bool, Security::AccessToken::ATokenTypeEnum> GetCallerInfo(std::string &bundleName, int32_t &appIndex); 137 int32_t GetBMSAndMetaDataStatus(const std::string &uri, const int32_t tokenId); 138 void SubscribeCommonEvent(); 139 void SubscribeConcurrentTask(); 140 static void InitSubEvent(); 141 void AutoLaunch(const DistributedData::Event &event); 142 void SubscribeChange(); 143 bool AllowCleanDataLaunchApp(const DistributedData::Event &event, bool launchForCleanData); 144 static void SaveLaunchInfo(const std::string &bundleName, const std::string &userId, 145 const std::string &deviceId); 146 static DistributedData::StoreMetaData MakeMetaData(const std::string &bundleName, const std::string &userId, 147 const std::string &deviceId, const std::string storeId = ""); 148 bool VerifyAcrossAccountsPermission(int32_t currentUserId, int32_t visitedUserId, 149 const std::string &acrossAccountsPermission, uint32_t callerTokenId); 150 void ReportExcuteFault(uint32_t callingTokenId, DataProviderConfig::ProviderInfo &providerInfo, 151 int32_t errCode, std::string &func); 152 bool CheckAllowList(const uint32_t ¤tUserId, const uint32_t &callerTokenId, 153 const std::vector<AllowList> &allowLists); 154 bool VerifyPermission(const std::string &bundleName, const std::string &permission, 155 bool isFromExtension, const int32_t tokenId); 156 bool GetCallerBundleInfo(BundleInfo &callerBundleInfo); 157 static Factory factory_; 158 static constexpr int32_t ERROR = -1; 159 static constexpr int32_t ERROR_PERMISSION_DENIED = -2; 160 static constexpr const char *PROXY_URI_SCHEMA = "datashareproxy"; 161 static constexpr const char *EXT_URI_SCHEMA = "datashare://"; 162 static constexpr const char *NO_PERMISSION = "noPermission"; 163 PublishStrategy publishStrategy_; 164 GetDataStrategy getDataStrategy_; 165 SubscribeStrategy subscribeStrategy_; 166 TemplateStrategy templateStrategy_; 167 RdbNotifyStrategy rdbNotifyStrategy_; 168 static BindInfo binderInfo_; 169 std::shared_ptr<TimerReceiver> timerReceiver_ = nullptr; 170 DataShareSilentConfig dataShareSilentConfig_; 171 }; 172 } // namespace OHOS::DataShare 173 #endif // DATASHARESERVICE_DATA_SERVICE_IMPL_H 174