diff --git a/src/main/java/org/opendevstack/component_provisioner/config/ApplicationPropertiesConfiguration.java b/src/main/java/org/opendevstack/component_provisioner/config/ApplicationPropertiesConfiguration.java index 04b1d18e..48045202 100644 --- a/src/main/java/org/opendevstack/component_provisioner/config/ApplicationPropertiesConfiguration.java +++ b/src/main/java/org/opendevstack/component_provisioner/config/ApplicationPropertiesConfiguration.java @@ -11,7 +11,6 @@ import java.net.URL; import java.time.Duration; import java.time.temporal.ChronoUnit; -import java.util.List; @Configuration public class ApplicationPropertiesConfiguration { @@ -40,12 +39,6 @@ public ComponentProvisionerParametersProps componentProvisionerParametersProps() return ComponentProvisionerParametersProps.builder().build(); } - @Bean("catalogItemGroupsRestrictionConfig") - @ConfigurationProperties(prefix = "catalog.user-action.groups-restriction") - public CatalogItemUserActionGroupsRestrictionProps catalogItemGroupsRestrictionConfig() { - return CatalogItemUserActionGroupsRestrictionProps.builder().build(); - } - @Bean("projectsInfoServiceCacheConfig") @ConfigurationProperties(prefix = "component-provisioner.caching.projects-info-services-cache") public ProjectsInfoServicesCacheProps projectsInfoServicesCacheProps() { @@ -115,10 +108,4 @@ public static class ComponentProvisionerParametersProps { private String[] blacklist; } - @Builder - @Data - public static class CatalogItemUserActionGroupsRestrictionProps { - private List prefix; - private List suffix; - } } diff --git a/src/main/java/org/opendevstack/component_provisioner/server/controllers/validators/ProvisionerActionsApiValidator.java b/src/main/java/org/opendevstack/component_provisioner/server/controllers/validators/ProvisionerActionsApiValidator.java index b5e9153f..360d3999 100644 --- a/src/main/java/org/opendevstack/component_provisioner/server/controllers/validators/ProvisionerActionsApiValidator.java +++ b/src/main/java/org/opendevstack/component_provisioner/server/controllers/validators/ProvisionerActionsApiValidator.java @@ -4,8 +4,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.opendevstack.component_provisioner.client.component_catalog.v1.model.CatalogItem; +import org.opendevstack.component_provisioner.client.component_catalog.v1.model.CatalogItemUserAction; import org.opendevstack.component_provisioner.client.component_catalog.v1.model.CatalogItemUserActionParameter; -import org.opendevstack.component_provisioner.config.ApplicationPropertiesConfiguration; import org.opendevstack.component_provisioner.server.controllers.exceptions.InvalidRestEntityException; import org.opendevstack.component_provisioner.server.controllers.exceptions.ProjectComponentAlreadyProvisionedException; import org.opendevstack.component_provisioner.server.controllers.exceptions.UserNotAllowedException; @@ -13,16 +13,10 @@ import org.opendevstack.component_provisioner.server.model.ProvisionAction; import org.opendevstack.component_provisioner.server.services.AuthenticationProvider; import org.opendevstack.component_provisioner.server.services.ComponentCatalogService; -import org.opendevstack.component_provisioner.server.services.ProjectsInfoService; -import org.opendevstack.component_provisioner.server.services.restrictions.evaluators.CatalogItemUserActionGroupsRestriction; -import org.opendevstack.component_provisioner.server.services.restrictions.evaluators.EvaluationRestrictions; -import org.opendevstack.component_provisioner.server.services.restrictions.evaluators.GroupsRestrictionsEvaluator; -import org.opendevstack.component_provisioner.server.services.restrictions.evaluators.RestrictionsParams; -import org.opendevstack.component_provisioner.server.services.restrictions.evaluators.UserActionEntityRestrictions; import org.springframework.stereotype.Service; +import java.util.Collection; import java.util.Collections; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -40,9 +34,6 @@ public class ProvisionerActionsApiValidator { private final ComponentCatalogService componentCatalogService; private final AuthenticationProvider authenticationProvider; - private final GroupsRestrictionsEvaluator groupsRestrictionsEvaluator; - private final ApplicationPropertiesConfiguration.CatalogItemUserActionGroupsRestrictionProps catalogItemUserActionGroupsRestrictionProps; - private final ProjectsInfoService projectsInfoService; private final MandatoryFieldsValidator mandatoryFieldsValidator; public void validate(ProvisionAction provisionAction) { @@ -55,8 +46,6 @@ public void validate(ProvisionAction provisionAction) { validateInputParams(projectKey, accessToken, componentId); validateComponentIsNotProvisioned(projectKey, componentId); - - validateUserHasPermissionsToProvision(projectKey, accessToken); } public void validateReceivesOnlyVisibleParameters(ProvisionAction provisionAction, CatalogItem catalogItem) { @@ -94,33 +83,21 @@ public void validateMandatoryFields(ProvisionAction provisionAction, CatalogItem mandatoryFieldsValidator.validate(provisionAction, catalogItem); } - private void validateUserHasPermissionsToProvision(String projectKey, String accessToken) { - log.debug("Validating user has permissions to provision. projectKey: {}", projectKey); - - CatalogItemUserActionGroupsRestriction catalogItemUserActionGroupsRestriction = CatalogItemUserActionGroupsRestriction.builder() - .prefix(catalogItemUserActionGroupsRestrictionProps.getPrefix()) - .suffix(catalogItemUserActionGroupsRestrictionProps.getSuffix()) - .build(); - UserActionEntityRestrictions userActionEntityRestrictions = UserActionEntityRestrictions.builder() - .groups(catalogItemUserActionGroupsRestriction) - .build(); - EvaluationRestrictions restrictions = new EvaluationRestrictions(projectKey, userActionEntityRestrictions); - - List userGroups = projectsInfoService.getProjectGroups(accessToken); - RestrictionsParams params = RestrictionsParams.builder() - .projectKey(projectKey) - .userGroups(userGroups) - .build(); + public void validateUserHasPermissionsToProvision(CatalogItem catalogItem) { + log.debug("Validating user has permissions to provision. CatalogItem: {}", catalogItem); - var groupsEvaluationResult = groupsRestrictionsEvaluator.evaluate(restrictions, params); + boolean provisionIsRequestable = Optional.ofNullable(catalogItem) + .map(CatalogItem::getUserActions) + .stream() + .flatMap(Collection::stream) + .filter(action -> ActionType.PROVISION.getValue().equals(action.getId())) + .findFirst() + .map(CatalogItemUserAction::getRequestable) + .orElse(false); - if (groupsEvaluationResult == null || Boolean.FALSE.equals(groupsEvaluationResult.getLeft())) { + if (!provisionIsRequestable) { String message = "User does not have permissions to provision this component."; - if (groupsEvaluationResult != null && groupsEvaluationResult.getRight() != null) { - message = groupsEvaluationResult.getRight(); - } - throw new UserNotAllowedException(message); } } diff --git a/src/main/java/org/opendevstack/component_provisioner/server/facade/ProvisionerActionsApiFacade.java b/src/main/java/org/opendevstack/component_provisioner/server/facade/ProvisionerActionsApiFacade.java index 7d125005..85e24f16 100644 --- a/src/main/java/org/opendevstack/component_provisioner/server/facade/ProvisionerActionsApiFacade.java +++ b/src/main/java/org/opendevstack/component_provisioner/server/facade/ProvisionerActionsApiFacade.java @@ -56,6 +56,7 @@ public AwxResponse triggerProvisionAction(ProvisionAction provisionAction) { var provisionActionWrapper = new ProvisionActionWrapper(provisionAction); var resolvedActionWrapper = resolveCatalogItemIdentifier(provisionActionWrapper); var catalogItem = fetchCatalogItem(resolvedActionWrapper); + provisionerActionsApiValidator.validateUserHasPermissionsToProvision(catalogItem); provisionerActionsApiValidator.validateReceivesOnlyVisibleParameters(resolvedActionWrapper.toProvisionAction(), catalogItem); var systemParametersActionWrapper = addSystemParametersToAction(resolvedActionWrapper); diff --git a/src/main/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/GroupsRestrictionsEvaluator.java b/src/main/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/GroupsRestrictionsEvaluator.java deleted file mode 100644 index 4660b2b4..00000000 --- a/src/main/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/GroupsRestrictionsEvaluator.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.opendevstack.component_provisioner.server.services.restrictions.evaluators; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.tuple.Pair; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Service; - -@Service -@Order(20) -@Slf4j -public class GroupsRestrictionsEvaluator implements RestrictionsEvaluator { - - @Override - public Pair evaluate(EvaluationRestrictions restrictions, RestrictionsParams params) { - if (validate(restrictions.restrictions(), params) && evaluateConditions(restrictions.restrictions(), params)) { - return Pair.of(true, ""); - } else { - log.debug("Validation failed for restrictions: {}, and params: {}", restrictions, params); - - return Pair.of(false, "Only project members with Manager or Team roles can provision components."); - } - } - - private boolean validate(UserActionEntityRestrictions restrictions, RestrictionsParams params) { - return restrictions.getGroups() != null - && params.getUserGroups() != null - && restrictions.getGroups().getPrefix() != null - && restrictions.getGroups().getSuffix() != null - && params.getProjectKey() != null; - } - - private boolean evaluateConditions(UserActionEntityRestrictions restrictions, RestrictionsParams params) { - return params.getUserGroups().stream().anyMatch(group -> - restrictions.getGroups().getPrefix().stream().anyMatch(group::startsWith) && - restrictions.getGroups().getSuffix().stream().anyMatch(group::endsWith) && - group.contains(params.getProjectKey()) - ); - } -} diff --git a/src/main/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/RestrictionsEvaluator.java b/src/main/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/RestrictionsEvaluator.java deleted file mode 100644 index 90f43ece..00000000 --- a/src/main/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/RestrictionsEvaluator.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.opendevstack.component_provisioner.server.services.restrictions.evaluators; - -import org.apache.commons.lang3.tuple.Pair; - -public interface RestrictionsEvaluator { - - Pair evaluate(EvaluationRestrictions restrictions, RestrictionsParams params); -} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e6ab801e..253b5699 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -33,20 +33,6 @@ management: exposure: include: health -catalog: - user-action: - groups-restriction: - prefix: - - BI-AS-ATLASSIAN - suffix: - - MANAGER - - TEAM - -catalog-collection: - id: ${CATALOG_COLLECTION_ID} -user-actions: - id: ${USER_ACTIONS_ID} - component-provisioner: azure: token: diff --git a/src/test/java/org/opendevstack/component_provisioner/server/controllers/validators/ProvisionerActionsApiValidatorTest.java b/src/test/java/org/opendevstack/component_provisioner/server/controllers/validators/ProvisionerActionsApiValidatorTest.java index d91f5d02..1fb656e7 100644 --- a/src/test/java/org/opendevstack/component_provisioner/server/controllers/validators/ProvisionerActionsApiValidatorTest.java +++ b/src/test/java/org/opendevstack/component_provisioner/server/controllers/validators/ProvisionerActionsApiValidatorTest.java @@ -1,6 +1,5 @@ package org.opendevstack.component_provisioner.server.controllers.validators; -import org.apache.commons.lang3.tuple.Pair; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; @@ -12,18 +11,16 @@ import org.opendevstack.component_provisioner.client.component_catalog.v1.model.CatalogItemUserAction; import org.opendevstack.component_provisioner.client.component_catalog.v1.model.CatalogItemUserActionParameter; import org.opendevstack.component_provisioner.client.component_catalog.v1.model.ProjectComponentInfo; -import org.opendevstack.component_provisioner.config.ApplicationPropertiesConfiguration; import org.opendevstack.component_provisioner.server.services.AuthenticationProvider; import org.opendevstack.component_provisioner.server.controllers.exceptions.InvalidRestEntityException; import org.opendevstack.component_provisioner.server.controllers.exceptions.ProjectComponentAlreadyProvisionedException; import org.opendevstack.component_provisioner.server.controllers.exceptions.UserNotAllowedException; +import org.opendevstack.component_provisioner.server.controllers.model.ActionType; import org.opendevstack.component_provisioner.server.model.ProvisionAction; import org.opendevstack.component_provisioner.server.model.ProvisionActionMother; import org.opendevstack.component_provisioner.server.model.ProvisionActionParameter; import org.opendevstack.component_provisioner.server.model.ProvisionActionParameterMother; import org.opendevstack.component_provisioner.server.services.ComponentCatalogService; -import org.opendevstack.component_provisioner.server.services.ProjectsInfoService; -import org.opendevstack.component_provisioner.server.services.restrictions.evaluators.GroupsRestrictionsEvaluator; import java.util.ArrayList; import java.util.Collections; @@ -44,15 +41,6 @@ class ProvisionerActionsApiValidatorTest { @Mock private AuthenticationProvider authenticationProvider; - @Mock - private GroupsRestrictionsEvaluator groupsRestrictionsEvaluator; - - @Mock - private ProjectsInfoService projectsInfoService; - - @Mock - private ApplicationPropertiesConfiguration.CatalogItemUserActionGroupsRestrictionProps catalogItemUserActionGroupsRestrictionProps; - @Mock private MandatoryFieldsValidator mandatoryFieldsValidator; @@ -100,78 +88,34 @@ void givenAlreadyProvisionedComponent_whenValidating_thenThrowsProjectComponentA } @Test - void givenUserWithoutPermissions_whenValidating_thenThrowsUserNotAllowedException() { + void givenProvisionActionNotRequestable_whenValidatingUserPermission_thenThrowsUserNotAllowedException() { // given - var projectKey = "pkey"; - var componentId = "cid"; - var accessToken = "accessToken"; - - var action = ProvisionActionMother.of(List.of( - ProvisionActionParameterMother.of("project_key", projectKey), - ProvisionActionParameterMother.of("component_id", componentId), - ProvisionActionParameterMother.of("catalog_item_id", "111"), - ProvisionActionParameterMother.of("access_token", accessToken), - ProvisionActionParameterMother.of("workflow", "123") - )); - - when(authenticationProvider.getAccessToken()).thenReturn(accessToken); - - // Component catalog empty -> no conflict - when(componentCatalogService.getProjectComponents(any(), any())) - .thenReturn(List.of()); - - // User groups - when(projectsInfoService.getProjectGroups(accessToken)) - .thenReturn(List.of("group1")); - - // Configure restriction prefix/suffix - when(catalogItemUserActionGroupsRestrictionProps.getPrefix()).thenReturn(List.of("prefix-")); - when(catalogItemUserActionGroupsRestrictionProps.getSuffix()).thenReturn(List.of("-suffix")); - - // Simulate evaluator result -> forbidden - when(groupsRestrictionsEvaluator.evaluate(any(), any())) - .thenReturn(Pair.of(false, "User is not allowed")); + var provisionAction = CatalogItemUserAction.builder() + .id(ActionType.PROVISION.getValue()) + .requestable(false) + .build(); + var catalogItem = CatalogItem.builder() + .userActions(List.of(provisionAction)) + .build(); // when / then - assertThatThrownBy(() -> provisionerActionsApiValidator.validate(action)) + assertThatThrownBy(() -> provisionerActionsApiValidator.validateUserHasPermissionsToProvision(catalogItem)) .isInstanceOf(UserNotAllowedException.class); } @Test - void givenUserWithPermissions_whenValidating_thenDoesNotThrow() { + void givenProvisionActionRequestable_whenValidatingUserPermission_thenDoesNotThrow() { // given - var projectKey = "pkey"; - var componentId = "cid"; - var accessToken = "accessToken"; - - var action = ProvisionActionMother.of(List.of( - ProvisionActionParameterMother.of("project_key", projectKey), - ProvisionActionParameterMother.of("component_id", componentId), - ProvisionActionParameterMother.of("catalog_item_id", "111"), - ProvisionActionParameterMother.of("access_token", accessToken), - ProvisionActionParameterMother.of("workflow", "123") - )); - - when(authenticationProvider.getAccessToken()).thenReturn(accessToken); - - // Component does NOT exist - when(componentCatalogService.getProjectComponents(any(), any())) - .thenReturn(List.of()); - - // User groups - when(projectsInfoService.getProjectGroups(accessToken)) - .thenReturn(List.of("allowed-group")); - - // Configure restriction prefix/suffix - when(catalogItemUserActionGroupsRestrictionProps.getPrefix()).thenReturn(List.of("prefix-")); - when(catalogItemUserActionGroupsRestrictionProps.getSuffix()).thenReturn(List.of("-suffix")); - - // Simulate evaluator result -> allowed - when(groupsRestrictionsEvaluator.evaluate(any(), any())) - .thenReturn(Pair.of(true, "")); + var provisionAction = CatalogItemUserAction.builder() + .id(ActionType.PROVISION.getValue()) + .requestable(true) + .build(); + var catalogItem = CatalogItem.builder() + .userActions(List.of(provisionAction)) + .build(); // when / then - provisionerActionsApiValidator.validate(action); + assertThatNoException().isThrownBy(() -> provisionerActionsApiValidator.validateUserHasPermissionsToProvision(catalogItem)); } @Test @@ -256,37 +200,6 @@ void givenComponentCatalogServiceThrows_whenValidating_thenThrowsRuntimeExceptio .isInstanceOf(RuntimeException.class); } - @Test - void givenProjectsInfoServiceThrows_whenValidating_thenThrowsRuntimeException() { - // given - var action = ProvisionActionMother.of(List.of( - ProvisionActionParameterMother.of("project_key", "pkey"), - ProvisionActionParameterMother.of("component_id", "cid"), - ProvisionActionParameterMother.of("catalog_item_id", "catid"), - ProvisionActionParameterMother.of("access_token", "accessToken") - )); - - // when / then - assertThatThrownBy(() -> provisionerActionsApiValidator.validate(action)) - .isInstanceOf(RuntimeException.class); - } - - @Test - void givenGroupsRestrictionsEvaluatorThrows_whenValidating_thenThrowsRuntimeException() { - // given - var action = ProvisionActionMother.of(List.of( - ProvisionActionParameterMother.of("project_key", "pkey"), - ProvisionActionParameterMother.of("component_id", "cid"), - ProvisionActionParameterMother.of("catalog_item_id", "catid"), - ProvisionActionParameterMother.of("access_token", "accessToken") - )); - - when(authenticationProvider.getAccessToken()).thenReturn("bearerToken"); - - // when / then - assertThatThrownBy(() -> provisionerActionsApiValidator.validate(action)) - .isInstanceOf(RuntimeException.class); - } private ProvisionAction givenMissingParameterName_whenBuildingAction_thenReturnsActionWithoutMissingParameter(String missingParamName) { // given diff --git a/src/test/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/GroupsRestrictionsEvaluatorTest.java b/src/test/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/GroupsRestrictionsEvaluatorTest.java deleted file mode 100644 index 15e635bc..00000000 --- a/src/test/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/GroupsRestrictionsEvaluatorTest.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.opendevstack.component_provisioner.server.services.restrictions.evaluators; - -import java.util.List; - -import org.junit.jupiter.api.Test; -import org.opendevstack.component_provisioner.server.services.catalog.CatalogItemUserActionGroupsRestrictionMother; -import org.opendevstack.component_provisioner.server.services.catalog.common.UserActionEntityRestrictionsMother; - -import static org.assertj.core.api.Assertions.assertThat; - -class GroupsRestrictionsEvaluatorTest { - - private final GroupsRestrictionsEvaluator groupsRestrictionsEvaluator = new GroupsRestrictionsEvaluator(); - - @Test - void givenValidRestrictions_AndValidParams_whenEvaluate_ThenEvaluationPass_AndReturnTrue() { - // given - var projectKey = "projectKey"; - - var groupsRestriction = CatalogItemUserActionGroupsRestrictionMother.of(); - var restrictions = UserActionEntityRestrictionsMother.of(groupsRestriction); - var params = RestrictionsParamsMother.of(List.of("prefix-1-projectKey-suffix-2")); - params.setProjectKey(projectKey); - var evaluationRestrictions = new EvaluationRestrictions(projectKey, restrictions); - - // when - var evaluateResult = groupsRestrictionsEvaluator.evaluate(evaluationRestrictions, params); - - // then - assertThat(evaluateResult.getLeft()).isTrue(); - } - - @Test - void givenValidRestrictions_AndInValidParams_whenEvaluate_ThenEvaluationNotPass_AndReturnFalse() { - // given - var projectKey = "projectKey"; - - var groupsRestriction = CatalogItemUserActionGroupsRestrictionMother.of(); - var restrictions = UserActionEntityRestrictionsMother.of(groupsRestriction); - var params = RestrictionsParamsMother.of(List.of("prefix-1-group-1-suffix-2")); - var evaluationRestrictions = new EvaluationRestrictions(projectKey, restrictions); - - // when - var evaluateResult = groupsRestrictionsEvaluator.evaluate(evaluationRestrictions, params); - - // then - assertThat(evaluateResult.getLeft()).isFalse(); - } - - @Test - void givenValidRestrictions_AndValidParams_whenEvaluate_ThenEvaluationNotPass_AndReturnFalse() { - // given - var projectKey = "projectKey"; - - var groupsRestriction = CatalogItemUserActionGroupsRestrictionMother.of(); - var restrictions = UserActionEntityRestrictionsMother.of(groupsRestriction); - var params = RestrictionsParamsMother.of(); - - var evaluationRestrictions = new EvaluationRestrictions(projectKey, restrictions); - - // when - var evaluateResult = groupsRestrictionsEvaluator.evaluate(evaluationRestrictions, params); - - // then - assertThat(evaluateResult.getLeft()).isFalse(); - assertThat(evaluateResult.getRight()) - .isEqualTo("Only project members with Manager or Team roles can provision components."); - } - - @Test - void givenInvalidRestrictions_AndValidParams_whenEvaluate_ThenEvaluationNotPass_AndReturnFalse() { - // given - var projectKey = "projectKey"; - - var restrictions = UserActionEntityRestrictionsMother.of(); - var params = RestrictionsParamsMother.of(); - - var evaluationRestrictions = new EvaluationRestrictions(projectKey, restrictions); - - // when - var evaluateResult = groupsRestrictionsEvaluator.evaluate(evaluationRestrictions, params); - - // then - assertThat(evaluateResult.getLeft()).isFalse(); - assertThat(evaluateResult.getRight()) - .isEqualTo("Only project members with Manager or Team roles can provision components."); - } -} diff --git a/src/test/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/RestrictionsParamsMother.java b/src/test/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/RestrictionsParamsMother.java deleted file mode 100644 index 626d3817..00000000 --- a/src/test/java/org/opendevstack/component_provisioner/server/services/restrictions/evaluators/RestrictionsParamsMother.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.opendevstack.component_provisioner.server.services.restrictions.evaluators; - -import org.opendevstack.component_provisioner.client.component_catalog.v1.model.CatalogItemUserActionParameter; - -import java.util.List; - -public class RestrictionsParamsMother { - - public static RestrictionsParams of() { - return RestrictionsParams.builder().build(); - } - - public static RestrictionsParams of(List userGroups) { - return RestrictionsParams.builder() - .userGroups(userGroups) - .build(); - } - - public static RestrictionsParams of(List parameters, List clusters) { - return RestrictionsParams.builder() - .parameters(parameters) - .clusters(clusters) - .build(); - } - - public static RestrictionsParams of(String projectKey) { - return RestrictionsParams.builder() - .projectKey(projectKey) - .build(); - } -}