From 130624949043633c93f7877c3032154f27587ebe Mon Sep 17 00:00:00 2001 From: Gabriel Ortiga Fernandes Date: Tue, 31 Jan 2023 14:27:07 -0300 Subject: [PATCH 1/7] Implement functionality --- .../api/command/user/network/ListNetworksCmd.java | 8 ++++---- .../main/java/com/cloud/api/ApiResponseHelper.java | 6 +++++- .../java/com/cloud/network/vpc/VpcManagerImpl.java | 11 ++++++++--- ui/src/components/view/ListView.vue | 5 ++++- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java index df82d9fd6257..5d45c4e7b5f6 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/network/ListNetworksCmd.java @@ -232,11 +232,11 @@ public void execute() { private void updateNetworkResponse(List response) { for (NetworkResponse networkResponse : response) { ResourceIcon resourceIcon = resourceIconManager.getByResourceTypeAndUuid(ResourceTag.ResourceObjectType.Network, networkResponse.getId()); - if (resourceIcon == null) { + if (resourceIcon == null && networkResponse.getVpcId() != null) { resourceIcon = resourceIconManager.getByResourceTypeAndUuid(ResourceTag.ResourceObjectType.Vpc, networkResponse.getVpcId()); - if (resourceIcon == null) { - continue; - } + } + if (resourceIcon == null) { + continue; } ResourceIconResponse iconResponse = _responseGenerator.createResourceIconResponse(resourceIcon); networkResponse.setResourceIconResponse(iconResponse); diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index 8fffebb33034..de3b6f6d41b9 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -2534,7 +2534,11 @@ public NetworkResponse createNetworkResponse(ResponseView view, Network network) if (network.getVpcId() != null) { Vpc vpc = ApiDBUtils.findVpcById(network.getVpcId()); if (vpc != null) { - response.setVpcId(vpc.getUuid()); + try { + _accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, false, vpc); + response.setVpcId(vpc.getUuid()); + } catch (PermissionDeniedException e){ + } response.setVpcName(vpc.getName()); } } diff --git a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java index 9222520602f5..78f3cb436ba8 100644 --- a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java @@ -1764,9 +1764,14 @@ public void doInTransactionWithoutResult(final TransactionStatus status) { } } - // 4) vpc and network should belong to the same owner - if (vpc.getAccountId() != networkOwner.getId()) { - throw new InvalidParameterValueException("Vpc " + vpc + " owner is different from the network owner " + networkOwner); + // 4) Vpc's account should be able to access network owner's account + Account vpcaccount = _accountMgr.getAccount(vpc.getAccountId()); + try { + _accountMgr.checkAccess(vpcaccount, null, false, networkOwner); + } + catch (PermissionDeniedException e) { + s_logger.error(e.getMessage()); + throw new InvalidParameterValueException(String.format("VPC owner does not have access to account [%s].", networkOwner.getAccountName())); } // 5) network domain should be the same as VPC's diff --git a/ui/src/components/view/ListView.vue b/ui/src/components/view/ListView.vue index fcd94008d88a..ee3298efa240 100644 --- a/ui/src/components/view/ListView.vue +++ b/ui/src/components/view/ListView.vue @@ -221,7 +221,10 @@ {{ text }}