static void addGlobalParameters(final Connector.Builder builder, final Swagger swagger) { final Map<String, Parameter> globalParameters = swagger.getParameters(); if (globalParameters != null) { globalParameters.forEach((name, parameter) -> { createPropertyFromParameter(parameter).ifPresent(property -> { builder.putProperty(name, property); }); }); } }
static void addGlobalParameters(final Connector.Builder builder, final Swagger swagger) { final Map<String, Parameter> globalParameters = swagger.getParameters(); if (globalParameters != null) { globalParameters.forEach((name, parameter) -> { createPropertyFromParameter(parameter).ifPresent(property -> { builder.putProperty(name, property); }); }); } }
protected final Connector basicConnector(final ConnectorTemplate connectorTemplate, final ConnectorSettings connectorSettings) { final Swagger swagger = parseSpecification(connectorSettings, false).getModel(); // could be either JSON of the Swagger specification or a URL to one final String specification = requiredSpecification(connectorSettings); if (specification.startsWith("http")) { swagger.vendorExtension(URL_EXTENSION, URI.create(specification)); } final Connector baseConnector = baseConnectorFrom(connectorTemplate, connectorSettings); final Connector.Builder builder = new Connector.Builder().createFrom(baseConnector); final Map<String, String> alreadyConfiguredProperties = builder.build().getConfiguredProperties(); connectorTemplate.getConnectorProperties().forEach((propertyName, template) -> { final Optional<ConfigurationProperty> maybeProperty = PropertyGenerators.createProperty(propertyName, swagger, template); maybeProperty.ifPresent(property -> { builder.putProperty(propertyName, property); if (!alreadyConfiguredProperties.containsKey(propertyName)) { final String defaultValue = property.getDefaultValue(); if (defaultValue != null) { builder.putConfiguredProperty(propertyName, defaultValue); } } }); }); return builder.build(); }
.id("old") .addAction(oldAction) .putProperty("username", new ConfigurationProperty.Builder() .componentProperty(false) .secret(true) .build()) .putProperty("password", new ConfigurationProperty.Builder() .componentProperty(false) .secret(true) .build()) .putProperty("token", new ConfigurationProperty.Builder() .componentProperty(true) .id("new") .addAction(newAction) .putProperty("username", new ConfigurationProperty.Builder() .componentProperty(false) .secret(true) .build()) .putProperty("password", new ConfigurationProperty.Builder() .componentProperty(false) .secret(true) .build()) .putProperty("token",
.putConfiguredProperty("bucketNameOrArn", "my-bucketNameOrArn") .connector(new Connector.Builder() .putProperty( "accessKey", new ConfigurationProperty.Builder() .componentProperty(false) .build()) .putProperty( "secretKey", new ConfigurationProperty.Builder() .componentProperty(false) .build()) .putProperty( "region", new ConfigurationProperty.Builder() .componentProperty(false) .build()) .putProperty( "bucketNameOrArn", new ConfigurationProperty.Builder()
protected final Connector basicConnector(final ConnectorTemplate connectorTemplate, final ConnectorSettings connectorSettings) { final Swagger swagger = parseSpecification(connectorSettings, APIValidationContext.NONE).getModel(); // could be either JSON of the Swagger specification or a URL to one final String specification = requiredSpecification(connectorSettings); if (specification.startsWith("http")) { swagger.vendorExtension(URL_EXTENSION, URI.create(specification)); } final Connector baseConnector = baseConnectorFrom(connectorTemplate, connectorSettings); final Connector.Builder builder = new Connector.Builder().createFrom(baseConnector); final Map<String, String> alreadyConfiguredProperties = builder.build().getConfiguredProperties(); connectorTemplate.getConnectorProperties().forEach((propertyName, template) -> { final Optional<ConfigurationProperty> maybeProperty = PropertyGenerators.createProperty(propertyName, swagger, template); maybeProperty.ifPresent(property -> { builder.putProperty(propertyName, property); if (!alreadyConfiguredProperties.containsKey(propertyName)) { final String defaultValue = property.getDefaultValue(); if (defaultValue != null) { builder.putConfiguredProperty(propertyName, defaultValue); } } }); }); return builder.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 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"); }); } }
@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); }
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"); }
@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"); }
@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); } }