This is an automated email from the ASF dual-hosted git repository. markap14 pushed a commit to branch NIFI-15258 in repository https://gitbox.apache.org/repos/asf/nifi.git
commit f4c577540e60d31076eab3ed629c430e3de6ea99 Author: Mark Payne <[email protected]> AuthorDate: Mon Dec 15 12:13:19 2025 -0500 NIFI-15336: Created AuthorizableSecret and implemented ParameterProviderSecretProvider to provide the Parameter Provider as the associated Authorizable (#10644) --- .../secrets/ConnectorTestRunnerAuthorizable.java | 34 ++++++++++++++ .../secrets/ConnectorTestRunnerSecretProvider.java | 4 ++ .../connector/secrets/AuthorizableSecret.java | 25 ++++++++++ .../secrets/ParameterProviderSecretProvider.java | 1 + .../connector/secrets/StandardSecret.java | 54 +++++++++++++++++----- 5 files changed, 106 insertions(+), 12 deletions(-) diff --git a/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerAuthorizable.java b/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerAuthorizable.java new file mode 100644 index 0000000000..5600c34f14 --- /dev/null +++ b/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerAuthorizable.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.mock.connector.server.secrets; + +import org.apache.nifi.authorization.Resource; +import org.apache.nifi.authorization.resource.Authorizable; +import org.apache.nifi.authorization.resource.ResourceFactory; + +public class ConnectorTestRunnerAuthorizable implements Authorizable { + @Override + public Authorizable getParentAuthorizable() { + return null; + } + + @Override + public Resource getResource() { + return ResourceFactory.getControllerResource(); + } +} diff --git a/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerSecretProvider.java b/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerSecretProvider.java index 16e05ff4f0..3323eb9eb9 100644 --- a/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerSecretProvider.java +++ b/nifi-connector-mock-bundle/nifi-connector-mock-server/src/main/java/org/apache/nifi/mock/connector/server/secrets/ConnectorTestRunnerSecretProvider.java @@ -17,6 +17,7 @@ package org.apache.nifi.mock.connector.server.secrets; +import org.apache.nifi.authorization.resource.Authorizable; import org.apache.nifi.components.connector.Secret; import org.apache.nifi.components.connector.secrets.SecretProvider; import org.apache.nifi.components.connector.secrets.StandardSecret; @@ -29,6 +30,7 @@ import java.util.Map; public class ConnectorTestRunnerSecretProvider implements SecretProvider { public static final String GROUP_NAME = "Default"; + private static final Authorizable AUTHORIZABLE = new ConnectorTestRunnerAuthorizable(); private final Map<String, String> secrets = new HashMap<>(); @@ -55,6 +57,7 @@ public class ConnectorTestRunnerSecretProvider implements SecretProvider { .groupName(GROUP_NAME) .name(entry.getKey()) .value(entry.getValue()) + .authorizable(AUTHORIZABLE) .build(); secrets.add(secret); @@ -76,6 +79,7 @@ public class ConnectorTestRunnerSecretProvider implements SecretProvider { .groupName(GROUP_NAME) .name(secretName) .value(value) + .authorizable(AUTHORIZABLE) .build(); matchingSecrets.add(secret); diff --git a/nifi-framework-api/src/main/java/org/apache/nifi/components/connector/secrets/AuthorizableSecret.java b/nifi-framework-api/src/main/java/org/apache/nifi/components/connector/secrets/AuthorizableSecret.java new file mode 100644 index 0000000000..3bcf6b099c --- /dev/null +++ b/nifi-framework-api/src/main/java/org/apache/nifi/components/connector/secrets/AuthorizableSecret.java @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.components.connector.secrets; + +import org.apache.nifi.authorization.resource.Authorizable; +import org.apache.nifi.components.connector.Secret; + +public interface AuthorizableSecret extends Secret, Authorizable { + +} diff --git a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java index 2f058f3c2a..b7d37efc19 100644 --- a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java +++ b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/ParameterProviderSecretProvider.java @@ -67,6 +67,7 @@ public class ParameterProviderSecretProvider implements SecretProvider { .name(descriptor.getName()) .description(descriptor.getDescription()) .value(parameter.getValue()) + .authorizable(parameterProvider) .build(); } diff --git a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/StandardSecret.java b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/StandardSecret.java index 443b19cd06..f2da84d233 100644 --- a/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/StandardSecret.java +++ b/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/components/connector/secrets/StandardSecret.java @@ -17,16 +17,18 @@ package org.apache.nifi.components.connector.secrets; -import org.apache.nifi.components.connector.Secret; +import org.apache.nifi.authorization.Resource; +import org.apache.nifi.authorization.resource.Authorizable; import java.util.Objects; -public class StandardSecret implements Secret { +public class StandardSecret implements AuthorizableSecret { private final String providerName; private final String groupName; private final String name; private final String description; private final String value; + private final Authorizable authorizable; private StandardSecret(final Builder builder) { this.providerName = builder.providerName; @@ -34,6 +36,7 @@ public class StandardSecret implements Secret { this.name = builder.name; this.description = builder.description; this.value = builder.value; + this.authorizable = builder.authorizable; } @Override @@ -63,13 +66,12 @@ public class StandardSecret implements Secret { @Override public String toString() { - return "StandardSecret[providerName=%s, groupName=%s, name=%s, description=%s]".formatted( - providerName, groupName, name, description); + return "StandardSecret[providerName=%s, groupName=%s, name=%s]".formatted(providerName, groupName, name); } @Override public int hashCode() { - return Objects.hash(providerName, groupName, name, description); + return Objects.hash(providerName, groupName, name); } @Override @@ -83,8 +85,17 @@ public class StandardSecret implements Secret { final StandardSecret other = (StandardSecret) obj; return Objects.equals(this.providerName, other.providerName) && Objects.equals(this.groupName, other.groupName) - && Objects.equals(this.name, other.name) - && Objects.equals(this.description, other.description); + && Objects.equals(this.name, other.name); + } + + @Override + public Authorizable getParentAuthorizable() { + return authorizable.getParentAuthorizable(); + } + + @Override + public Resource getResource() { + return authorizable.getResource(); } public static class Builder { @@ -93,33 +104,52 @@ public class StandardSecret implements Secret { private String name; private String description; private String value; + private Authorizable authorizable; - public Builder providerName(String providerName) { + public Builder providerName(final String providerName) { this.providerName = providerName; return this; } - public Builder groupName(String groupName) { + public Builder groupName(final String groupName) { this.groupName = groupName; return this; } - public Builder name(String name) { + public Builder name(final String name) { this.name = name; return this; } - public Builder description(String description) { + public Builder description(final String description) { this.description = description; return this; } - public Builder value(String value) { + public Builder value(final String value) { this.value = value; return this; } + public Builder authorizable(final Authorizable authorizable) { + this.authorizable = authorizable; + return this; + } + public StandardSecret build() { + if (providerName == null) { + throw new IllegalStateException("Provider name is required"); + } + if (groupName == null) { + throw new IllegalStateException("Group name is required"); + } + if (name == null) { + throw new IllegalStateException("Secret name is required"); + } + if (authorizable == null) { + throw new IllegalStateException("Authorizable is required"); + } + return new StandardSecret(this); } }
