/** * Returns the property values (including information about their descriptors and overwritten values) * Encrypted property values are returned decrypted if the caller has the permission to do so */ public List<ResourceEditProperty> getPropertiesForRelatedResource( ConsumedResourceRelationEntity relationEntity, Integer contextId) { ResourceEntity resource = entityManager.find(ResourceEntity.class, relationEntity.getMasterResourceId()); ContextEntity context = entityManager.find(ContextEntity.class, contextId); ResourceEntity slaveResource = entityManager.find(ResourceEntity.class, relationEntity .getSlaveResource().getId()); // a decrypt permission on the master resource allows to decrypt on the related slave properties if (permissionBoundary.hasPermission(Permission.RESOURCE_PROPERTY_DECRYPT, context, Action.ALL, resource, null)) { return propertyValueService.decryptProperties(propertyEditingService.loadPropertiesForEditRelation( ResourceEditRelation.Mode.CONSUMED, relationEntity.getId(), slaveResource.getId(), resource.getResourceType(), slaveResource.getResourceType(), context)); } return propertyEditingService.loadPropertiesForEditRelation(ResourceEditRelation.Mode.CONSUMED, relationEntity.getId(), slaveResource.getId(), resource.getResourceType(), slaveResource.getResourceType(), context); }
/** * Returns the property values (including information about their descriptors and overwritten values) * * @param masterResourceId * @param contextId * @return */ public List<ResourceEditProperty> getPropertiesForRelatedResource(Integer masterResourceId, ResourceEditRelation resourceRelation, Integer contextId) { if (masterResourceId != null && resourceRelation != null && contextId != null) { ResourceEntity resource = entityManager.find(ResourceEntity.class, masterResourceId); ContextEntity context = entityManager.find(ContextEntity.class, contextId); ResourceEntity slaveResource = entityManager.find(ResourceEntity.class, resourceRelation.getSlaveId()); // a decrypt permission on the master resource allows to decrypt on the related slave properties if (permissionBoundary.hasPermission(Permission.RESOURCE_PROPERTY_DECRYPT, context, Action.ALL, resource, null)) { return propertyValueService.decryptProperties(propertyEditingService.loadPropertiesForEditRelation( resourceRelation.getMode(), resourceRelation.getResRelId(), slaveResource.getId(), resource.getResourceType(), slaveResource.getResourceType(), context)); } return propertyEditingService.loadPropertiesForEditRelation(resourceRelation.getMode(), resourceRelation.getResRelId(), slaveResource.getId(), resource.getResourceType(), slaveResource.getResourceType(), context); } return new ArrayList<>(); }
@Test(expected = NotAuthorizedException.class) public void setPropertyValueOnResourceRelationForContextShouldThrowExceptionWhenWhenResourceUpdatePermissionIsMissing() throws Exception { // given String resourceGroupName = "resourceGroupName"; String releaseName = "releaseName"; String relatedResourceGroupName = "relatedResourceGroupName"; String relatedResourceReleaseName ="relatedResourceReleaseName"; String contextName = "contextName"; String propertyName = "propertyName"; String propertyValue = "propertyValue"; List<ResourceEditProperty> properties = new ArrayList<>(); properties.add(new ResourceEditPropertyBuilder().withDisplayAndTechKeyName(propertyName).withValue(propertyValue).build()); ContextEntity contextMock = mock(ContextEntity.class); ConsumedResourceRelationEntity relation = createWithMasterAndSlave(resourceGroupName, relatedResourceGroupName); when(resourceRelationLocatorMock.getResourceRelation(resourceGroupName, releaseName, relatedResourceGroupName, relatedResourceReleaseName)).thenReturn(relation); when(contextLocatorMock.getContextByName(contextName)).thenReturn(contextMock); when(entityManagerMock.find(ResourceEntity.class, 1)).thenReturn(mock(ResourceEntity.class)); when(entityManagerMock.find(ResourceEntity.class, 2)).thenReturn(mock(ResourceEntity.class)); when(propertyEditingServiceMock.loadPropertiesForEditRelation(any(ResourceEditRelation.Mode.class), anyInt(), anyInt(), any(ResourceTypeEntity.class), any(ResourceTypeEntity.class), any(ContextEntity.class))).thenReturn(properties); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE, contextMock, Action.UPDATE, null, null)).thenReturn(false); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE_PROPERTY_DECRYPT, contextMock, Action.ALL, relation.getMasterResource(), null)).thenReturn(true); // when Assert.assertFalse(properties.isEmpty()); verify(propertyValueServiceMock, never()).decryptProperties(anyList()); editor.setPropertyValueOnResourceRelationForContext(resourceGroupName, releaseName, relatedResourceGroupName, relatedResourceReleaseName, contextName, propertyName, propertyValue); }
@Test(expected = NotAuthorizedException.class) public void setPropertyValueOnAllResourceRelationsForContextWhereNotYetSetShouldThrowExceptionWhenPropertyHasNoValueButResourceUpdatePermissionIsMissing() throws Exception { // given String resourceGroupName = "resourceGroupName"; String relatedResourceGroupName = "relatedResourceGroupName"; String relatedResourceReleaseName ="relatedResourceReleaseName"; String contextName = "contextName"; String propertyName = "propertyName"; String propertyValue = "propertyValue"; List<ResourceEditProperty> properties = new ArrayList<>(); properties.add(new ResourceEditPropertyBuilder().withDisplayAndTechKeyName(propertyName).build()); ResourceEntity relatedResource = createWithIdNameAndTypeName(2, relatedResourceGroupName, "relatedResourceType"); ResourceEntity resource = createWithIdNameAndTypeNameWithRelations(1, resourceGroupName, "resourceType", relatedResource); List<ResourceEntity> resourcesByGroupNameWithRelations = new ArrayList<>(); resourcesByGroupNameWithRelations.add(resource); ContextEntity contextMock = mock(ContextEntity.class); when(resourceLocatorMock.getResourcesByGroupNameWithRelations(resourceGroupName)).thenReturn(resourcesByGroupNameWithRelations); when(resourceLocatorMock.getResourceByGroupNameAndRelease(relatedResourceGroupName, relatedResourceReleaseName)).thenReturn(relatedResource); when(contextLocatorMock.getContextByName(contextName)).thenReturn(contextMock); when(entityManagerMock.find(ResourceEntity.class, 1)).thenReturn(resource); when(entityManagerMock.find(ResourceEntity.class, 2)).thenReturn(relatedResource); when(propertyEditingServiceMock.loadPropertiesForEditRelation(any(ResourceEditRelation.Mode.class), anyInt(), anyInt(), any(ResourceTypeEntity.class), any(ResourceTypeEntity.class), any(ContextEntity.class))).thenReturn(properties); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE, contextMock, Action.UPDATE, null, null)).thenReturn(false); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE_PROPERTY_DECRYPT, contextMock, Action.ALL, resource, null)).thenReturn(true); setupMocksForSinglePropertiesModificationsFor(resource); // when Assert.assertFalse(resourcesByGroupNameWithRelations.isEmpty()); Assert.assertFalse(properties.isEmpty()); editor.setPropertyValueOnAllResourceRelationsForContextWhereNotYetSet(resourceGroupName, relatedResourceGroupName, relatedResourceReleaseName, contextName, propertyName, propertyValue); }
when(entityManagerMock.find(ResourceEntity.class, 1)).thenReturn(resource); when(entityManagerMock.find(ResourceEntity.class, 2)).thenReturn(relatedResource); when(propertyEditingServiceMock.loadPropertiesForEditRelation(any(ResourceEditRelation.Mode.class), anyInt(), anyInt(), any(ResourceTypeEntity.class), any(ResourceTypeEntity.class), any(ContextEntity.class))).thenReturn(properties); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE, contextMock, Action.UPDATE, null, null)).thenReturn(false); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE_PROPERTY_DECRYPT, contextMock, Action.ALL, resource, null)).thenReturn(true);
@Test public void setPropertyValueOnResourceRelationForContextShouldSetPropertyValue() throws Exception { // given String resourceGroupName = "resourceGroupName"; String releaseName = "releaseName"; String relatedResourceGroupName = "relatedResourceGroupName"; String relatedResourceReleaseName ="relatedResourceReleaseName"; String contextName = "contextName"; String propertyName = "propertyName"; String propertyValue = "propertyValue"; List<ResourceEditProperty> properties = new ArrayList<>(); properties.add(new ResourceEditPropertyBuilder().withDisplayAndTechKeyName(propertyName).withValue(propertyValue).build()); ContextEntity contextMock = mock(ContextEntity.class); ConsumedResourceRelationEntity relation = createWithMasterAndSlave(resourceGroupName, relatedResourceGroupName); when(resourceRelationLocatorMock.getResourceRelation(resourceGroupName, releaseName, relatedResourceGroupName, relatedResourceReleaseName)).thenReturn(relation); when(contextLocatorMock.getContextByName(contextName)).thenReturn(contextMock); when(entityManagerMock.find(ResourceEntity.class, 1)).thenReturn(mock(ResourceEntity.class)); when(entityManagerMock.find(ResourceEntity.class, 2)).thenReturn(mock(ResourceEntity.class)); when(propertyEditingServiceMock.loadPropertiesForEditRelation(any(ResourceEditRelation.Mode.class), anyInt(), anyInt(), any(ResourceTypeEntity.class), any(ResourceTypeEntity.class), any(ContextEntity.class))).thenReturn(properties); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE, contextMock, Action.UPDATE, relation.getMasterResource(), null)).thenReturn(true); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE_PROPERTY_DECRYPT, contextMock, Action.ALL, relation.getMasterResource(), null)).thenReturn(true); setupMocksForSinglePropertiesModificationsFor(relation); // when Assert.assertFalse(properties.isEmpty()); editor.setPropertyValueOnResourceRelationForContext(resourceGroupName, releaseName, relatedResourceGroupName, relatedResourceReleaseName, contextName, propertyName, propertyValue); // then verify(propertyValueServiceMock).setPropertyValue(Matchers.any(ContextDependency.class), Matchers.anyInt(), Matchers.eq(propertyValue)); }
@Test(expected = NotAuthorizedException.class) public void resetPropertyValueOnResourceRelationForContextShouldThrowExceptionWhenWhenResourceUpdatePermissionIsMissing() throws Exception { // given String resourceGroupName = "resourceGroupName"; String releaseName = "releaseName"; String relatedResourceGroupName = "relatedResourceGroupName"; String relatedResourceReleaseName ="relatedResourceReleaseName"; String contextName = "contextName"; String propertyName = "propertyName"; String propertyValue = "propertyValue"; ConsumedResourceRelationEntity relationWithMasterAndSlave = createWithMasterAndSlave(resourceGroupName, relatedResourceGroupName); List<ResourceEditProperty> properties = new ArrayList<>(); properties.add(new ResourceEditPropertyBuilder().withDisplayAndTechKeyName(propertyName).withValue(propertyValue).build()); ContextEntity contextMock = mock(ContextEntity.class); when(resourceRelationLocatorMock.getResourceRelation(resourceGroupName, releaseName, relatedResourceGroupName, relatedResourceReleaseName)).thenReturn(relationWithMasterAndSlave); when(contextLocatorMock.getContextByName(contextName)).thenReturn(contextMock); when(entityManagerMock.find(ResourceEntity.class, 1)).thenReturn(mock(ResourceEntity.class)); when(entityManagerMock.find(ResourceEntity.class, 2)).thenReturn(mock(ResourceEntity.class)); when(propertyValueServiceMock.decryptProperties(anyList())).thenReturn(properties); when(propertyEditingServiceMock.loadPropertiesForEditRelation(any(ResourceEditRelation.Mode.class), anyInt(), anyInt(), any(ResourceTypeEntity.class), any(ResourceTypeEntity.class), any(ContextEntity.class))).thenReturn(properties); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE, contextMock, Action.UPDATE, relationWithMasterAndSlave.getMasterResource(), null)).thenReturn(false); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE_PROPERTY_DECRYPT, contextMock, Action.ALL, relationWithMasterAndSlave.getMasterResource(), null)).thenReturn(true); // when Assert.assertFalse(properties.isEmpty()); verify(propertyValueServiceMock, never()).decryptProperties(anyList()); editor.resetPropertyValueOnResourceRelationForContext(resourceGroupName, releaseName, relatedResourceGroupName, relatedResourceReleaseName, contextName, propertyName); }
@Test public void resetPropertyValueOnResourceRelationForContextShouldResetPropertyValue() throws Exception { // given String resourceGroupName = "resourceGroupName"; String releaseName = "releaseName"; String relatedResourceGroupName = "relatedResourceGroupName"; String relatedResourceReleaseName ="relatedResourceReleaseName"; String contextName = "contextName"; String propertyName = "propertyName"; String propertyValue = "propertyValue"; List<ResourceEditProperty> properties = new ArrayList<>(); properties.add(new ResourceEditPropertyBuilder().withDisplayAndTechKeyName(propertyName).withValue(propertyValue).build()); ContextEntity contextMock = mock(ContextEntity.class); ConsumedResourceRelationEntity relation = createWithMasterAndSlave(resourceGroupName, relatedResourceGroupName); when(resourceRelationLocatorMock.getResourceRelation(resourceGroupName, releaseName, relatedResourceGroupName, relatedResourceReleaseName)).thenReturn(relation); when(contextLocatorMock.getContextByName(contextName)).thenReturn(contextMock); when(entityManagerMock.find(ResourceEntity.class, 1)).thenReturn(mock(ResourceEntity.class)); when(entityManagerMock.find(ResourceEntity.class, 2)).thenReturn(mock(ResourceEntity.class)); when(propertyValueServiceMock.decryptProperties(anyList())).thenReturn(properties); when(propertyEditingServiceMock.loadPropertiesForEditRelation(any(ResourceEditRelation.Mode.class), anyInt(), anyInt(), any(ResourceTypeEntity.class), any(ResourceTypeEntity.class), any(ContextEntity.class))).thenReturn(properties); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE, contextMock, Action.UPDATE, relation.getMasterResource(), null)).thenReturn(true); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE_PROPERTY_DECRYPT, contextMock, Action.ALL, relation.getMasterResource(), null)).thenReturn(true); setupMocksForSinglePropertiesModificationsFor(relation); // when Assert.assertFalse(properties.isEmpty()); editor.resetPropertyValueOnResourceRelationForContext(resourceGroupName, releaseName, relatedResourceGroupName, relatedResourceReleaseName, contextName, propertyName); // then verify(propertyValueServiceMock).resetPropertyValue(Matchers.any(ContextDependency.class), Matchers.anyInt()); }
when(entityManagerMock.find(ResourceEntity.class, 2)).thenReturn(relatedResource); when(propertyValueServiceMock.decryptProperties(anyList())).thenReturn(properties); when(propertyEditingServiceMock.loadPropertiesForEditRelation(any(ResourceEditRelation.Mode.class), anyInt(), anyInt(), any(ResourceTypeEntity.class), any(ResourceTypeEntity.class), any(ContextEntity.class))).thenReturn(properties); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE, contextMock, Action.UPDATE, resource, null)).thenReturn(true); when(permissionBoundaryMock.hasPermission(Permission.RESOURCE_PROPERTY_DECRYPT, contextMock, Action.ALL, relatedResource, null)).thenReturn(true);