18e745fdaSopenharmony_ci/*
28e745fdaSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
38e745fdaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
48e745fdaSopenharmony_ci * you may not use this file except in compliance with the License.
58e745fdaSopenharmony_ci * You may obtain a copy of the License at
68e745fdaSopenharmony_ci *
78e745fdaSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
88e745fdaSopenharmony_ci *
98e745fdaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
108e745fdaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
118e745fdaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
128e745fdaSopenharmony_ci * See the License for the specific language governing permissions and
138e745fdaSopenharmony_ci * limitations under the License.
148e745fdaSopenharmony_ci */
158e745fdaSopenharmony_ci
168e745fdaSopenharmony_ci#include "netmanager_ext_test_security.h"
178e745fdaSopenharmony_ci
188e745fdaSopenharmony_ci#include "nativetoken_kit.h"
198e745fdaSopenharmony_ci#include "token_setproc.h"
208e745fdaSopenharmony_ci
218e745fdaSopenharmony_cinamespace OHOS {
228e745fdaSopenharmony_cinamespace NetManagerStandard {
238e745fdaSopenharmony_ciusing namespace Security::AccessToken;
248e745fdaSopenharmony_ciusing Security::AccessToken::AccessTokenID;
258e745fdaSopenharmony_cinamespace {
268e745fdaSopenharmony_ciHapInfoParams netManagerExtParms = {
278e745fdaSopenharmony_ci    .userID = 1,
288e745fdaSopenharmony_ci    .bundleName = "netmanager_ext_test",
298e745fdaSopenharmony_ci    .instIndex = 0,
308e745fdaSopenharmony_ci    .appIDDesc = "test",
318e745fdaSopenharmony_ci    .isSystemApp = true,
328e745fdaSopenharmony_ci};
338e745fdaSopenharmony_ci
348e745fdaSopenharmony_ciPermissionDef connectivityInternalPermDef = {
358e745fdaSopenharmony_ci    .permissionName = "ohos.permission.CONNECTIVITY_INTERNAL",
368e745fdaSopenharmony_ci    .bundleName = "netmanager_ext_test",
378e745fdaSopenharmony_ci    .grantMode = 1,
388e745fdaSopenharmony_ci    .availableLevel = OHOS::Security::AccessToken::ATokenAplEnum::APL_SYSTEM_BASIC,
398e745fdaSopenharmony_ci    .label = "label",
408e745fdaSopenharmony_ci    .labelId = 1,
418e745fdaSopenharmony_ci    .description = "Test ethernet connectivity internet",
428e745fdaSopenharmony_ci    .descriptionId = 1,
438e745fdaSopenharmony_ci};
448e745fdaSopenharmony_ci
458e745fdaSopenharmony_ciPermissionStateFull connectivityInternalState = {
468e745fdaSopenharmony_ci    .permissionName = "ohos.permission.CONNECTIVITY_INTERNAL",
478e745fdaSopenharmony_ci    .isGeneral = true,
488e745fdaSopenharmony_ci    .resDeviceID = { "local" },
498e745fdaSopenharmony_ci    .grantStatus = { PermissionState::PERMISSION_GRANTED },
508e745fdaSopenharmony_ci    .grantFlags = { 2 },
518e745fdaSopenharmony_ci};
528e745fdaSopenharmony_ci
538e745fdaSopenharmony_ciPermissionDef getNetworkInfoPermDef = {
548e745fdaSopenharmony_ci    .permissionName = "ohos.permission.GET_NETWORK_INFO",
558e745fdaSopenharmony_ci    .bundleName = "netmanager_ext_test",
568e745fdaSopenharmony_ci    .grantMode = 1,
578e745fdaSopenharmony_ci    .availableLevel = OHOS::Security::AccessToken::ATokenAplEnum::APL_SYSTEM_BASIC,
588e745fdaSopenharmony_ci    .label = "label",
598e745fdaSopenharmony_ci    .labelId = 1,
608e745fdaSopenharmony_ci    .description = "Test ethernet maneger network info",
618e745fdaSopenharmony_ci    .descriptionId = 1,
628e745fdaSopenharmony_ci};
638e745fdaSopenharmony_ci
648e745fdaSopenharmony_ciPermissionStateFull getNetworkInfoState = {
658e745fdaSopenharmony_ci    .permissionName = "ohos.permission.GET_NETWORK_INFO",
668e745fdaSopenharmony_ci    .isGeneral = true,
678e745fdaSopenharmony_ci    .resDeviceID = { "local" },
688e745fdaSopenharmony_ci    .grantStatus = { PermissionState::PERMISSION_GRANTED },
698e745fdaSopenharmony_ci    .grantFlags = { 2 },
708e745fdaSopenharmony_ci};
718e745fdaSopenharmony_ci
728e745fdaSopenharmony_ciPermissionDef getMacAddressInfoPermDef = {
738e745fdaSopenharmony_ci    .permissionName = "ohos.permission.GET_ETHERNET_LOCAL_MAC",
748e745fdaSopenharmony_ci    .bundleName = "netmanager_ext_test",
758e745fdaSopenharmony_ci    .grantMode = 1,
768e745fdaSopenharmony_ci    .availableLevel = OHOS::Security::AccessToken::ATokenAplEnum::APL_SYSTEM_BASIC,
778e745fdaSopenharmony_ci    .label = "label",
788e745fdaSopenharmony_ci    .labelId = 1,
798e745fdaSopenharmony_ci    .description = "Test ethernet mac address info",
808e745fdaSopenharmony_ci    .descriptionId = 1,
818e745fdaSopenharmony_ci};
828e745fdaSopenharmony_ci
838e745fdaSopenharmony_ciPermissionStateFull getMacAddressInfoState = {
848e745fdaSopenharmony_ci    .permissionName = "ohos.permission.GET_ETHERNET_LOCAL_MAC",
858e745fdaSopenharmony_ci    .isGeneral = true,
868e745fdaSopenharmony_ci    .resDeviceID = { "local" },
878e745fdaSopenharmony_ci    .grantStatus = { PermissionState::PERMISSION_GRANTED },
888e745fdaSopenharmony_ci    .grantFlags = { 2 },
898e745fdaSopenharmony_ci};
908e745fdaSopenharmony_ci
918e745fdaSopenharmony_ciPermissionDef manageVpnPermDef = {
928e745fdaSopenharmony_ci    .permissionName = "ohos.permission.MANAGE_VPN",
938e745fdaSopenharmony_ci    .bundleName = "netmanager_ext_test",
948e745fdaSopenharmony_ci    .grantMode = 1,
958e745fdaSopenharmony_ci    .availableLevel = APL_SYSTEM_BASIC,
968e745fdaSopenharmony_ci    .label = "label",
978e745fdaSopenharmony_ci    .labelId = 1,
988e745fdaSopenharmony_ci    .description = "Test vpn maneger network info",
998e745fdaSopenharmony_ci    .descriptionId = 1,
1008e745fdaSopenharmony_ci};
1018e745fdaSopenharmony_ci
1028e745fdaSopenharmony_ciPermissionStateFull manageVpnState = {
1038e745fdaSopenharmony_ci    .permissionName = "ohos.permission.MANAGE_VPN",
1048e745fdaSopenharmony_ci    .isGeneral = true,
1058e745fdaSopenharmony_ci    .resDeviceID = { "local" },
1068e745fdaSopenharmony_ci    .grantStatus = { PermissionState::PERMISSION_GRANTED },
1078e745fdaSopenharmony_ci    .grantFlags = { 2 },
1088e745fdaSopenharmony_ci};
1098e745fdaSopenharmony_ci
1108e745fdaSopenharmony_ciPermissionDef getNetFirewallPermDef = {
1118e745fdaSopenharmony_ci    .permissionName = "ohos.permission.GET_NET_FIREWALL",
1128e745fdaSopenharmony_ci    .bundleName = "netmanager_ext_test",
1138e745fdaSopenharmony_ci    .grantMode = 1,
1148e745fdaSopenharmony_ci    .availableLevel = OHOS::Security::AccessToken::ATokenAplEnum::APL_SYSTEM_BASIC,
1158e745fdaSopenharmony_ci    .label = "label",
1168e745fdaSopenharmony_ci    .labelId = 1,
1178e745fdaSopenharmony_ci    .description = "Test netfirewall maneger info",
1188e745fdaSopenharmony_ci    .descriptionId = 1,
1198e745fdaSopenharmony_ci};
1208e745fdaSopenharmony_ci
1218e745fdaSopenharmony_ciPermissionStateFull getNetFirewallState = {
1228e745fdaSopenharmony_ci    .permissionName = "ohos.permission.GET_NET_FIREWALL",
1238e745fdaSopenharmony_ci    .isGeneral = true,
1248e745fdaSopenharmony_ci    .resDeviceID = { "local" },
1258e745fdaSopenharmony_ci    .grantStatus = { PermissionState::PERMISSION_GRANTED },
1268e745fdaSopenharmony_ci    .grantFlags = { 2 },
1278e745fdaSopenharmony_ci};
1288e745fdaSopenharmony_ci
1298e745fdaSopenharmony_ciPermissionDef setNetFirewallPermDef = {
1308e745fdaSopenharmony_ci    .permissionName = "ohos.permission.MANAGE_NET_FIREWALL",
1318e745fdaSopenharmony_ci    .bundleName = "netmanager_ext_test",
1328e745fdaSopenharmony_ci    .grantMode = 1,
1338e745fdaSopenharmony_ci    .availableLevel = OHOS::Security::AccessToken::ATokenAplEnum::APL_SYSTEM_BASIC,
1348e745fdaSopenharmony_ci    .label = "label",
1358e745fdaSopenharmony_ci    .labelId = 1,
1368e745fdaSopenharmony_ci    .description = "Test netfirewall maneger info",
1378e745fdaSopenharmony_ci    .descriptionId = 1,
1388e745fdaSopenharmony_ci};
1398e745fdaSopenharmony_ci
1408e745fdaSopenharmony_ciPermissionStateFull setNetFirewallState = {
1418e745fdaSopenharmony_ci    .permissionName = "ohos.permission.MANAGE_NET_FIREWALL",
1428e745fdaSopenharmony_ci    .isGeneral = true,
1438e745fdaSopenharmony_ci    .resDeviceID = { "local" },
1448e745fdaSopenharmony_ci    .grantStatus = { PermissionState::PERMISSION_GRANTED },
1458e745fdaSopenharmony_ci    .grantFlags = { 2 },
1468e745fdaSopenharmony_ci};
1478e745fdaSopenharmony_ci
1488e745fdaSopenharmony_ciHapPolicyParams netManagerExtPolicy = {
1498e745fdaSopenharmony_ci    .apl = APL_SYSTEM_BASIC,
1508e745fdaSopenharmony_ci    .domain = "test.domain",
1518e745fdaSopenharmony_ci    .permList = {getNetworkInfoPermDef, connectivityInternalPermDef, manageVpnPermDef, getNetFirewallPermDef,
1528e745fdaSopenharmony_ci                 setNetFirewallPermDef},
1538e745fdaSopenharmony_ci    .permStateList = {getNetworkInfoState, connectivityInternalState, manageVpnState, getNetFirewallState,
1548e745fdaSopenharmony_ci                      setNetFirewallState},
1558e745fdaSopenharmony_ci};
1568e745fdaSopenharmony_ci
1578e745fdaSopenharmony_ciPermissionDef testNoPermissionDef = {
1588e745fdaSopenharmony_ci    .permissionName = "",
1598e745fdaSopenharmony_ci    .bundleName = "netmanager_ext_test",
1608e745fdaSopenharmony_ci    .grantMode = 1,
1618e745fdaSopenharmony_ci    .availableLevel = APL_SYSTEM_BASIC,
1628e745fdaSopenharmony_ci    .label = "label",
1638e745fdaSopenharmony_ci    .labelId = 1,
1648e745fdaSopenharmony_ci    .description = "Test no permission",
1658e745fdaSopenharmony_ci    .descriptionId = 1,
1668e745fdaSopenharmony_ci};
1678e745fdaSopenharmony_ci
1688e745fdaSopenharmony_ciPermissionStateFull testNoPermissionState = {
1698e745fdaSopenharmony_ci    .permissionName = "",
1708e745fdaSopenharmony_ci    .isGeneral = true,
1718e745fdaSopenharmony_ci    .resDeviceID = { "local" },
1728e745fdaSopenharmony_ci    .grantStatus = { PermissionState::PERMISSION_GRANTED },
1738e745fdaSopenharmony_ci    .grantFlags = { 2 },
1748e745fdaSopenharmony_ci};
1758e745fdaSopenharmony_ci
1768e745fdaSopenharmony_ciHapPolicyParams testNoPermission = {
1778e745fdaSopenharmony_ci    .apl = APL_SYSTEM_BASIC,
1788e745fdaSopenharmony_ci    .domain = "test.domain",
1798e745fdaSopenharmony_ci    .permList = { testNoPermissionDef },
1808e745fdaSopenharmony_ci    .permStateList = { testNoPermissionState },
1818e745fdaSopenharmony_ci};
1828e745fdaSopenharmony_ci} // namespace
1838e745fdaSopenharmony_ci
1848e745fdaSopenharmony_ciNetManagerExtAccessToken::NetManagerExtAccessToken() : currentID_(GetSelfTokenID())
1858e745fdaSopenharmony_ci{
1868e745fdaSopenharmony_ci    AccessTokenIDEx tokenIdEx = AccessTokenKit::AllocHapToken(netManagerExtParms, netManagerExtPolicy);
1878e745fdaSopenharmony_ci    accessID_ = tokenIdEx.tokenIdExStruct.tokenID;
1888e745fdaSopenharmony_ci    SetSelfTokenID(tokenIdEx.tokenIDEx);
1898e745fdaSopenharmony_ci}
1908e745fdaSopenharmony_ci
1918e745fdaSopenharmony_ciNetManagerExtAccessToken::~NetManagerExtAccessToken()
1928e745fdaSopenharmony_ci{
1938e745fdaSopenharmony_ci    AccessTokenKit::DeleteToken(accessID_);
1948e745fdaSopenharmony_ci    SetSelfTokenID(currentID_);
1958e745fdaSopenharmony_ci}
1968e745fdaSopenharmony_ci
1978e745fdaSopenharmony_ciNetManagerExtNotSystemAccessToken::NetManagerExtNotSystemAccessToken() : currentID_(GetSelfTokenID())
1988e745fdaSopenharmony_ci{
1998e745fdaSopenharmony_ci    AccessTokenIDEx tokenIdEx = AccessTokenKit::AllocHapToken(netManagerExtParms, netManagerExtPolicy);
2008e745fdaSopenharmony_ci    accessID_ = tokenIdEx.tokenIdExStruct.tokenID;
2018e745fdaSopenharmony_ci    SetSelfTokenID(accessID_);
2028e745fdaSopenharmony_ci}
2038e745fdaSopenharmony_ci
2048e745fdaSopenharmony_ciNetManagerExtNotSystemAccessToken::~NetManagerExtNotSystemAccessToken()
2058e745fdaSopenharmony_ci{
2068e745fdaSopenharmony_ci    AccessTokenKit::DeleteToken(accessID_);
2078e745fdaSopenharmony_ci    SetSelfTokenID(currentID_);
2088e745fdaSopenharmony_ci}
2098e745fdaSopenharmony_ci
2108e745fdaSopenharmony_ciNoPermissionAccessToken::NoPermissionAccessToken() : currentID_(GetSelfTokenID())
2118e745fdaSopenharmony_ci{
2128e745fdaSopenharmony_ci    AccessTokenIDEx tokenIdEx = AccessTokenKit::AllocHapToken(netManagerExtParms, testNoPermission);
2138e745fdaSopenharmony_ci    accessID_ = tokenIdEx.tokenIdExStruct.tokenID;
2148e745fdaSopenharmony_ci    SetSelfTokenID(tokenIdEx.tokenIDEx);
2158e745fdaSopenharmony_ci}
2168e745fdaSopenharmony_ci
2178e745fdaSopenharmony_ciNoPermissionAccessToken::~NoPermissionAccessToken()
2188e745fdaSopenharmony_ci{
2198e745fdaSopenharmony_ci    AccessTokenKit::DeleteToken(accessID_);
2208e745fdaSopenharmony_ci    SetSelfTokenID(currentID_);
2218e745fdaSopenharmony_ci}
2228e745fdaSopenharmony_ci} // namespace NetManagerStandard
2238e745fdaSopenharmony_ci} // namespace OHOS
224