private static Optional<ConfigurationProperty> vendorExtension(final SecuritySchemeDefinition definition, final ConfigurationProperty template, final String name) { final Map<String, Object> vendorExtensions = definition.getVendorExtensions(); if (vendorExtensions == null) { return empty(); } final Object value = vendorExtensions.get(name); if (value == null) { return empty(); } final ConfigurationProperty property = new ConfigurationProperty.Builder().createFrom(template).defaultValue(String.valueOf(value)) .build(); return Optional.of(property); }
private static Optional<ConfigurationProperty> vendorExtension(final SecuritySchemeDefinition definition, final ConfigurationProperty template, final String name) { final Map<String, Object> vendorExtensions = definition.getVendorExtensions(); if (vendorExtensions == null) { return empty(); } final Object value = vendorExtensions.get(name); if (value == null) { return empty(); } final ConfigurationProperty property = new ConfigurationProperty.Builder().createFrom(template).defaultValue(String.valueOf(value)) .build(); return Optional.of(property); }
private static BiFunction<Swagger, ConfigurationProperty, Optional<ConfigurationProperty>> withDefaultValue(final Function<Swagger, String> defaultValueExtractor) { return (swagger, template) -> Optional .of(new ConfigurationProperty.Builder().createFrom(template).defaultValue(defaultValueExtractor.apply(swagger)).build()); } }
@Test public void shouldApplyReceivedCredentialsToConnections() { final CredentialProvider credentialProvider = mock(CredentialProvider.class); when(locator.providerWithId("providerId")).thenReturn(credentialProvider); final CredentialFlowState flowState = new OAuth2CredentialFlowState.Builder().providerId("providerId") .returnUrl(URI.create("/ui#state")).code("code").state("state").build(); final Connection connection = new Connection.Builder() .connector(new Connector.Builder().putProperty("key", new ConfigurationProperty.Builder().build()).build()) .build(); when(credentialProvider.applyTo(new Connection.Builder().createFrom(connection).isDerived(true).build(), flowState)) .then(a -> new Connection.Builder().createFrom(a.getArgument(0)) .putConfiguredProperty("key", "value").build()); final Connection finishedConnection = credentials.apply(connection, flowState); assertThat(finishedConnection).isNotNull(); assertThat(finishedConnection.getConfiguredProperties()).contains(entry("key", "value")); assertThat(finishedConnection.isDerived()).isTrue(); }
@Test public void shouldNotComputeConnectorConfiguredPropertiesAsMissing() { final ConnectionUpdateHandler updateHandler = new ConnectionUpdateHandler(dataManager, null, validator); final Connection connection = new Connection.Builder()// .id("connection")// .putConfiguredProperty("req2", "value2")// .build(); final ConfigurationProperty required = new ConfigurationProperty.Builder().required(true).build(); final Connector sameConnector = new Connector.Builder()// .id("new-connector")// .putProperty("req1", required)// .putProperty("req2", required)// .putConfiguredProperty("req1", "value1")// .build(); when(dataManager.fetchByPropertyValue(ConnectionBulletinBoard.class, "targetResourceId", "connection")) .thenReturn(Optional.empty()); final ConnectionBulletinBoard board = updateHandler.computeBoard(connection, sameConnector, sameConnector); assertThat(board.getMessages()).isEmpty(); } }
@Test public void shouldOmitHiddenProperties() { final Connector withHiddenProperty = new Connector.Builder().createFrom(connector) .putProperty("theHiddenOne", new ConfigurationProperty.Builder().type("hidden").addTag(Credentials.AUTHENTICATION_URL_TAG).build()) .build(); final OAuthApp oauthApp = OAuthApp.fromConnector(withHiddenProperty); final OAuthApp expected = new OAuthApp.Builder()// .id("connector-id")// .name("Connector")// .icon("svg-icon")// .putProperty("clientId", CLIENT_ID_PROPERTY)// .putProperty("clientSecret", CLIENT_SECRET_PROPERTY)// .putConfiguredProperty("clientId", "client-id")// .putConfiguredProperty("clientSecret", "client-secret")// .build(); assertThat(oauthApp).isEqualTo(expected); }
@Test public void shouldFetchProvidersFromDataManager() { final DataManager dataManager = mock(DataManager.class); final CredentialProviderRegistry registry = new CredentialProviderRegistry(dataManager); final Connector connector = new Connector.Builder().id("test-provider") .putProperty("clientId", new ConfigurationProperty.Builder().addTag(Credentials.CLIENT_ID_TAG).build()) .putProperty("clientSecret", new ConfigurationProperty.Builder().addTag(Credentials.CLIENT_SECRET_TAG).build()) .putConfiguredProperty("clientId", "a-client-id").putConfiguredProperty("clientSecret", "a-client-secret") .build(); when(dataManager.fetch(Connector.class, "test-provider")).thenReturn(connector); assertThat(registry.providerWithId("test-provider")).isInstanceOfSatisfying(TestCredentialProvider.class, p -> { assertThat(p.getProperties().getAppId()).isEqualTo("a-client-id"); assertThat(p.getProperties().getAppSecret()).isEqualTo("a-client-secret"); }); } }
/** * Creates an immutable copy of a {@link ConfigurationProperty} value. * Uses accessors to get values to initialize the new immutable instance. * If an instance is already immutable, it is returned as is. * @param instance The instance to copy * @return A copied immutable ConfigurationProperty instance */ public static ConfigurationProperty copyOf(ConfigurationProperty instance) { if (instance instanceof ImmutableConfigurationProperty) { return (ImmutableConfigurationProperty) instance; } return new ConfigurationProperty.Builder() .createFrom(instance) .build(); }
@Test public void testNewRequiresProperty() { Map<String, ConfigurationProperty> left = new HashMap<>(); Map<String, ConfigurationProperty> right = new HashMap<>(); left.put("property", new ConfigurationProperty.Builder().javaType("string").build()); right.put("property", new ConfigurationProperty.Builder().javaType("STRING").build()); right.put("property2", new ConfigurationProperty.Builder().javaType("string").required(true).build()); List<LeveledMessage> messages = new DummyHandler().computePropertiesDiffMessages(LeveledMessage.Builder::new, left, right); assertThat(messages).hasSize(2); assertThat(messages.get(0)).hasFieldOrPropertyWithValue("level", LeveledMessage.Level.INFO); assertThat(messages.get(0)).hasFieldOrPropertyWithValue("code", LeveledMessage.Code.SYNDESIS001); assertThat(messages.get(1)).hasFieldOrPropertyWithValue("level", LeveledMessage.Level.WARN); assertThat(messages.get(1)).hasFieldOrPropertyWithValue("code", LeveledMessage.Code.SYNDESIS002); }
@Test public void testMissingMandatoryProperty() { Map<String, ConfigurationProperty> left = new HashMap<>(); Map<String, String> right = new HashMap<>(); left.put("property1", new ConfigurationProperty.Builder().javaType("string").build()); left.put("property2", new ConfigurationProperty.Builder().javaType("string").required(true).build()); right.put("property1", "value1"); List<LeveledMessage> messages = new DummyHandler().computeMissingMandatoryPropertiesMessages(LeveledMessage.Builder::new, left, right); assertThat(messages).hasSize(1); assertThat(messages.get(0)).hasFieldOrPropertyWithValue("level", LeveledMessage.Level.WARN); assertThat(messages.get(0)).hasFieldOrPropertyWithValue("code", LeveledMessage.Code.SYNDESIS006); }
static Connector mockConnector(final String id) { return new Connector.Builder().id(id) .putProperty("clientId", new ConfigurationProperty.Builder().addTag(Credentials.CLIENT_ID_TAG).build()) .putProperty("clientSecret", new ConfigurationProperty.Builder().addTag(Credentials.CLIENT_SECRET_TAG).build()) .putConfiguredProperty("clientId", "a-client-id") .putConfiguredProperty("clientSecret", "a-client-secret").build(); } }
@Test public void shouldUpdateConnectorWithDefaultValuesIfNoneGiven() { final Connector withHiddenProperty = new Connector.Builder().createFrom(connector) .putProperty("defaulted", new ConfigurationProperty.Builder().type("hidden") .addTag(Credentials.AUTHENTICATION_URL_TAG).defaultValue("I'm a default").build()) .build(); final Connector updated = OAuthApp.fromConnector(withHiddenProperty).update(withHiddenProperty); assertThat(updated.getConfiguredProperties()).containsEntry("defaulted", "I'm a default"); }
private static BiFunction<Swagger, ConfigurationProperty, Optional<ConfigurationProperty>> withDefaultValue(final Function<Swagger, String> defaultValueExtractor) { return (swagger, template) -> Optional .of(new ConfigurationProperty.Builder().createFrom(template).defaultValue(defaultValueExtractor.apply(swagger)).build()); } }
@Test public void shouldSetConfiguredPropertyIfGivenEvenIfConfiguredPropertyOrDefaultExists() { final Connector withHiddenProperty = new Connector.Builder().createFrom(connector) .putProperty("prop", new ConfigurationProperty.Builder().type("hidden") .addTag(Credentials.AUTHENTICATION_URL_TAG).defaultValue("I'm a default").build()) .putConfiguredProperty("prop", "initial").build(); final Connector updated = OAuthApp.fromConnector(withHiddenProperty).update( new Connector.Builder().createFrom(withHiddenProperty).putConfiguredProperty("prop", "new-value").build()); assertThat(updated.getConfiguredProperties()).containsEntry("prop", "new-value"); }
private static Optional<ConfigurationProperty> oauthProperty(final Swagger swagger, final ConfigurationProperty template, final Function<OAuth2Definition, String> defaultValueExtractor) { return securityDefinition(swagger, OAuth2Definition.class).map(definition -> new ConfigurationProperty.Builder() .createFrom(template).defaultValue(defaultValueExtractor.apply(definition)).build()); }
@Test public void shouldKeepConnectorConfiguredPropertiesIfNoneGiven() { final Connector withConfiguredProperty = new Connector.Builder().createFrom(connector) .putProperty("configured", new ConfigurationProperty.Builder().type("hidden").addTag(Credentials.AUTHENTICATION_URL_TAG).build()) .putConfiguredProperty("configured", "initial").build(); final Connector updated = OAuthApp.fromConnector(withConfiguredProperty).update(withConfiguredProperty); assertThat(updated.getConfiguredProperties()).containsEntry("configured", "initial"); }
@Test public void shouldFilterOutNonOAuthConnectors() { final Connector connector1 = new Connector.Builder().build(); final Connector connector2 = new Connector.Builder() .putProperty("clientId", new ConfigurationProperty.Builder().addTag(Credentials.CLIENT_ID_TAG).build()) .putConfiguredProperty("clientId", "my-client-id").build(); final Connector connector3 = new Connector.Builder() .putProperty("clientId", new ConfigurationProperty.Builder().addTag(Credentials.CLIENT_ID_TAG).build()).build(); final ListResult<Connector> result = ListResult.of(connector1, connector2, connector3); assertThat(OAuthConnectorFilter.INSTANCE.apply(result)).containsOnly(connector2, connector3); } }
@Test public void testUpdatedProperty() { Map<String, ConfigurationProperty> left = new HashMap<>(); Map<String, ConfigurationProperty> right = new HashMap<>(); left.put("property", new ConfigurationProperty.Builder().javaType("string").build()); right.put("property", new ConfigurationProperty.Builder().javaType("STRING").build()); List<LeveledMessage> messages = new DummyHandler().computePropertiesDiffMessages(LeveledMessage.Builder::new, left, right); assertThat(messages).hasSize(1); assertThat(messages.get(0)).hasFieldOrPropertyWithValue("level", LeveledMessage.Level.INFO); assertThat(messages.get(0)).hasFieldOrPropertyWithValue("code", LeveledMessage.Code.SYNDESIS001); }
@Test public void testNoDiff() { Map<String, ConfigurationProperty> left = new HashMap<>(); Map<String, ConfigurationProperty> right = new HashMap<>(); left.put("property", new ConfigurationProperty.Builder().javaType("string").build()); right.put("property", new ConfigurationProperty.Builder().javaType("string").build()); List<LeveledMessage> messages = new DummyHandler().computePropertiesDiffMessages(LeveledMessage.Builder::new, left, right); assertThat(messages).hasSize(0); }
private static Optional<ConfigurationProperty> oauthProperty(final Swagger swagger, final ConfigurationProperty template, final Function<OAuth2Definition, String> defaultValueExtractor) { return securityDefinition(swagger, OAuth2Definition.class).map(definition -> new ConfigurationProperty.Builder() .createFrom(template).defaultValue(defaultValueExtractor.apply(definition)).build()); }