From d59a9fd8aef8442c1c96a524ff06fb0582d0d814 Mon Sep 17 00:00:00 2001 From: Einat Vinouze Date: Wed, 12 Feb 2020 12:03:35 +0200 Subject: translate owning entity name to owning entity ID Issue-ID: VID-758 Change-Id: Ic89829ac4590537f0279052ceb9e8432ea0de878 Signed-off-by: Einat Vinouze --- .../main/java/org/onap/vid/roles/RoleProvider.java | 41 ++++++++-- .../java/org/onap/vid/roles/RoleProviderTest.java | 90 +++++++++++++++++++++- 2 files changed, 120 insertions(+), 11 deletions(-) (limited to 'vid-app-common/src') diff --git a/vid-app-common/src/main/java/org/onap/vid/roles/RoleProvider.java b/vid-app-common/src/main/java/org/onap/vid/roles/RoleProvider.java index c35f5f704..84b0fa934 100644 --- a/vid-app-common/src/main/java/org/onap/vid/roles/RoleProvider.java +++ b/vid-app-common/src/main/java/org/onap/vid/roles/RoleProvider.java @@ -21,6 +21,9 @@ package org.onap.vid.roles; +import static java.util.stream.Collectors.toMap; +import static org.apache.commons.collections4.CollectionUtils.emptyIfNull; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; @@ -31,14 +34,19 @@ import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; +import org.jetbrains.annotations.NotNull; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.web.support.UserUtils; import org.onap.vid.aai.AaiResponse; import org.onap.vid.aai.exceptions.RoleParsingException; +import org.onap.vid.category.CategoryParameterOptionRep; +import org.onap.vid.category.CategoryParametersResponse; +import org.onap.vid.model.CategoryParameter.Family; import org.onap.vid.model.ModelConstants; import org.onap.vid.model.Subscriber; import org.onap.vid.model.SubscriberList; import org.onap.vid.services.AaiService; +import org.onap.vid.services.CategoryParameterService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -54,21 +62,27 @@ public class RoleProvider { private Function getUserIdFunction; private Function getRolesFunction; private final RoleValidatorFactory roleValidatorFactory; + private final CategoryParameterService categoryParameterService; + @Autowired - public RoleProvider(AaiService aaiService, RoleValidatorFactory roleValidatorFactory) { + public RoleProvider(AaiService aaiService, RoleValidatorFactory roleValidatorFactory, + CategoryParameterService categoryParameterService) { this.aaiService=aaiService; this.roleValidatorFactory = roleValidatorFactory; + this.categoryParameterService = categoryParameterService; getUserIdFunction = UserUtils::getUserId; getRolesFunction = UserUtils::getRoles; } RoleProvider(AaiService aaiService, RoleValidatorFactory roleValidatorFactory, - Function getUserIdFunction, Function getRolesFunction) { + Function getUserIdFunction, Function getRolesFunction, + CategoryParameterService categoryParameterService) { this.aaiService = aaiService; this.roleValidatorFactory = roleValidatorFactory; this.getRolesFunction = getRolesFunction; this.getUserIdFunction = getUserIdFunction; + this.categoryParameterService = categoryParameterService; } public List getUserRoles(HttpServletRequest request) { @@ -79,6 +93,8 @@ public class RoleProvider { List roleList = new ArrayList<>(); Map roles = getRolesFunction.apply(request); + final Map owningEntityMap = owningEntityNameToOwningEntityIdMapper(); + for (Object role : roles.keySet()) { org.onap.portalsdk.core.domain.Role sdkRol = (org.onap.portalsdk.core.domain.Role) roles.get(role); @@ -90,7 +106,7 @@ public class RoleProvider { continue; } String[] roleParts = splitRole((sdkRol.getName()), logPrefix); - roleList.add(createRoleFromStringArr(roleParts, logPrefix)); + roleList.add(createRoleFromStringArr(roleParts, logPrefix, owningEntityMap)); String msg = String.format("%s User %s got permissions %s", logPrefix, userId, Arrays.toString(roleParts)); LOG.debug(EELFLoggerDelegate.debugLogger, msg); } catch (Exception e) { @@ -140,9 +156,9 @@ public class RoleProvider { return replacement; } - public Role createRoleFromStringArr(String[] roleParts, String rolePrefix) throws RoleParsingException { + public Role createRoleFromStringArr(String[] roleParts, String rolePrefix, Map owningEntityMap) throws RoleParsingException { String globalCustomerID = replaceSubscriberNameToGlobalCustomerID(roleParts[0], rolePrefix); - String owningEntityId = translateOwningEntityNameToOwningEntityId(roleParts[0]); + String owningEntityId = translateOwningEntityNameToOwningEntityId(roleParts[0], owningEntityMap); try { if (roleParts.length > 2) { @@ -162,8 +178,19 @@ public class RoleProvider { } - private String translateOwningEntityNameToOwningEntityId(String owningEntityName) { - return owningEntityName; // TODO: translate to id + // in case the owningEntity name is not found in the owningEntityMap - return the name + protected String translateOwningEntityNameToOwningEntityId(String owningEntityName, Map owningEntityMap) { + return owningEntityMap.getOrDefault(owningEntityName, owningEntityName); + } + + @NotNull + protected Map owningEntityNameToOwningEntityIdMapper() { + CategoryParametersResponse categoryParametersResponse = categoryParameterService.getCategoryParameters(Family.PARAMETER_STANDARDIZATION); + Map> categoryMap = categoryParametersResponse.getCategoryParameters(); + List owningEntityList = categoryMap.get("owningEntity"); + + return emptyIfNull(owningEntityList).stream().collect(toMap( + CategoryParameterOptionRep::getName, CategoryParameterOptionRep::getId)); } public RoleValidator getUserRolesValidator(HttpServletRequest request) { diff --git a/vid-app-common/src/test/java/org/onap/vid/roles/RoleProviderTest.java b/vid-app-common/src/test/java/org/onap/vid/roles/RoleProviderTest.java index 8d81c929c..5f4fc7861 100644 --- a/vid-app-common/src/test/java/org/onap/vid/roles/RoleProviderTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/roles/RoleProviderTest.java @@ -21,11 +21,15 @@ package org.onap.vid.roles; +import static java.util.Collections.emptyMap; +import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableMap; import java.util.List; import java.util.Map; @@ -34,10 +38,15 @@ import org.assertj.core.util.Lists; import org.mockito.Mock; import org.onap.vid.aai.AaiResponse; import org.onap.vid.aai.exceptions.RoleParsingException; +import org.onap.vid.category.CategoryParametersResponse; +import org.onap.vid.model.CategoryParameter.Family; import org.onap.vid.model.Subscriber; import org.onap.vid.model.SubscriberList; import org.onap.vid.services.AaiService; +import org.onap.vid.services.CategoryParameterService; +import org.testng.Assert; import org.testng.annotations.BeforeMethod; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class RoleProviderTest { @@ -49,6 +58,9 @@ public class RoleProviderTest { private static final String SAMPLE_SERVICE = "sampleService"; private static final String SAMPLE_TENANT = "sampleTenant"; private static final String SAMPLE_ROLE_PREFIX = "prefix"; + private static final String EXISTING_OWNING_ENTITY_NAME = "WayneHolland"; + private static final String EXISTING_OWNING_ENTITY_ID = "d61e6f2d-12fa-4cc2-91df-7c244011d6fc"; + private static final String NOT_EXISTING_OWNING_ENTITY_NAME = "notExistingOwningEntity"; @Mock private AaiService aaiService; @@ -62,13 +74,21 @@ public class RoleProviderTest { @Mock private RoleValidatorFactory roleValidatorFactory; + @Mock + private CategoryParameterService categoryParameterService; + private RoleProvider roleProvider; @BeforeMethod public void setUp() { initMocks(this); - roleProvider = new RoleProvider(aaiService, roleValidatorFactory, httpServletRequest -> 5, httpServletRequest -> createRoles()); + roleProvider = new RoleProvider(aaiService, roleValidatorFactory, httpServletRequest -> 5, + httpServletRequest -> createRoles(), + categoryParameterService); + + when(categoryParameterService.getCategoryParameters(any())) + .thenReturn(new CategoryParametersResponse(emptyMap())); } @Test @@ -84,7 +104,7 @@ public class RoleProviderTest { setSubscribers(); String[] roleParts = {SAMPLE_SUBSCRIBER, SAMPLE_SERVICE, SAMPLE_TENANT}; - Role role = roleProvider.createRoleFromStringArr(roleParts, SAMPLE_ROLE_PREFIX); + Role role = roleProvider.createRoleFromStringArr(roleParts, SAMPLE_ROLE_PREFIX, emptyMap()); assertThat(role.getEcompRole()).isEqualTo(EcompRole.READ); assertThat(role.getSubscriberId()).isEqualTo(SAMPLE_SUBSCRIBER_ID); @@ -98,7 +118,7 @@ public class RoleProviderTest { String[] roleParts = {SAMPLE_SUBSCRIBER, SAMPLE_SERVICE}; - Role role = roleProvider.createRoleFromStringArr(roleParts, SAMPLE_ROLE_PREFIX); + Role role = roleProvider.createRoleFromStringArr(roleParts, SAMPLE_ROLE_PREFIX, emptyMap()); assertThat(role.getEcompRole()).isEqualTo(EcompRole.READ); assertThat(role.getSubscriberId()).isEqualTo(SAMPLE_SUBSCRIBER_ID); @@ -110,7 +130,7 @@ public class RoleProviderTest { public void shouldRaiseExceptionWhenRolePartsAreIncomplete() throws RoleParsingException { setSubscribers(); - roleProvider.createRoleFromStringArr(new String[]{SAMPLE_SUBSCRIBER}, SAMPLE_ROLE_PREFIX); + roleProvider.createRoleFromStringArr(new String[]{SAMPLE_SUBSCRIBER}, SAMPLE_ROLE_PREFIX, emptyMap()); } @Test @@ -158,6 +178,28 @@ public class RoleProviderTest { assertThat(result).isEqualTo(expectedRoleValidator); } + @DataProvider + public static Object[][] owningEntityNameAndId() { + return new Object[][] { + {"owning entity name exist on the response, id is returned ", EXISTING_OWNING_ENTITY_NAME, EXISTING_OWNING_ENTITY_ID}, + {"owning entity name dont exist on the response, name is returned", NOT_EXISTING_OWNING_ENTITY_NAME, NOT_EXISTING_OWNING_ENTITY_NAME}, + }; + } + + @Test(dataProvider = "owningEntityNameAndId") + public void translateOwningEntityNameToOwningEntityId_shouldTranslateNameToId(String description, + String owningEntityName, String expectedId) { + String owningEntityId = roleProvider.translateOwningEntityNameToOwningEntityId(owningEntityName, + ImmutableMap.of( + EXISTING_OWNING_ENTITY_NAME, EXISTING_OWNING_ENTITY_ID, + "anyName", "anyId" + )); + + Assert.assertEquals(owningEntityId, expectedId); + } + + + private String owningEntityId() { // while translateOwningEntityNameToOwningEntityId does nothing, no translation happens. // this will be changed later. @@ -180,4 +222,44 @@ public class RoleProviderTest { role2.setName("sampleSubscriber___sampleService___sampleTenant"); return ImmutableMap.of(1L, role1, 2L, role2); } + + @Test + public void owningEntityNameToOwningEntityIdMapper_readsOwningEntityCorrectly() throws JsonProcessingException { + + final String categoryParametersResponse = "" + + "{ " + + " \"categoryParameters\": { " + + " \"lineOfBusiness\": [ " + + " { \"id\": \"ONAP\", \"name\": \"ONAP\" }, " + + " { \"id\": \"zzz1\", \"name\": \"zzz1\" } " + + " ], " + + " \"owningEntity\": [ " + + " { \"id\": \"aaa1\", \"name\": \"aaa1\" }, " + + " { \"id\": \"" + EXISTING_OWNING_ENTITY_ID + "\", \"name\": \"" + EXISTING_OWNING_ENTITY_NAME + "\" }, " + + " { \"id\": \"Melissa\", \"name\": \"Melissa\" } ], " + + " \"project\": [ " + + " { \"id\": \"WATKINS\", \"name\": \"WATKINS\" }, " + + " { \"id\": \"x1\", \"name\": \"x1\" }, " + + " { \"id\": \"yyy1\", \"name\": \"yyy1\" } " + + " ], " + + " \"platform\": [ " + + " { \"id\": \"platform\", \"name\": \"platform\" }, " + + " { \"id\": \"xxx1\", \"name\": \"xxx1\" } " + + " ] " + + " } " + + "}"; + + CategoryParametersResponse categoryParameterResponse = + new ObjectMapper().readValue(categoryParametersResponse, CategoryParametersResponse.class); + + when(categoryParameterService.getCategoryParameters(Family.PARAMETER_STANDARDIZATION)) + .thenReturn(categoryParameterResponse); + + org.hamcrest.MatcherAssert.assertThat(roleProvider.owningEntityNameToOwningEntityIdMapper(), + jsonEquals(ImmutableMap.of( + "aaa1", "aaa1", + "Melissa", "Melissa", + EXISTING_OWNING_ENTITY_NAME, EXISTING_OWNING_ENTITY_ID + ))); + } } -- cgit 1.2.3-korg