1 /* 2 * Copyright (c) 2021-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 ACCESSTOKEN_MANAGER_CLIENT_H 17 #define ACCESSTOKEN_MANAGER_CLIENT_H 18 19 #include <mutex> 20 #include <string> 21 #include <vector> 22 23 #include "access_token.h" 24 #include "accesstoken_death_recipient.h" 25 #include "hap_info_parcel.h" 26 #include "hap_policy_parcel.h" 27 #include "hap_token_info.h" 28 #include "i_accesstoken_manager.h" 29 #include "native_token_info.h" 30 #include "nocopyable.h" 31 #include "permission_def.h" 32 #include "permission_state_full.h" 33 34 namespace OHOS { 35 namespace Security { 36 namespace AccessToken { 37 class AccessTokenManagerClient final { 38 public: 39 static AccessTokenManagerClient& GetInstance(); 40 41 virtual ~AccessTokenManagerClient(); 42 43 int VerifyAccessToken(AccessTokenID tokenID, const std::string& permissionName); 44 int VerifyNativeToken(AccessTokenID tokenID, const std::string& permissionName); 45 int GetDefPermission(const std::string& permissionName, PermissionDef& permissionDefResult); 46 int GetDefPermissions(AccessTokenID tokenID, std::vector<PermissionDef>& permList); 47 int GetReqPermissions( 48 AccessTokenID tokenID, std::vector<PermissionStateFull>& reqPermList, bool isSystemGrant); 49 int GetPermissionFlag(AccessTokenID tokenID, const std::string& permissionName); 50 PermissionOper GetSelfPermissionsState(std::vector<PermissionListState>& permList); 51 int GrantPermission(AccessTokenID tokenID, const std::string& permissionName, int flag); 52 int RevokePermission(AccessTokenID tokenID, const std::string& permissionName, int flag); 53 int ClearUserGrantedPermissionState(AccessTokenID tokenID); 54 AccessTokenIDEx AllocHapToken(const HapInfoParams& info, const HapPolicyParams& policy); 55 int DeleteToken(AccessTokenID tokenID); 56 ATokenTypeEnum GetTokenType(AccessTokenID tokenID); 57 int CheckNativeDCap(AccessTokenID tokenID, const std::string& dcap); 58 AccessTokenID GetHapTokenID(int userID, const std::string& bundleName, int instIndex); 59 AccessTokenID AllocLocalTokenID(const std::string& remoteDeviceID, AccessTokenID remoteTokenID); 60 int UpdateHapToken(AccessTokenID tokenID, const std::string& appIDDesc, const HapPolicyParams& policy); 61 int GetHapTokenInfo(AccessTokenID tokenID, HapTokenInfo& hapTokenInfoRes); 62 int GetNativeTokenInfo(AccessTokenID tokenID, NativeTokenInfo& nativeTokenInfoRes); 63 64 #ifdef TOKEN_SYNC_ENABLE 65 int GetHapTokenInfoFromRemote(AccessTokenID tokenID, HapTokenInfoForSync& hapSync); 66 int GetAllNativeTokenInfo(std::vector<NativeTokenInfo>& nativeTokenInfosRes); 67 int SetRemoteHapTokenInfo(const std::string& deviceID, const HapTokenInfoForSync& hapSync); 68 int SetRemoteNativeTokenInfo(const std::string& deviceID, 69 std::vector<NativeTokenInfo>& nativeTokenInfoList); 70 int DeleteRemoteToken(const std::string& deviceID, AccessTokenID tokenID); 71 AccessTokenID GetRemoteNativeTokenID(const std::string& deviceID, AccessTokenID tokenID); 72 int DeleteRemoteDeviceTokens(const std::string& deviceID); 73 #endif 74 75 void DumpTokenInfo(std::string& dumpInfo); 76 void OnRemoteDiedHandle(); 77 78 private: 79 AccessTokenManagerClient(); 80 81 DISALLOW_COPY_AND_MOVE(AccessTokenManagerClient); 82 std::mutex proxyMutex_; 83 sptr<IAccessTokenManager> proxy_ = nullptr; 84 sptr<AccessTokenDeathRecipient> serviceDeathObserver_ = nullptr; 85 void InitProxy(); 86 sptr<IAccessTokenManager> GetProxy(); 87 }; 88 } // namespace AccessToken 89 } // namespace Security 90 } // namespace OHOS 91 #endif // ACCESSTOKEN_MANAGER_CLIENT_H 92