16ea96550Sopenharmony_ci/* 26ea96550Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 36ea96550Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 46ea96550Sopenharmony_ci * you may not use this file except in compliance with the License. 56ea96550Sopenharmony_ci * You may obtain a copy of the License at 66ea96550Sopenharmony_ci * 76ea96550Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 86ea96550Sopenharmony_ci * 96ea96550Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 106ea96550Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 116ea96550Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 126ea96550Sopenharmony_ci * See the License for the specific language governing permissions and 136ea96550Sopenharmony_ci * limitations under the License. 146ea96550Sopenharmony_ci */ 156ea96550Sopenharmony_ci 166ea96550Sopenharmony_ci#ifndef ACCESSTOKEN_KIT_H 176ea96550Sopenharmony_ci#define ACCESSTOKEN_KIT_H 186ea96550Sopenharmony_ci 196ea96550Sopenharmony_ci#include <string> 206ea96550Sopenharmony_ci 216ea96550Sopenharmony_ci#include "gmock/gmock.h" 226ea96550Sopenharmony_ci#include "parcel.h" 236ea96550Sopenharmony_ci 246ea96550Sopenharmony_cinamespace OHOS::Security::AccessToken { 256ea96550Sopenharmony_citypedef unsigned int AccessTokenID; 266ea96550Sopenharmony_ci 276ea96550Sopenharmony_citypedef enum TypeATokenTypeEnum { 286ea96550Sopenharmony_ci TOKEN_INVALID = -1, 296ea96550Sopenharmony_ci TOKEN_HAP = 0, 306ea96550Sopenharmony_ci TOKEN_NATIVE, 316ea96550Sopenharmony_ci TOKEN_SHELL, 326ea96550Sopenharmony_ci TOKEN_TYPE_BUTT, 336ea96550Sopenharmony_ci} ATokenTypeEnum; 346ea96550Sopenharmony_ci 356ea96550Sopenharmony_citypedef enum TypePermissionState { 366ea96550Sopenharmony_ci PERMISSION_DENIED = -1, 376ea96550Sopenharmony_ci PERMISSION_GRANTED = 0, 386ea96550Sopenharmony_ci} PermissionState; 396ea96550Sopenharmony_ci 406ea96550Sopenharmony_cistruct NativeTokenInfoParcel final : public Parcelable { 416ea96550Sopenharmony_ci NativeTokenInfoParcel() = default; 426ea96550Sopenharmony_ci 436ea96550Sopenharmony_ci ~NativeTokenInfoParcel() override = default; 446ea96550Sopenharmony_ci 456ea96550Sopenharmony_ci bool Marshalling(Parcel &out) const override { return true; }; 466ea96550Sopenharmony_ci 476ea96550Sopenharmony_ci static NativeTokenInfoParcel *Unmarshalling(Parcel &in) { return {}; }; 486ea96550Sopenharmony_ci}; 496ea96550Sopenharmony_ci 506ea96550Sopenharmony_cistruct HapTokenInfoParcel final : public Parcelable { 516ea96550Sopenharmony_ci HapTokenInfoParcel() = default; 526ea96550Sopenharmony_ci 536ea96550Sopenharmony_ci ~HapTokenInfoParcel() override = default; 546ea96550Sopenharmony_ci 556ea96550Sopenharmony_ci bool Marshalling(Parcel &out) const override { return true; }; 566ea96550Sopenharmony_ci 576ea96550Sopenharmony_ci static HapTokenInfoParcel *Unmarshalling(Parcel &in) { return {}; }; 586ea96550Sopenharmony_ci}; 596ea96550Sopenharmony_ci 606ea96550Sopenharmony_ciclass HapTokenInfo final { 616ea96550Sopenharmony_cipublic: 626ea96550Sopenharmony_ci std::string bundleName; 636ea96550Sopenharmony_ci}; 646ea96550Sopenharmony_ci 656ea96550Sopenharmony_ciclass NativeTokenInfo final { 666ea96550Sopenharmony_cipublic: 676ea96550Sopenharmony_ci std::string processName; 686ea96550Sopenharmony_ci}; 696ea96550Sopenharmony_ci 706ea96550Sopenharmony_ciclass TokenIdKitInterface { 716ea96550Sopenharmony_cipublic: 726ea96550Sopenharmony_ci virtual ~TokenIdKitInterface() = default; 736ea96550Sopenharmony_ci virtual bool IsSystemAppByFullTokenID(uint64_t tokenId) = 0; 746ea96550Sopenharmony_ci}; 756ea96550Sopenharmony_ci 766ea96550Sopenharmony_ciclass MockTokenIdKitInterface : public TokenIdKitInterface { 776ea96550Sopenharmony_cipublic: 786ea96550Sopenharmony_ci MockTokenIdKitInterface() = default; 796ea96550Sopenharmony_ci ~MockTokenIdKitInterface() override = default; 806ea96550Sopenharmony_ci MOCK_METHOD1(IsSystemAppByFullTokenID, bool(uint64_t tokenId)); 816ea96550Sopenharmony_ci}; 826ea96550Sopenharmony_ci 836ea96550Sopenharmony_ciclass TokenIdKit { 846ea96550Sopenharmony_cipublic: 856ea96550Sopenharmony_ci static bool IsSystemAppByFullTokenID(uint64_t tokenId) 866ea96550Sopenharmony_ci { 876ea96550Sopenharmony_ci if (instance_ == nullptr) { 886ea96550Sopenharmony_ci return false; 896ea96550Sopenharmony_ci } 906ea96550Sopenharmony_ci return instance_->IsSystemAppByFullTokenID(tokenId); 916ea96550Sopenharmony_ci } 926ea96550Sopenharmony_ci 936ea96550Sopenharmony_ci static std::shared_ptr<MockTokenIdKitInterface> GetInterface() 946ea96550Sopenharmony_ci { 956ea96550Sopenharmony_ci if (instance_ == nullptr) { 966ea96550Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 976ea96550Sopenharmony_ci if (instance_ == nullptr) { 986ea96550Sopenharmony_ci instance_ = std::make_shared<MockTokenIdKitInterface>(); 996ea96550Sopenharmony_ci } 1006ea96550Sopenharmony_ci } 1016ea96550Sopenharmony_ci return instance_; 1026ea96550Sopenharmony_ci }; 1036ea96550Sopenharmony_ci 1046ea96550Sopenharmony_ci static void DelInterface() 1056ea96550Sopenharmony_ci { 1066ea96550Sopenharmony_ci if (instance_ != nullptr) { 1076ea96550Sopenharmony_ci instance_.reset(); 1086ea96550Sopenharmony_ci } 1096ea96550Sopenharmony_ci }; 1106ea96550Sopenharmony_ci 1116ea96550Sopenharmony_ciprivate: 1126ea96550Sopenharmony_ci static std::shared_ptr<MockTokenIdKitInterface> instance_; 1136ea96550Sopenharmony_ci static std::mutex mutex_; 1146ea96550Sopenharmony_ci}; 1156ea96550Sopenharmony_ci 1166ea96550Sopenharmony_ciclass AccessTokenKitInterface { 1176ea96550Sopenharmony_cipublic: 1186ea96550Sopenharmony_ci virtual ~AccessTokenKitInterface() = default; 1196ea96550Sopenharmony_ci virtual int32_t VerifyAccessToken(AccessToken::AccessTokenID callerToken, const std::string &permission) = 0; 1206ea96550Sopenharmony_ci virtual ATokenTypeEnum GetTokenType(AccessTokenID tokenID) = 0; 1216ea96550Sopenharmony_ci virtual int GetHapTokenInfo(AccessTokenID tokenID, HapTokenInfo& hapTokenInfoRes) = 0; 1226ea96550Sopenharmony_ci virtual int GetNativeTokenInfo(AccessTokenID tokenID, NativeTokenInfo& nativeTokenInfoRes) = 0; 1236ea96550Sopenharmony_ci}; 1246ea96550Sopenharmony_ci 1256ea96550Sopenharmony_ciclass MockAccessTokenKitInterface : public AccessTokenKitInterface { 1266ea96550Sopenharmony_cipublic: 1276ea96550Sopenharmony_ci MockAccessTokenKitInterface() = default; 1286ea96550Sopenharmony_ci ~MockAccessTokenKitInterface() override = default; 1296ea96550Sopenharmony_ci MOCK_METHOD2(VerifyAccessToken, int32_t(AccessToken::AccessTokenID callerToken, const std::string &permission)); 1306ea96550Sopenharmony_ci MOCK_METHOD1(GetTokenType, ATokenTypeEnum(AccessTokenID tokenID)); 1316ea96550Sopenharmony_ci MOCK_METHOD2(GetHapTokenInfo, int(AccessTokenID tokenID, HapTokenInfo& hapTokenInfoRes)); 1326ea96550Sopenharmony_ci MOCK_METHOD2(GetNativeTokenInfo, int(AccessTokenID tokenID, NativeTokenInfo& nativeTokenInfoRes)); 1336ea96550Sopenharmony_ci}; 1346ea96550Sopenharmony_ci 1356ea96550Sopenharmony_ciclass AccessTokenKit { 1366ea96550Sopenharmony_cipublic: 1376ea96550Sopenharmony_ci static int32_t VerifyAccessToken(AccessToken::AccessTokenID callerToken, const std::string &permission) 1386ea96550Sopenharmony_ci { 1396ea96550Sopenharmony_ci if (instance_ == nullptr) { 1406ea96550Sopenharmony_ci return -1; 1416ea96550Sopenharmony_ci } 1426ea96550Sopenharmony_ci return instance_->VerifyAccessToken(callerToken, permission); 1436ea96550Sopenharmony_ci } 1446ea96550Sopenharmony_ci 1456ea96550Sopenharmony_ci static ATokenTypeEnum GetTokenType(AccessTokenID tokenID) 1466ea96550Sopenharmony_ci { 1476ea96550Sopenharmony_ci if (instance_ == nullptr) { 1486ea96550Sopenharmony_ci return TOKEN_INVALID; 1496ea96550Sopenharmony_ci } 1506ea96550Sopenharmony_ci return instance_->GetTokenType(tokenID); 1516ea96550Sopenharmony_ci } 1526ea96550Sopenharmony_ci 1536ea96550Sopenharmony_ci static int GetHapTokenInfo(AccessTokenID tokenID, HapTokenInfo& hapTokenInfoRes) 1546ea96550Sopenharmony_ci { 1556ea96550Sopenharmony_ci if (instance_ == nullptr) { 1566ea96550Sopenharmony_ci return -1; 1576ea96550Sopenharmony_ci } 1586ea96550Sopenharmony_ci return instance_->GetHapTokenInfo(tokenID, hapTokenInfoRes); 1596ea96550Sopenharmony_ci } 1606ea96550Sopenharmony_ci 1616ea96550Sopenharmony_ci static int GetNativeTokenInfo(AccessTokenID tokenID, NativeTokenInfo& nativeTokenInfoRes) 1626ea96550Sopenharmony_ci { 1636ea96550Sopenharmony_ci if (instance_ == nullptr) { 1646ea96550Sopenharmony_ci return -1; 1656ea96550Sopenharmony_ci } 1666ea96550Sopenharmony_ci return instance_->GetNativeTokenInfo(tokenID, nativeTokenInfoRes); 1676ea96550Sopenharmony_ci } 1686ea96550Sopenharmony_ci 1696ea96550Sopenharmony_ci static std::shared_ptr<MockAccessTokenKitInterface> GetInterface() 1706ea96550Sopenharmony_ci { 1716ea96550Sopenharmony_ci if (instance_ == nullptr) { 1726ea96550Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 1736ea96550Sopenharmony_ci if (instance_ == nullptr) { 1746ea96550Sopenharmony_ci instance_ = std::make_shared<MockAccessTokenKitInterface>(); 1756ea96550Sopenharmony_ci } 1766ea96550Sopenharmony_ci } 1776ea96550Sopenharmony_ci return instance_; 1786ea96550Sopenharmony_ci }; 1796ea96550Sopenharmony_ci 1806ea96550Sopenharmony_ci static void DelInterface() 1816ea96550Sopenharmony_ci { 1826ea96550Sopenharmony_ci if (instance_ != nullptr) { 1836ea96550Sopenharmony_ci instance_.reset(); 1846ea96550Sopenharmony_ci } 1856ea96550Sopenharmony_ci }; 1866ea96550Sopenharmony_ci 1876ea96550Sopenharmony_ciprivate: 1886ea96550Sopenharmony_ci static std::shared_ptr<MockAccessTokenKitInterface> instance_; 1896ea96550Sopenharmony_ci static std::mutex mutex_; 1906ea96550Sopenharmony_ci}; 1916ea96550Sopenharmony_ci} // OHOS::Security::AccessToken 1926ea96550Sopenharmony_ci 1936ea96550Sopenharmony_ci#endif // ACCESSTOKEN_KIT_H