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 ACCESS_MMS_TOKEN_H
17#define ACCESS_MMS_TOKEN_H
18
19#include "accesstoken_kit.h"
20#include "token_setproc.h"
21
22namespace OHOS {
23namespace Telephony {
24using namespace Security::AccessToken;
25using Security::AccessToken::AccessTokenID;
26
27class AccessMmsToken {
28    HapInfoParams testMmsInfoParams = {
29        .userID = 1,
30        .bundleName = "tel_sms_mms_test",
31        .instIndex = 0,
32        .appIDDesc = "test",
33        .isSystemApp = true,
34    };
35    PermissionDef testPermReceiveSmsDef = {
36        .permissionName = "ohos.permission.RECEIVE_SMS",
37        .bundleName = "tel_sms_mms_test",
38        .grantMode = 1, // SYSTEM_GRANT
39        .availableLevel = APL_SYSTEM_BASIC,
40        .label = "label",
41        .labelId = 1,
42        .description = "Test sms manager",
43        .descriptionId = 1,
44    };
45    PermissionStateFull testReceiveSmsState = {
46        .permissionName = "ohos.permission.RECEIVE_SMS",
47        .isGeneral = true,
48        .resDeviceID = { "local" },
49        .grantStatus = { PermissionState::PERMISSION_GRANTED },
50        .grantFlags = { 2 }, // PERMISSION_USER_SET
51    };
52    PermissionDef testPermSendSmsDef = {
53        .permissionName = "ohos.permission.SEND_MESSAGES",
54        .bundleName = "tel_sms_mms_test",
55        .grantMode = 1, // SYSTEM_GRANT
56        .availableLevel = APL_SYSTEM_BASIC,
57        .label = "label",
58        .labelId = 1,
59        .description = "Test sms manager",
60        .descriptionId = 1,
61    };
62    PermissionStateFull testSendSmsState = {
63        .permissionName = "ohos.permission.SEND_MESSAGES",
64        .isGeneral = true,
65        .resDeviceID = { "local" },
66        .grantStatus = { PermissionState::PERMISSION_GRANTED },
67        .grantFlags = { 2 }, // PERMISSION_USER_SET
68    };
69    PermissionDef testPermSetTelephonyDef = {
70        .permissionName = "ohos.permission.SET_TELEPHONY_STATE",
71        .bundleName = "tel_sms_mms_test",
72        .grantMode = 1, // SYSTEM_GRANT
73        .availableLevel = APL_SYSTEM_BASIC,
74        .label = "label",
75        .labelId = 1,
76        .description = "Test sms manager",
77        .descriptionId = 1,
78    };
79    PermissionStateFull testSetTelephonyState = {
80        .permissionName = "ohos.permission.SET_TELEPHONY_STATE",
81        .isGeneral = true,
82        .resDeviceID = { "local" },
83        .grantStatus = { PermissionState::PERMISSION_GRANTED },
84        .grantFlags = { 2 }, // PERMISSION_USER_SET
85    };
86
87    PermissionDef testPermGetTelephonyDef = {
88        .permissionName = "ohos.permission.GET_TELEPHONY_STATE",
89        .bundleName = "tel_sms_mms_test",
90        .grantMode = 1, // SYSTEM_GRANT
91        .availableLevel = APL_SYSTEM_BASIC,
92        .label = "label",
93        .labelId = 1,
94        .description = "Test sms manager",
95        .descriptionId = 1,
96    };
97    PermissionStateFull testGetTelephonyState = {
98        .permissionName = "ohos.permission.GET_TELEPHONY_STATE",
99        .isGeneral = true,
100        .resDeviceID = { "local" },
101        .grantStatus = { PermissionState::PERMISSION_GRANTED },
102        .grantFlags = { 2 }, // PERMISSION_USER_SET
103    };
104    HapPolicyParams testMmsPolicyParams = {
105        .apl = APL_SYSTEM_BASIC,
106        .domain = "test.domain",
107        .permList = { testPermReceiveSmsDef, testPermSendSmsDef, testPermSetTelephonyDef, testPermGetTelephonyDef },
108        .permStateList = { testReceiveSmsState, testSendSmsState, testSetTelephonyState, testGetTelephonyState },
109    };
110
111public:
112    AccessMmsToken()
113    {
114        currentID_ = GetSelfTokenID();
115        AccessTokenIDEx tokenIdEx = AccessTokenKit::AllocHapToken(testMmsInfoParams, testMmsPolicyParams);
116        accessID_ = tokenIdEx.tokenIdExStruct.tokenID;
117        SetSelfTokenID(tokenIdEx.tokenIDEx);
118    }
119    ~AccessMmsToken()
120    {
121        AccessTokenKit::DeleteToken(accessID_);
122        SetSelfTokenID(currentID_);
123    }
124
125private:
126    AccessTokenID currentID_ = 0;
127    AccessTokenID accessID_ = 0;
128};
129} // namespace Telephony
130} // namespace OHOS
131#endif