diff --git a/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.cpp b/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.cpp index a5fe5fcf1eec6e14607de1e3ee21bfbde3fe9a0e..3a12a7aa37cf1c75c57af770e0bc85cf189f0b5f 100644 --- a/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.cpp +++ b/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.cpp @@ -596,16 +596,9 @@ std::map CloudServiceImpl::ConvertAction(const std::map &participants, Result>> &result) { - auto tokenId = IPCSkeleton::GetCallingTokenID(); - HapTokenInfo tokenInfo; - auto status = AccessTokenKit::GetHapTokenInfo(tokenId, tokenInfo); - if (status != RET_SUCCESS) { - ZLOGE("token:0x%{public}x, result:%{public}d", tokenId, status); - return E_ERROR; - } - auto instance = CloudServer::GetInstance(); + auto [instance, hapInfo] = GetSharingHandle(); if (instance == nullptr) { - return E_NOT_SUPPORT; + return NOT_SUPPORT; } return instance->Share(tokenInfo.userID, tokenInfo.bundleName, sharingRes, participants, result); } @@ -613,32 +606,18 @@ int32_t CloudServiceImpl::Share(const std::string &sharingRes, const std::vector int32_t CloudServiceImpl::Unshare(const std::string &sharingRes, const std::vector &participants, Result>> &result) { - auto tokenId = IPCSkeleton::GetCallingTokenID(); - HapTokenInfo tokenInfo; - auto status = AccessTokenKit::GetHapTokenInfo(tokenId, tokenInfo); - if (status != RET_SUCCESS) { - ZLOGE("token:0x%{public}x, result:%{public}d", tokenId, status); - return E_ERROR; - } - auto instance = CloudServer::GetInstance(); + auto [instance, hapInfo] = GetSharingHandle(); if (instance == nullptr) { - return E_NOT_SUPPORT; + return NOT_SUPPORT; } return instance->Unshare(tokenInfo.userID, tokenInfo.bundleName, sharingRes, participants, result); } int32_t CloudServiceImpl::ExitSharing(const std::string &sharingRes, Result &result) { - auto tokenId = IPCSkeleton::GetCallingTokenID(); - HapTokenInfo tokenInfo; - auto status = AccessTokenKit::GetHapTokenInfo(tokenId, tokenInfo); - if (status != RET_SUCCESS) { - ZLOGE("token:0x%{public}x, result:%{public}d", tokenId, status); - return E_ERROR; - } - auto instance = CloudServer::GetInstance(); + auto [instance, hapInfo] = GetSharingHandle(); if (instance == nullptr) { - return E_NOT_SUPPORT; + return NOT_SUPPORT; } return instance->ExitSharing(tokenInfo.userID, tokenInfo.bundleName, sharingRes, result); } @@ -646,32 +625,18 @@ int32_t CloudServiceImpl::ExitSharing(const std::string &sharingRes, Result &participants, Result>> &result) { - auto tokenId = IPCSkeleton::GetCallingTokenID(); - HapTokenInfo tokenInfo; - auto status = AccessTokenKit::GetHapTokenInfo(tokenId, tokenInfo); - if (status != RET_SUCCESS) { - ZLOGE("token:0x%{public}x, result:%{public}d", tokenId, status); - return E_ERROR; - } - auto instance = CloudServer::GetInstance(); + auto [instance, hapInfo] = GetSharingHandle(); if (instance == nullptr) { - return E_NOT_SUPPORT; + return NOT_SUPPORT; } return instance->ChangePrivilege(tokenInfo.userID, tokenInfo.bundleName, sharingRes, participants, result); } int32_t CloudServiceImpl::QueryParticipants(const std::string &sharingRes, Result> &result) { - auto tokenId = IPCSkeleton::GetCallingTokenID(); - HapTokenInfo tokenInfo; - auto status = AccessTokenKit::GetHapTokenInfo(tokenId, tokenInfo); - if (status != RET_SUCCESS) { - ZLOGE("token:0x%{public}x, result:%{public}d", tokenId, status); - return E_ERROR; - } - auto instance = CloudServer::GetInstance(); + auto [instance, hapInfo] = GetSharingHandle(); if (instance == nullptr) { - return E_NOT_SUPPORT; + return NOT_SUPPORT; } return instance->QueryParticipants(tokenInfo.userID, tokenInfo.bundleName, sharingRes, result); } @@ -679,16 +644,9 @@ int32_t CloudServiceImpl::QueryParticipants(const std::string &sharingRes, Resul int32_t CloudServiceImpl::QueryParticipantsByInvitation(const std::string &invitationCode, Result> &result) { - auto tokenId = IPCSkeleton::GetCallingTokenID(); - HapTokenInfo tokenInfo; - auto status = AccessTokenKit::GetHapTokenInfo(tokenId, tokenInfo); - if (status != RET_SUCCESS) { - ZLOGE("token:0x%{public}x, result:%{public}d", tokenId, status); - return E_ERROR; - } - auto instance = CloudServer::GetInstance(); + auto [instance, hapInfo] = GetSharingHandle(); if (instance == nullptr) { - return E_NOT_SUPPORT; + return NOT_SUPPORT; } return instance->QueryParticipantsByInvitation(tokenInfo.userID, tokenInfo.bundleName, invitationCode, result); } @@ -696,34 +654,36 @@ int32_t CloudServiceImpl::QueryParticipantsByInvitation(const std::string &invit int32_t CloudServiceImpl::ConfirmInvitation(const std::string &invitationCode, SharingStatus sharingStatus, Result &result) { - auto tokenId = IPCSkeleton::GetCallingTokenID(); - HapTokenInfo tokenInfo; - auto status = AccessTokenKit::GetHapTokenInfo(tokenId, tokenInfo); - if (status != RET_SUCCESS) { - ZLOGE("token:0x%{public}x, result:%{public}d", tokenId, status); - return E_ERROR; - } - auto instance = CloudServer::GetInstance(); + auto [instance, hapInfo] = GetSharingHandle(); if (instance == nullptr) { - return E_NOT_SUPPORT; + return NOT_SUPPORT; } return instance->ConfirmInvitation(tokenInfo.userID, tokenInfo.bundleName, invitationCode, sharingStatus, result); } int32_t CloudServiceImpl::ChangeConfirmation( const std::string &sharingRes, SharingStatus sharingStatus, Result &result) +{ + auto [instance, hapInfo] = GetSharingHandle(); + if (instance == nullptr) { + return NOT_SUPPORT; + } + return instance->ChangeConfirmation(tokenInfo.userID, tokenInfo.bundleName, sharingRes, sharingStatus, result); +} + +std::pair CloudServiceImpl::GetSharingHandle() { auto tokenId = IPCSkeleton::GetCallingTokenID(); HapTokenInfo tokenInfo; auto status = AccessTokenKit::GetHapTokenInfo(tokenId, tokenInfo); if (status != RET_SUCCESS) { ZLOGE("token:0x%{public}x, result:%{public}d", tokenId, status); - return E_ERROR; + return { nullptr, {} }; } auto instance = CloudServer::GetInstance(); if (instance == nullptr) { - return E_NOT_SUPPORT; + return { nullptr, {} }; } - return instance->ChangeConfirmation(tokenInfo.userID, tokenInfo.bundleName, sharingRes, sharingStatus, result); + return { instance, { tokenInfo.userID, tokenInfo.bundleName } }; } } // namespace OHOS::CloudData \ No newline at end of file diff --git a/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.h b/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.h index 6827ac87337ebfbf7c3c1e396bac0d28f4cd230f..f10afb2792037777f773b968b56594c0e6c325b6 100644 --- a/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.h +++ b/datamgr_service/services/distributeddataservice/service/cloud/cloud_service_impl.h @@ -87,6 +87,10 @@ private: static constexpr int32_t RETRY_TIMES = 3; static constexpr int32_t RETRY_INTERVAL = 60; static constexpr int32_t EXPIRE_INTERVAL = 2 * 24; // 2 day + struct HapInfo { + int32_t user; + std::string bundleName; + }; bool UpdateCloudInfo(int32_t user); bool UpdateSchema(int32_t user); @@ -103,6 +107,7 @@ private: bool DoSubscribe(int32_t user); bool ReleaseUserInfo(int32_t user); int32_t DoClean(CloudInfo &cloudInfo, const std::map &actions); + std::pair GetSharingHandle(); std::shared_ptr executor_; SyncManager syncManager_;